summaryrefslogtreecommitdiff
path: root/Assets/Scripts/Unit
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts/Unit')
-rw-r--r--Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs7
-rw-r--r--Assets/Scripts/Unit/Components/UnitBody.cs27
-rw-r--r--Assets/Scripts/Unit/Components/UnitBody.cs.meta11
-rw-r--r--Assets/Scripts/Unit/Components/UnitState/PCState.cs14
-rw-r--r--Assets/Scripts/Unit/Components/UnitState/PCState_States.cs17
-rw-r--r--Assets/Scripts/Unit/Controller/UnitController.cs9
-rw-r--r--Assets/Scripts/Unit/Editor/UnitDictionariesDrawer.cs4
-rw-r--r--Assets/Scripts/Unit/Events/EventEffect.cs17
-rw-r--r--Assets/Scripts/Unit/TimelineEventProxy_Handlers.cs13
-rw-r--r--Assets/Scripts/Unit/UnitDetail.cs51
10 files changed, 137 insertions, 33 deletions
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>();
unitCollider.Initialize();
- unitDetail = gameObject.GetComponentInChildren<UnitDetail>();
+ unitBody = gameObject.GetOrAddComponent<UnitBody>();
+ unitBody.Initialize();
+
+ unitDetail = gameObject.GetComponentInChildren<UnitDetail>();
+
}
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<EUnitBone, Transform> { }
+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<EUnitReferencePoint, Transform> { }
+
// 角色的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)))