From 28b89971f0d3fd246443450c87f33996716facb3 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 15 Sep 2021 19:58:59 +0800 Subject: *misc --- Assets/Scripts/Effects/FxClear.cs | 14 ++++-- Assets/Scripts/Input/InputManager.cs | 10 ++--- .../Unit/Components/UnitAnimation/UnitAnimation.cs | 7 ++- Assets/Scripts/Unit/Components/UnitBody.cs | 27 ++++++++++++ Assets/Scripts/Unit/Components/UnitBody.cs.meta | 11 +++++ .../Scripts/Unit/Components/UnitState/PCState.cs | 14 +++++- .../Unit/Components/UnitState/PCState_States.cs | 17 ++++---- Assets/Scripts/Unit/Controller/UnitController.cs | 9 +++- .../Scripts/Unit/Editor/UnitDictionariesDrawer.cs | 4 ++ Assets/Scripts/Unit/Events/EventEffect.cs | 17 +++++--- Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs | 13 ++++-- Assets/Scripts/Unit/UnitDetail.cs | 51 +++++++++++++++++----- 12 files changed, 153 insertions(+), 41 deletions(-) create mode 100644 Assets/Scripts/Unit/Components/UnitBody.cs create mode 100644 Assets/Scripts/Unit/Components/UnitBody.cs.meta (limited to 'Assets/Scripts') diff --git a/Assets/Scripts/Effects/FxClear.cs b/Assets/Scripts/Effects/FxClear.cs index 1edf2b97..af3a7003 100644 --- a/Assets/Scripts/Effects/FxClear.cs +++ b/Assets/Scripts/Effects/FxClear.cs @@ -125,13 +125,21 @@ public class FxClear : MonoBehaviour { if (m_Attached) { - transform.rotation = m_Root.rotation * Quaternion.Euler(m_Rotation); - transform.position = m_Root.TransformPoint(m_Offset); + if(m_Root) + { + transform.rotation = m_Root.rotation * Quaternion.Euler(m_Rotation); + transform.position = m_Root.TransformPoint(m_Offset); + } + else + { + transform.rotation = m_RootRot * Quaternion.Euler(m_Rotation); + transform.position = m_RootPos + (m_RootRot * m_Offset); + } } else { transform.rotation = m_RootRot * Quaternion.Euler(m_Rotation); - transform.position = m_RootPos + (m_Root.rotation * m_Offset); + transform.position = m_RootPos + (m_RootRot * m_Offset); } } } diff --git a/Assets/Scripts/Input/InputManager.cs b/Assets/Scripts/Input/InputManager.cs index 6b200462..06e4f02f 100644 --- a/Assets/Scripts/Input/InputManager.cs +++ b/Assets/Scripts/Input/InputManager.cs @@ -39,11 +39,11 @@ public class InputManager : SingletonMB cmd.time = Time.time; m_CommandQueue.Add(cmd); - //Debug.Log(cmd.time); - //string cmdStr = ""; - //m_CommandQueue.ForEach(s => cmdStr += s.key.ToString() + ","); - //Debug.Log(cmdStr); - } + //Debug.Log(cmd.time); + string cmdStr = ""; + m_CommandQueue.ForEach(s => cmdStr += s.key.ToString() + ","); + Debug.Log(cmdStr); + } } float curTime = Time.time; int removeCount = 0; diff --git a/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs b/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs index d036c5b4..ddf2c4cc 100644 --- a/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs +++ b/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs @@ -41,7 +41,7 @@ public class AnimatorLayerInfo } // 当前在播放的动作 - // 如果处于transition中,动作不变,切换完成后才会到下一个动作 + // 如果处于transition中,认为当前状态是transition的目标状态(和Animator规则不一样) public AnimatorStateInfo stateInfo { get @@ -262,6 +262,11 @@ public class UnitAnimation : UnitComponent } } + public override void OnUpdate() + { + base.OnUpdate(); + } + public void Play(string animState, int layerIndex = 0, float normalizedTime = float.NegativeInfinity) { AnimatorLayerInfo layer = this.layers[layerIndex]; diff --git a/Assets/Scripts/Unit/Components/UnitBody.cs b/Assets/Scripts/Unit/Components/UnitBody.cs new file mode 100644 index 00000000..cc7ac348 --- /dev/null +++ b/Assets/Scripts/Unit/Components/UnitBody.cs @@ -0,0 +1,27 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class UnitBody : UnitComponent +{ + public override void Initialize() + { + base.Initialize(); + } + + public override void OnUpdate() + { + base.OnUpdate(); + } + + public override void OnDestroy() + { + base.OnDestroy(); + } + + public void OnLateAnimatorUpdate() + { + + } + +} diff --git a/Assets/Scripts/Unit/Components/UnitBody.cs.meta b/Assets/Scripts/Unit/Components/UnitBody.cs.meta new file mode 100644 index 00000000..01a2d416 --- /dev/null +++ b/Assets/Scripts/Unit/Components/UnitBody.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d90e40c0e85fa474ba6282bcb5bab16b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Unit/Components/UnitState/PCState.cs b/Assets/Scripts/Unit/Components/UnitState/PCState.cs index 0880d369..afedf6d8 100644 --- a/Assets/Scripts/Unit/Components/UnitState/PCState.cs +++ b/Assets/Scripts/Unit/Components/UnitState/PCState.cs @@ -147,14 +147,26 @@ public partial class PCState : UnitState } - void TryTianyin() + bool TryTianyin() { if (Input.GetKeyDown("o")) { float offset = owner.isTowardRight ? 1.2f : -1.2f; TestErika.Instance.monster.owner.center = owner.center + new Vector3(offset, 0.5f, 0); ((MonsterController)TestErika.Instance.monster.owner).monsterState.ChangeState(MonsterState.EUnitState.HitInAir, new MonsterState.HitInAirParam(), true); + return true; } + return false; + } + + bool TryAttackToAir() + { + if(Input.GetKey("s") && Input.GetKeyDown("j")) + { + ChangeState(EUnitState.AttackToAir, new SkillParam()); + return true; + } + return false; } } \ No newline at end of file diff --git a/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs b/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs index 512c2113..7860e2af 100644 --- a/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs +++ b/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs @@ -48,17 +48,19 @@ public partial class PCState : UnitState m_Owner.SetYPosition(0); while (true) { - if (Input.GetKeyDown("j")) + if(TryAttackToAir()) { - ChangeState(EUnitState.Attack, new SkillParam()); + yield break; } - if (Input.GetKeyDown("u")) + if (Input.GetKeyDown("j")) { - ChangeState(EUnitState.AttackToAir, new SkillParam()); + ChangeState(EUnitState.Attack, new SkillParam()); + yield break; } if (Input.GetKeyDown("space")) { ChangeState(EUnitState.Jump, new JumpParam()); + yield break; } if (Input.GetKey("d")) { @@ -66,6 +68,7 @@ public partial class PCState : UnitState move.isRight = true; move.key = "d"; ChangeState(EUnitState.Move, move); + yield break; } if (Input.GetKey("a")) { @@ -73,6 +76,7 @@ public partial class PCState : UnitState move.isRight = false; move.key = "a"; ChangeState(EUnitState.Move, move); + yield break; } yield return null; } @@ -101,10 +105,7 @@ public partial class PCState : UnitState m_Owner.pcAnimation.AnimMove(); while (Input.GetKey(param.key)) { - if (Input.GetKeyDown("u")) - { - ChangeState(EUnitState.AttackToAir, new SkillParam()); - } + TryAttackToAir(); yield return null; } ChangeState(EUnitState.Idle, new IdleParam()); diff --git a/Assets/Scripts/Unit/Controller/UnitController.cs b/Assets/Scripts/Unit/Controller/UnitController.cs index 3c09e5e6..ff3d9df2 100644 --- a/Assets/Scripts/Unit/Controller/UnitController.cs +++ b/Assets/Scripts/Unit/Controller/UnitController.cs @@ -28,7 +28,6 @@ public class UnitController : MonoBehaviour/*, Interactable*/ public PCState pcState { get { return unitState as PCState; } } public MonsterState monsterState { get { return unitState as MonsterState; } } - public UnitAnimation unitAnimation; public PCAnimation pcAnimation { get { return unitAnimation as PCAnimation; } } public MonsterAnimation monsterAnimation { get { return unitAnimation as MonsterAnimation; } } @@ -41,6 +40,8 @@ public class UnitController : MonoBehaviour/*, Interactable*/ public UnitDetail unitDetail; + public UnitBody unitBody; + public GameObject unitObj; // 角色模型 #region 事件监听 @@ -121,7 +122,11 @@ public class UnitController : MonoBehaviour/*, Interactable*/ unitCollider = gameObject.GetOrAddComponent(); unitCollider.Initialize(); - unitDetail = gameObject.GetComponentInChildren(); + unitBody = gameObject.GetOrAddComponent(); + unitBody.Initialize(); + + unitDetail = gameObject.GetComponentInChildren(); + } public virtual void Update() diff --git a/Assets/Scripts/Unit/Editor/UnitDictionariesDrawer.cs b/Assets/Scripts/Unit/Editor/UnitDictionariesDrawer.cs index d56c9f36..07e3073e 100644 --- a/Assets/Scripts/Unit/Editor/UnitDictionariesDrawer.cs +++ b/Assets/Scripts/Unit/Editor/UnitDictionariesDrawer.cs @@ -3,3 +3,7 @@ [CustomPropertyDrawer(typeof(UnitBoneDictionary))] public class UnitBoneDictionaryDrawer : SerializableDictionaryPropertyDrawer { } + +[CustomPropertyDrawer(typeof(UnitReferencePointDictionary))] +public class UnitReferencePointDictionaryDrawer : SerializableDictionaryPropertyDrawer { } + diff --git a/Assets/Scripts/Unit/Events/EventEffect.cs b/Assets/Scripts/Unit/Events/EventEffect.cs index 1369e7b0..204fa528 100644 --- a/Assets/Scripts/Unit/Events/EventEffect.cs +++ b/Assets/Scripts/Unit/Events/EventEffect.cs @@ -2,11 +2,13 @@ public class EventEffect : AnimationEventBase { - public enum EAttachNode + public enum EParentNode { - Unit, + Unit = 0, + World, Bone, PresetBone, + ReferencePoint, } public override TimelineEventProxy.EEventType type { get { return TimelineEventProxy.EEventType.EventEffect; } } @@ -18,15 +20,18 @@ public class EventEffect : AnimationEventBase [Tooltip("Is attached to a bone")] public bool attached = true; - [If("attached")] - public EAttachNode attachNode = EAttachNode.Unit; + [Tooltip("Parent node")] + public EParentNode parentNode = EParentNode.Unit; - [When("attachNode", EAttachNode.Bone), Tooltip("Bone path attach to")] + [When("parentNode", EParentNode.Bone), Tooltip("Bone path attach to")] public string bonePath; - [When("attachNode", EAttachNode.PresetBone), Tooltip("Preset unit bone defined in unit details")] + [When("parentNode", EParentNode.PresetBone), Tooltip("Preset unit bone defined in unit details")] public EUnitBone bone; + [When("parentNode", EParentNode.ReferencePoint), Tooltip("参考点")] + public EUnitReferencePoint referencePoint; + [Tooltip("Position offset")] public Vector3 position; diff --git a/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs b/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs index adc4fe3e..a3eef37a 100644 --- a/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs +++ b/Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs @@ -33,18 +33,22 @@ public partial class TimelineEventProxy info.bAttached = effect.attached; if (effect.attached) { - if (effect.attachNode == global::EventEffect.EAttachNode.Unit) + if (effect.parentNode == global::EventEffect.EParentNode.Unit) { info.rootTr = m_Root; } - else if (effect.attachNode == global::EventEffect.EAttachNode.Bone) + else if(effect.parentNode == global::EventEffect.EParentNode.World) + { + info.rootTr = null; + } + else if (effect.parentNode == global::EventEffect.EParentNode.Bone) { if (m_UnitModel != null) { info.rootTr = m_UnitModel.Find(effect.bonePath); } } - else if(effect.attachNode == global::EventEffect.EAttachNode.PresetBone) + else if(effect.parentNode == global::EventEffect.EParentNode.PresetBone) { if(m_UnitModel != null) { @@ -55,6 +59,9 @@ public partial class TimelineEventProxy } } } + else if(effect.parentNode == global::EventEffect.EParentNode.ReferencePoint) + { + } } onClear.Initialize(info); diff --git a/Assets/Scripts/Unit/UnitDetail.cs b/Assets/Scripts/Unit/UnitDetail.cs index 30a98c63..bab954c4 100644 --- a/Assets/Scripts/Unit/UnitDetail.cs +++ b/Assets/Scripts/Unit/UnitDetail.cs @@ -59,27 +59,52 @@ public enum EUnitBone LLowerLeg, // 小腿肚 LFoot, // 左脚 LToes, // 脚趾 - LToe0, // 脚趾0 - LToe1, // 脚趾1 - LToe2, // 脚趾2 - LToe3, // 脚趾3 - LToe4, // 脚趾4 + //LToe0, // 脚趾0 + //LToe1, // 脚趾1 + //LToe2, // 脚趾2 + //LToe3, // 脚趾3 + //LToe4, // 脚趾4 RUpperLeg = 80, // 大腿 RLowerLeg, // 小腿肚 RFoot, // 左脚 RToes, // 脚趾 - RToe0, // 脚趾0 - RToe1, // 脚趾1 - RToe2, // 脚趾2 - RToe3, // 脚趾3 - RToe4, // 脚趾4 + //RToe0, // 脚趾0 + //RToe1, // 脚趾1 + //RToe2, // 脚趾2 + //RToe3, // 脚趾3 + //RToe4, // 脚趾4 } [Serializable] public class UnitBoneDictionary : SerializableDictionary { } +public enum EUnitReferencePoint +{ + None = 0, + + Gunpoint = 1, // 枪口 + Gunpoint2, // 枪口 + + SwordTop = 20, // 剑尖端 + SwordBottom, // 剑底端 + + HitpointHead = 40, + HitpointHeadFront, + HitpointHeadBack, + HitpointNeck, + HitpointUpperBody, + HitpointUpperBodyFront, + HitpointUpperBodyBack, + HitpointLowerBody, + HitpointLowerBodyFront, + HitpointLowerBodyBack, +} + +[Serializable] +public class UnitReferencePointDictionary : SerializableDictionary { } + // 角色的prefab附加数据 // * afterimage的prefab // * 骨骼映射 @@ -92,8 +117,10 @@ public class UnitDetail : MonoBehaviour public UnitBoneDictionary bones; - //[ExecuteInEditMode] - public UnitDetail() + public UnitReferencePointDictionary referencePoints; + + //[ExecuteInEditMode] + public UnitDetail() { bones = new UnitBoneDictionary(); foreach(EUnitBone e in Enum.GetValues(typeof(EUnitBone))) -- cgit v1.1-26-g67d0