summaryrefslogtreecommitdiff
path: root/Assets/Scripts
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-09-10 22:29:23 +0800
committerchai <chaifix@163.com>2021-09-10 22:29:23 +0800
commit63f4fd784f27e195913607e938a6d7282a9485d3 (patch)
tree5daf388cfa445890024ce7da9e7ff3dbb41957d1 /Assets/Scripts
parent4e46f701027da081d60aa96e0814996c7acfa70a (diff)
*misc
Diffstat (limited to 'Assets/Scripts')
-rw-r--r--Assets/Scripts/Unit/AnimationData.cs2
-rw-r--r--Assets/Scripts/Unit/Components/UnitState/PCState_Event.cs11
-rw-r--r--Assets/Scripts/Unit/Components/UnitState/PCState_States.cs33
-rw-r--r--Assets/Scripts/Unit/Components/UnitState/UnitState.cs12
-rw-r--r--Assets/Scripts/Unit/Events/EventUnit_SetPosition.cs23
-rw-r--r--Assets/Scripts/Unit/Events/EventUnit_SetPosition.cs.meta11
-rw-r--r--Assets/Scripts/Unit/TimelineEventProxy.cs9
-rw-r--r--Assets/Scripts/Unit/UnitRootMotion.cs6
8 files changed, 92 insertions, 15 deletions
diff --git a/Assets/Scripts/Unit/AnimationData.cs b/Assets/Scripts/Unit/AnimationData.cs
index c62e35fc..04a5fbb3 100644
--- a/Assets/Scripts/Unit/AnimationData.cs
+++ b/Assets/Scripts/Unit/AnimationData.cs
@@ -84,6 +84,8 @@ public enum EAnimationProperty
TransitionInDuration = 3, // 过渡到这个动作的时间
TransitionOutDuration = 5, // 过渡到下一个动作的时间
CanBeInterrupted = 4, // 是否可以被打断
+ ORMEnforcement = 6, // 限制Y坐标的rootmotion不能小于0,仅限override rootmotion
+ Endpoint = 7, // 结束点,范围[0-1],如果只截取动作的一部分,用这个属性设置
}
[Serializable]
diff --git a/Assets/Scripts/Unit/Components/UnitState/PCState_Event.cs b/Assets/Scripts/Unit/Components/UnitState/PCState_Event.cs
index b5c0833f..73c65a0c 100644
--- a/Assets/Scripts/Unit/Components/UnitState/PCState_Event.cs
+++ b/Assets/Scripts/Unit/Components/UnitState/PCState_Event.cs
@@ -5,8 +5,19 @@ using UnityEngine;
public partial class PCState : UnitState
{
+
void OnTimeLineEvent(AnimationEventBase animEvent)
{
+ if(animEvent is EventUnit_SetPosition)
+ {
+ EventUnit_SetPosition setPos = animEvent as EventUnit_SetPosition;
+ Vector3 pos = owner.transform.position;
+ if(setPos.setY)
+ {
+ pos.y = setPos.y;
+ }
+ owner.transform.position = pos;
+ }
}
diff --git a/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs b/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs
index 2cfaf876..14d62c87 100644
--- a/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs
+++ b/Assets/Scripts/Unit/Components/UnitState/PCState_States.cs
@@ -43,14 +43,9 @@ public partial class PCState : UnitState
IEnumerator Idle(IdleParam param)
{
- //if (m_Owner.isInAir) // 浮空切换到landing
- //{
- // ChangeState(EUnitState.Landing, new LandingParam());
- //}
- //else // idle
- //{
- m_Owner.SetYPosition(0);
m_Owner.pcAnimation.AnimIdle();
+ yield return new WaitForTransitionDone(owner.unitAnimation);
+ m_Owner.SetYPosition(0);
while (true)
{
if (Input.GetKeyDown("j"))
@@ -81,7 +76,6 @@ public partial class PCState : UnitState
}
yield return null;
}
- //}
}
void OnIdleExit(EUnitState nextState)
@@ -106,7 +100,11 @@ public partial class PCState : UnitState
//if (Input.GetKey(param.key))
m_Owner.pcAnimation.AnimMove();
while (Input.GetKey(param.key))
- {
+ {
+ if (Input.GetKeyDown("u"))
+ {
+ ChangeState(EUnitState.AttackToAir, new SkillParam());
+ }
yield return null;
}
ChangeState(EUnitState.Idle, new IdleParam());
@@ -188,7 +186,7 @@ public partial class PCState : UnitState
}
}
- if (isAnimationReachEnd)
+ if (isAnimationReachEnd || isAnimationReachEndPoint)
{
ChangeState(EUnitState.Landing, new LandingParam());
}
@@ -334,9 +332,13 @@ public partial class PCState : UnitState
while (true)
{
Vector3 pos = m_Owner.transform.position;
- vy += g * Time.deltaTime;
- pos.y += vy * Time.deltaTime;
- pos.y = Mathf.Max(0, pos.y);
+
+ if(!landingGround)
+ {
+ vy += g * Time.deltaTime;
+ pos.y += vy * Time.deltaTime;
+ pos.y = Mathf.Max(0, pos.y);
+ }
TryDash();
@@ -352,13 +354,16 @@ public partial class PCState : UnitState
TurnAround(true);
pos.x += vx * Time.deltaTime;
}
+
if (Input.GetKeyDown("j"))
{
ChangeState(EUnitState.AirAttack, new SkillParam());
}
+
m_Owner.transform.position = pos;
+
if (pos.y > 0 && pos.y <= 1 && !landingGround)
- {
+ {
landingGround = true;
m_Owner.pcAnimation.AnimLandingGround();
}
diff --git a/Assets/Scripts/Unit/Components/UnitState/UnitState.cs b/Assets/Scripts/Unit/Components/UnitState/UnitState.cs
index b94a98df..ff42c2be 100644
--- a/Assets/Scripts/Unit/Components/UnitState/UnitState.cs
+++ b/Assets/Scripts/Unit/Components/UnitState/UnitState.cs
@@ -17,6 +17,18 @@ public class UnitState : UnitComponent
}
}
+ // 如果设置了endpoint属性,检查是否到了endpoint
+ public virtual bool isAnimationReachEndPoint
+ {
+ get
+ {
+ var layer = owner.unitAnimation.baseLayer;
+ if (!layer.animationData.HasProperty(EAnimationProperty.Endpoint))
+ return false;
+ return layer.playbackNormalizedTime >= layer.animationData.GetProperty(EAnimationProperty.Endpoint);
+ }
+ }
+
public virtual bool isComboOpen
{
get
diff --git a/Assets/Scripts/Unit/Events/EventUnit_SetPosition.cs b/Assets/Scripts/Unit/Events/EventUnit_SetPosition.cs
new file mode 100644
index 00000000..2298492b
--- /dev/null
+++ b/Assets/Scripts/Unit/Events/EventUnit_SetPosition.cs
@@ -0,0 +1,23 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class EventUnit_SetPosition : AnimationEventBase
+{
+ public override TimelineEventProxy.EEventType type => TimelineEventProxy.EEventType.EventUnit_SetPosition;
+
+ public override string shortName => "P";
+
+ public bool setX;
+ [If("setX")]
+ public float x;
+
+ public bool setY;
+ [If("setY")]
+ public float y;
+
+ public bool setZ;
+ [If("setZ")]
+ public float z;
+
+}
diff --git a/Assets/Scripts/Unit/Events/EventUnit_SetPosition.cs.meta b/Assets/Scripts/Unit/Events/EventUnit_SetPosition.cs.meta
new file mode 100644
index 00000000..d7ccb476
--- /dev/null
+++ b/Assets/Scripts/Unit/Events/EventUnit_SetPosition.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7b8952562a0fbae41a92bd6c1f897ca1
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Scripts/Unit/TimelineEventProxy.cs b/Assets/Scripts/Unit/TimelineEventProxy.cs
index 10dae57d..e3ce605e 100644
--- a/Assets/Scripts/Unit/TimelineEventProxy.cs
+++ b/Assets/Scripts/Unit/TimelineEventProxy.cs
@@ -54,6 +54,8 @@ public partial class TimelineEventProxy
EventCamera_Blur, // 相机模糊
EventCamera_WhiteOut, // 相机白屏
+ EventUnit_SetPosition, // 设置位置
+
EventMesh_AfterImage, // 角色残像
EventMesh_AfterImageStop, // 角色残像停止事件
EventMesh_FadeIn, // 角色透明度
@@ -253,6 +255,11 @@ public partial class TimelineEventProxy
}
- #endregion
+ void EventUnit_SetPosition(AnimationEventBase animEvent)
+ {
+ // 在unitState回调里处理
+ }
+
+ #endregion
} \ No newline at end of file
diff --git a/Assets/Scripts/Unit/UnitRootMotion.cs b/Assets/Scripts/Unit/UnitRootMotion.cs
index 98789725..5234daab 100644
--- a/Assets/Scripts/Unit/UnitRootMotion.cs
+++ b/Assets/Scripts/Unit/UnitRootMotion.cs
@@ -97,7 +97,13 @@ public class UnitRootMotion : UnitComponent
m_PrevFrame = frame;
Vector3 dest = rmData.GetRootMotionDistance(m_PrevFrame, frame);
Vector3 realDest = m_Owner.transform.rotation * dest;
+ if(animData.GetProperty(EAnimationProperty.ORMEnforcement) != 0)
+ {
+ if(m_Owner.transform.position.y + realDest.y < 0)
+ realDest.y = 0;
+ }
m_Owner.transform.position += realDest;
+
m_PrevFrame = frame;
}
else