Example #1
0
        protected void HandleLoadedModel(PlayerEntity player, GameObject obj)
        {
            obj.layer = UnityLayerManager.GetLayerIndex(EUnityLayerName.Player);
            PlayerEntityUtility.DisableCollider(obj.transform);

            if (!player.hasCharacterContoller)
            {
                var character = DefaultGo.CreateGameObject(player.entityKey.ToString());

                character.layer = UnityLayerManager.GetLayerIndex(EUnityLayerName.Player);
                AddThirdModelOffsetObject(character);
                CharacterController        cc  = PlayerEntityUtility.InitCharacterController(character);
                KinematicCharacterMotor    kcc = PlayerEntityUtility.InitKinematicCharacterMotor(character);
                CharacterControllerContext characterControllerContext = new CharacterControllerContext(
                    new UnityCharacterController(cc, InitActionWithOffset(), !player.isFlagSelf),
                    new Core.CharacterController.ConcreteController.ProneCharacterController(kcc,
                                                                                             new ProneController(),
                                                                                             InitActionWithNoOffset()),
                    new Core.CharacterController.ConcreteController.DiveCharacterController(kcc,
                                                                                            new DiveController(), InitActionWithNoOffset()),
                    new Core.CharacterController.ConcreteController.SwimCharacterController(kcc,
                                                                                            new SwimController(), InitActionWithNoOffset())
                    );


                var curver = character.AddComponent <AirMoveCurve>();
                curver.AireMoveCurve = SingletonManager.Get <CharacterStateConfigManager>().AirMoveCurve;
                curver.MovementCurve = SingletonManager.Get <CharacterStateConfigManager>().MovementCurve;
                curver.PostureCurve  = SingletonManager.Get <CharacterStateConfigManager>().PostureCurve;
                if (character.GetComponent <EntityReference>() == null)
                {
                    character.AddComponentUncheckRequireAndDisallowMulti <EntityReference>();
                }
                character.GetComponent <EntityReference>().Init(player.entityAdapter);
                var comp = character.AddComponent <PlayerVehicleCollision>();
                comp.AllContext = _contexts;

                var appearanceManager = new AppearanceManager();


                var characterControllerManager = new CharacterControllerManager();
                characterControllerManager.SetCharacterController(characterControllerContext);


                var characterBone = new CharacterBoneManager();
                characterBone.SetWardrobeController(appearanceManager.GetWardrobeController());
                characterBone.SetWeaponController(appearanceManager.GetController <WeaponController>());
                var weaponController = (WeaponController)appearanceManager.GetController <WeaponController>();
                if (null != weaponController)
                {
                    weaponController.SetWeaponChangedCallBack(characterBone.CurrentWeaponChanged);
                    weaponController.SetCacheChangeAction(characterBone.CacheChangeCacheAction);
                }

                player.AddCharacterControllerInterface(characterControllerManager);
                player.AddAppearanceInterface(appearanceManager);
                player.AddCharacterContoller(characterControllerContext);
                player.AddCharacterBoneInterface(characterBone);
                player.AddRecycleableAsset(character);
                player.AddPlayerGameState(PlayerLifeStateEnum.NullState);
            }
        }
        public void Init(IEntity entity, AssetStatus status)
        {
            var player = entity as PlayerEntity;
            var obj    = status.Object.AsGameObject;

            obj.layer = UnityLayerManager.GetLayerIndex(EUnityLayerName.Player);
            PlayerEntityUtility.DisableCollider(obj.transform);
            var go = obj;


            player.AddFirstPersonModel(go);

            player.appearanceInterface.FirstPersonAppearance = new FirstPersonAppearanceManager(player.firstPersonAppearance);

            go.name = "P1_" + player.entityKey;
            go.transform.SetParent(player.playerResource.Root.transform);
            go.transform.localPosition = new Vector3(0, player.firstPersonAppearance.FirstPersonHeight, player.firstPersonAppearance.FirstPersonForwardOffset);
            go.transform.localRotation = Quaternion.identity;
            go.transform.localScale    = Vector3.one;
            Logger.InfoFormat("P1 loaded: {0}", player.entityKey);

            player.AddFirstPersonAnimator(go.GetComponent <Animator>());

            var ik = go.AddComponent <PlayerIK>();

            ik.SetAnimator(AvatarIKGoal.LeftHand, player.firstPersonAnimator.UnityAnimator);
            ik.SetIKLayer(AvatarIKGoal.LeftHand, NetworkAnimatorLayer.FirstPersonIKPassLayer);
            ik.SetAnimator(AvatarIKGoal.RightHand, player.firstPersonAnimator.UnityAnimator);
            ik.SetIKLayer(AvatarIKGoal.RightHand, NetworkAnimatorLayer.FirstPersonIKPassLayer);


            BoneTool.CacheTransform(go);

            if (player.isFlagSelf)
            {
                var animationEvent = go.AddComponent <AnimationClipEvent>();
                animationEvent.Player = player;
                player.animatorClip.ClipManager.SetAnimationCleanEventCallback(animationEvent.InterruptAnimationEventFunc);
            }
            else
            {
                go.AddComponent <ThirdPersonAnimationClipEvent>();
            }

            player.firstPersonAnimator.UnityAnimator.Update(0);

            player.appearanceInterface.Appearance.SetFirstPersonCharacter(go);
            player.appearanceInterface.FirstPersonAppearance.SetFirstPersonCharacter(go);

            player.appearanceInterface.Appearance.SetAnimatorP1(player.firstPersonAnimator.UnityAnimator);

            player.stateInterface.State.SetName(player.RootGo().name);

            player.characterBoneInterface.CharacterBone.SetFirstPersonCharacter(go);

            if (!player.hasFpAnimStatus)
            {
                player.AddFpAnimStatus(NetworkAnimatorUtil.CreateAnimatorLayers(player.firstPersonAnimator.UnityAnimator),
                                       NetworkAnimatorUtil.GetAnimatorParams(player.firstPersonAnimator.UnityAnimator));
            }

            // 禁用非可见状态下的动画更新
            if (!player.isFlagSelf)
            {
                player.firstPersonAnimator.UnityAnimator.cullingMode = AnimatorCullingMode.CullUpdateTransforms;
            }
            else
            {
                player.firstPersonAnimator.UnityAnimator.cullingMode = AnimatorCullingMode.AlwaysAnimate;
            }
        }