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; } }