summaryrefslogtreecommitdiff
path: root/Assets/Scripts
diff options
context:
space:
mode:
Diffstat (limited to 'Assets/Scripts')
-rw-r--r--Assets/Scripts/Curve3D.meta8
-rw-r--r--Assets/Scripts/Drone.meta8
-rw-r--r--Assets/Scripts/Props.meta8
-rw-r--r--Assets/Scripts/Robot.meta8
-rw-r--r--Assets/Scripts/Scene.meta8
-rw-r--r--Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs3
-rw-r--r--Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs32
-rw-r--r--Assets/Scripts/Unit/Components/UnitCollider.cs2
-rw-r--r--Assets/Scripts/Unit/UnitRootMotion.cs56
9 files changed, 71 insertions, 62 deletions
diff --git a/Assets/Scripts/Curve3D.meta b/Assets/Scripts/Curve3D.meta
deleted file mode 100644
index fef1c5e7..00000000
--- a/Assets/Scripts/Curve3D.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: ad8b718b6b700d8419838dad07158567
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Scripts/Drone.meta b/Assets/Scripts/Drone.meta
deleted file mode 100644
index 694cff70..00000000
--- a/Assets/Scripts/Drone.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: ec3412151f8a72a41b2ed21316763399
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Scripts/Props.meta b/Assets/Scripts/Props.meta
deleted file mode 100644
index bb96602e..00000000
--- a/Assets/Scripts/Props.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: f299520ed9fcf4a45858ad4ef5a8d5d1
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Scripts/Robot.meta b/Assets/Scripts/Robot.meta
deleted file mode 100644
index 0b5a087e..00000000
--- a/Assets/Scripts/Robot.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 7c09ca1609552d24bbe697d1516f8aa9
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Scripts/Scene.meta b/Assets/Scripts/Scene.meta
deleted file mode 100644
index eb7a8716..00000000
--- a/Assets/Scripts/Scene.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: eaee2d0f48cff9b40baf0686a8105600
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs b/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs
index dbd4dd49..8d737277 100644
--- a/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs
+++ b/Assets/Scripts/Unit/Components/UnitAnimation/PCAnimation.cs
@@ -68,7 +68,7 @@ public class PCAnimation : UnitAnimation
private UnitActionData m_ActionData;
- public bool applyRootMotion { get; set; }// 动态设置root motion
+ public bool applyRootMotion { get; set; }
public bool applyRootCurve { get; set; } // 程序生成的root motion
public bool updateAnimationAuto { get; private set; } // 自动更新动画
@@ -129,6 +129,7 @@ public class PCAnimation : UnitAnimation
{
if (!applyRootMotion)
return;
+
m_Owner.unitRootMotion.UpdateRootMotion();
}
diff --git a/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs b/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs
index a9c50ac3..db81a2ed 100644
--- a/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs
+++ b/Assets/Scripts/Unit/Components/UnitAnimation/UnitAnimation.cs
@@ -24,7 +24,7 @@ public class AnimatorLayerInfo
{
get
{
- AnimatorClipInfo[] clipInfos = clipInfo;
+ AnimatorClipInfo[] clipInfos = clipsInfo;
if (clipInfos == null || clipInfos.Length == 0)
return null;
var clip = clipInfos[0]; //选第一个
@@ -57,7 +57,7 @@ public class AnimatorLayerInfo
private int preStateHash = -1;
// 当前正在播放和融合的片段信息
- public AnimatorClipInfo[] clipInfo
+ public AnimatorClipInfo[] clipsInfo
{
get
{
@@ -78,6 +78,14 @@ public class AnimatorLayerInfo
}
}
+ public AnimatorClipInfo clipInfo
+ {
+ get
+ {
+ return clipsInfo[0];
+ }
+ }
+
public int stateHash
{
get
@@ -91,7 +99,7 @@ public class AnimatorLayerInfo
{
get
{
- return playbackNormalizedTime * clipInfo[0].clip.length;
+ return playbackNormalizedTime * clipInfo.clip.length;
}
}
@@ -116,7 +124,7 @@ public class AnimatorLayerInfo
//if (state.IsName("Attack0"))
//{
// Debug.Log("normalizedTime=" + state.normalizedTime);
- // Debug.Log("playbackTimeInSeconds=" + state.normalizedTime * clipInfo[0].clip.length);
+ // Debug.Log("playbackTimeInSeconds=" + state.normalizedTime * clipInfo.clip.length);
//}
return state.normalizedTime % 1f;
}
@@ -258,7 +266,13 @@ public class UnitAnimation : UnitComponent
if (layer == null)
return;
layer.OnPlay(animState, normalizedTime);
- }
+
+ UnitRootMotion rm = m_Owner.GetComponent<UnitRootMotion>();
+ if(rm)
+ {
+ rm.OnAnimationChange();
+ }
+ }
public void CrossFade(string animState, float normalizedTransitionDuration, int layerIndex = 0, float normalizedTimeOffset = float.NegativeInfinity, float normalizedTransitionTime = 0.0f)
{
@@ -266,6 +280,12 @@ public class UnitAnimation : UnitComponent
if (layer == null)
return;
layer.OnCrossFade(animState, normalizedTransitionDuration, normalizedTimeOffset, normalizedTransitionTime);
- }
+
+ UnitRootMotion rm = m_Owner.GetComponent<UnitRootMotion>();
+ if (rm)
+ {
+ rm.OnAnimationChange();
+ }
+ }
}
diff --git a/Assets/Scripts/Unit/Components/UnitCollider.cs b/Assets/Scripts/Unit/Components/UnitCollider.cs
index 63e1ff7f..797eb480 100644
--- a/Assets/Scripts/Unit/Components/UnitCollider.cs
+++ b/Assets/Scripts/Unit/Components/UnitCollider.cs
@@ -35,7 +35,7 @@ public class UnitCollider : UnitComponent
{
var layerInfo = m_Owner.unitAnimation.layers[0];
AnimationData animData = layerInfo.animationData;
- AnimatorClipInfo[] clipInfos = layerInfo.clipInfo;
+ AnimatorClipInfo[] clipInfos = layerInfo.clipsInfo;
//if(clipInfos == null || clipInfos.Length == 0)
//{
// return null;
diff --git a/Assets/Scripts/Unit/UnitRootMotion.cs b/Assets/Scripts/Unit/UnitRootMotion.cs
index c920010a..5a17da61 100644
--- a/Assets/Scripts/Unit/UnitRootMotion.cs
+++ b/Assets/Scripts/Unit/UnitRootMotion.cs
@@ -11,15 +11,21 @@ public class UnitRootMotion : UnitComponent
{
RootMotionData m_RootMotionData;
- private float m_PrevNormalTime;
+ float m_PrevFrame;
+ AnimationData m_PrevAnimationData;
public override void Initialize()
{
base.Initialize();
+
+ m_PrevFrame = 0;
+ m_PrevAnimationData = null;
}
#if false // 用自定义root motion
+ private float m_PrevNormalTime;
+
Dictionary<UnitAnimation.EAnimState, RootMotionData> m_RootMotionDic = new Dictionary<UnitAnimation.EAnimState, RootMotionData>();
public void Reset()
@@ -63,25 +69,47 @@ public class UnitRootMotion : UnitComponent
#else
- public override void OnUpdate()
+ public override void OnUpdate()
{
base.OnUpdate();
}
+ public void OnAnimationChange()
+ {
+ m_PrevAnimationData = null;
+ }
+
public void UpdateRootMotion()
{
- // 因为Unti被旋转了90度,所以这里的deltaPosition的forward是x方向了
- Vector3 dest = m_Owner.unitAnimation.animator.deltaPosition;
- dest.z = 0;
-
- var state = m_Owner.unitAnimation.layers[0].stateInfo;
- if(state.IsTag("IgnoreY"))
- {
- dest.y = 0;
- }
-
- //m_Owner.transform.position += RootMotionUtility.ExchangeXZ(dest); // 不需要exchangeXZ
- m_Owner.transform.position += dest;
+ bool overrideRootMotion = m_Owner.unitAnimation.baseLayer.animationData.overrideRootMotion;
+ if(overrideRootMotion)
+ {
+ var baseLayer = m_Owner.unitAnimation.baseLayer;
+ var rmData = m_Owner.unitAnimation.baseLayer.animationData.rootMotionOverrideData;
+ float frame = baseLayer.playbackNormalizedTime * baseLayer.clipInfo.clip.length * TimelineEventProxy.FPS;
+ var animData = m_Owner.unitAnimation.baseLayer.animationData;
+ if(animData != m_PrevAnimationData)
+ {
+ m_PrevAnimationData = animData;
+ m_PrevFrame = frame;
+ }
+ Vector3 dest = rmData.GetRootMotionDistance(m_PrevFrame, frame);
+ m_Owner.transform.position += dest;
+ m_PrevFrame = frame;
+ }
+ else
+ {
+ // 因为Unti被旋转了90度,所以这里的deltaPosition的forward是x方向了
+ Vector3 dest = m_Owner.unitAnimation.animator.deltaPosition;
+ dest.z = 0;
+ var state = m_Owner.unitAnimation.baseLayer.stateInfo;
+ if (state.IsTag("IgnoreY"))
+ {
+ dest.y = 0;
+ }
+ //m_Owner.transform.position += RootMotionUtility.ExchangeXZ(dest); // 不需要exchangeXZ
+ m_Owner.transform.position += dest;
+ }
}
#endif