summaryrefslogtreecommitdiff
path: root/Erika/Assets/Scripts/Unit
diff options
context:
space:
mode:
authorchai <215380520@qq.com>2022-11-12 19:39:20 +0800
committerchai <215380520@qq.com>2022-11-12 19:39:20 +0800
commit67519f62c40fda3eb6d022171595a5ab10955f35 (patch)
tree9543673b25304a9a0f7e73b723eb7981824d2db1 /Erika/Assets/Scripts/Unit
parentc8452a1e2f5e2147e7168e2520ca1888e9b7f6f0 (diff)
* 新碰撞检测
Diffstat (limited to 'Erika/Assets/Scripts/Unit')
-rw-r--r--Erika/Assets/Scripts/Unit/AI/Actions.meta8
-rw-r--r--Erika/Assets/Scripts/Unit/AI/Conditionals.meta8
-rw-r--r--Erika/Assets/Scripts/Unit/AnimationData.cs14
-rw-r--r--Erika/Assets/Scripts/Unit/Collider/ColliderBox.cs10
-rw-r--r--Erika/Assets/Scripts/Unit/Collider/ColliderBox_Hitbox.cs4
-rw-r--r--Erika/Assets/Scripts/Unit/Collider/ColliderRegistry.cs5
-rw-r--r--Erika/Assets/Scripts/Unit/Collider/CollisionHandler.cs49
-rw-r--r--Erika/Assets/Scripts/Unit/Collider/CollisionHandler.cs.meta11
-rw-r--r--Erika/Assets/Scripts/Unit/Collider/CollisionSystem.cs14
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitCollider.cs23
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitPhysicsBoxCollection.cs3
-rw-r--r--Erika/Assets/Scripts/Unit/Components/UnitState/CyberAngel.meta8
-rw-r--r--Erika/Assets/Scripts/Unit/Controller/MonsterController.cs64
-rw-r--r--Erika/Assets/Scripts/Unit/Controller/PCController.cs16
-rw-r--r--Erika/Assets/Scripts/Unit/Controller/UnitController.cs35
-rw-r--r--Erika/Assets/Scripts/Unit/Events/EventCollider_Enable.cs14
-rw-r--r--Erika/Assets/Scripts/Unit/Events/EventCollider_Enable.cs.meta11
-rw-r--r--Erika/Assets/Scripts/Unit/TimelineEventProxy.cs2
-rw-r--r--Erika/Assets/Scripts/Unit/UnitDetail.cs11
-rw-r--r--Erika/Assets/Scripts/Unit/UnitRootMotion.cs10
20 files changed, 219 insertions, 101 deletions
diff --git a/Erika/Assets/Scripts/Unit/AI/Actions.meta b/Erika/Assets/Scripts/Unit/AI/Actions.meta
deleted file mode 100644
index 9b4ad463..00000000
--- a/Erika/Assets/Scripts/Unit/AI/Actions.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 971e9d55b8bc0894eb6a110fb962000b
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Erika/Assets/Scripts/Unit/AI/Conditionals.meta b/Erika/Assets/Scripts/Unit/AI/Conditionals.meta
deleted file mode 100644
index 70a86da5..00000000
--- a/Erika/Assets/Scripts/Unit/AI/Conditionals.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 85b7e0c7ed1d12f42a5178bfbf3d934c
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Erika/Assets/Scripts/Unit/AnimationData.cs b/Erika/Assets/Scripts/Unit/AnimationData.cs
index 323f21d4..3f516d4b 100644
--- a/Erika/Assets/Scripts/Unit/AnimationData.cs
+++ b/Erika/Assets/Scripts/Unit/AnimationData.cs
@@ -324,11 +324,25 @@ public class AnimationData : ScriptableObject
return toggles[toggle].to >= normalizedTime && normalizedTime >= toggles[toggle].from;
}
+ /// <summary>
+ /// 获得某个playback时刻的碰撞盒数据
+ /// </summary>
+ /// <param name="type"></param>
+ /// <param name="index"></param>
+ /// <param name="playbackTime"></param>
+ /// <returns></returns>
public ColliderInfo GetColliderInfo(ColliderBox.EColliderType type, int index, float playbackTime)
{
return GetColliderInfoByFrame(type, index, playbackTime * FPS);
}
+ /// <summary>
+ /// 获得某个帧的碰撞盒数据
+ /// </summary>
+ /// <param name="type"></param>
+ /// <param name="index"></param>
+ /// <param name="frame"></param>
+ /// <returns></returns>
public ColliderInfo GetColliderInfoByFrame(ColliderBox.EColliderType type, int index, float frame)
{
ColliderInfo info = new ColliderInfo();
diff --git a/Erika/Assets/Scripts/Unit/Collider/ColliderBox.cs b/Erika/Assets/Scripts/Unit/Collider/ColliderBox.cs
index 24319ef2..b44f2bf3 100644
--- a/Erika/Assets/Scripts/Unit/Collider/ColliderBox.cs
+++ b/Erika/Assets/Scripts/Unit/Collider/ColliderBox.cs
@@ -16,11 +16,11 @@ public partial class ColliderBox
// 分化为不同的collider类型
public enum EColliderType
{
- HitBox,
- HurtBox,
- ThrowBox,
- BlockBox,
- DefendBox,
+ HitBox, // Triggers //Physics.OverlapXXX()
+ HurtBox, // Triggers
+ ThrowBox, // Triggers
+ BlockBox, // Triggers
+ DefendBox, // Triggers
}
[DisallowModifiyInGUI]
diff --git a/Erika/Assets/Scripts/Unit/Collider/ColliderBox_Hitbox.cs b/Erika/Assets/Scripts/Unit/Collider/ColliderBox_Hitbox.cs
index 9f1d629a..f2549984 100644
--- a/Erika/Assets/Scripts/Unit/Collider/ColliderBox_Hitbox.cs
+++ b/Erika/Assets/Scripts/Unit/Collider/ColliderBox_Hitbox.cs
@@ -2,8 +2,10 @@
// 打击感相关资料
// https://gameinstitute.qq.com/community/detail/112371
-//
+/// <summary>
+/// 攻击盒,用Physics.OverlayXXX检测和其他盒子的碰撞
+/// </summary>
public partial class ColliderBox
{
diff --git a/Erika/Assets/Scripts/Unit/Collider/ColliderRegistry.cs b/Erika/Assets/Scripts/Unit/Collider/ColliderRegistry.cs
index 408ce5a4..5fe6c912 100644
--- a/Erika/Assets/Scripts/Unit/Collider/ColliderRegistry.cs
+++ b/Erika/Assets/Scripts/Unit/Collider/ColliderRegistry.cs
@@ -1,7 +1,10 @@
-using System.Collections;
+// 废弃,改为用Physics.OverlapXXX和Colliders
+
+using System.Collections;
using System.Collections.Generic;
using UnityEngine;
+[System.Obsolete("废弃,改为用Physics.OverlapXXX和Colliders")]
public class ColliderRegistry : Singleton<ColliderRegistry>
{
public List<UnitCollider> colliders = new List<UnitCollider>();
diff --git a/Erika/Assets/Scripts/Unit/Collider/CollisionHandler.cs b/Erika/Assets/Scripts/Unit/Collider/CollisionHandler.cs
new file mode 100644
index 00000000..0dd68d40
--- /dev/null
+++ b/Erika/Assets/Scripts/Unit/Collider/CollisionHandler.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class CollisionHandler : MonoBehaviour
+{
+
+ public ColliderBox.EColliderType colliderType;
+
+ public ColliderData colliderData;
+
+ public UnitController owner;
+
+ public void Initialize(ColliderBox.EColliderType type, UnitController owner)
+ {
+ this.colliderType = type;
+ this.owner = owner;
+ }
+
+ public void OnTriggerEnter(Collider other)
+ {
+ CollisionHandler otherHandler = other.GetComponent<CollisionHandler>();
+ if (otherHandler == null)
+ return;
+
+ if(owner != null)
+ {
+ owner.OnCollision(otherHandler.owner);
+ }
+
+ if(otherHandler.owner != null)
+ {
+ otherHandler.owner.OnCollision(owner);
+ }
+
+ }
+
+ public void OnTriggerStay(Collider other)
+ {
+
+ }
+
+ public void OnTriggerExit(Collider other)
+ {
+
+ }
+
+}
diff --git a/Erika/Assets/Scripts/Unit/Collider/CollisionHandler.cs.meta b/Erika/Assets/Scripts/Unit/Collider/CollisionHandler.cs.meta
new file mode 100644
index 00000000..2fba0fdc
--- /dev/null
+++ b/Erika/Assets/Scripts/Unit/Collider/CollisionHandler.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b6e50b8c49a6ee144830503d34593230
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Erika/Assets/Scripts/Unit/Collider/CollisionSystem.cs b/Erika/Assets/Scripts/Unit/Collider/CollisionSystem.cs
index 83052073..8149f6a3 100644
--- a/Erika/Assets/Scripts/Unit/Collider/CollisionSystem.cs
+++ b/Erika/Assets/Scripts/Unit/Collider/CollisionSystem.cs
@@ -1,4 +1,6 @@
-using System;
+// 废弃,改为用Physics.OverlapXXX和Colliders
+
+using System;
using System.Collections.Generic;
using UnityEngine;
@@ -23,6 +25,7 @@ public struct CollisionInfo
public bool isCollision;
}
+[Obsolete("废弃,改为用Physics.OverlapXXX和Colliders")]
public class CollisionSystem : SingletonMB<CollisionSystem>
{
public delegate void StageHandle();
@@ -97,8 +100,8 @@ public class CollisionSystem : SingletonMB<CollisionSystem>
if (!hitbox.unitCollider.CanCollide(hitbox.colliderInfo.colliderHash, hurtbox.unitCollider.owner.GetHashCode()))
continue;
hitbox.unitCollider.RecordCollision(hitbox.colliderInfo.colliderHash, hurtbox.unitCollider.owner.GetHashCode());
- hitbox.unitCollider.owner.OnHit(collision);
- hurtbox.unitCollider.owner.OnGetHit(collision);
+ //hitbox.unitCollider.owner.OnHit(collision);
+ //hurtbox.unitCollider.owner.OnGetHit(collision);
}
}
@@ -150,8 +153,8 @@ public class CollisionSystem : SingletonMB<CollisionSystem>
collision.isCollision = true;
collision.intersection = intersection;
collision.collidee = hurtCollider;
- hurtCollider.unitCollider.owner.OnGetShot(collision);
- projectile.OnShot(collision);
+ //hurtCollider.unitCollider.owner.OnGetShot(collision);
+ //projectile.OnShot(collision);
goto next;
}
@@ -184,6 +187,7 @@ public class CollisionSystem : SingletonMB<CollisionSystem>
}
+
public static class ColliderUtility
{
public static CollisionInfo GetCollision(ColliderDescriptor collider, ColliderDescriptor collidee)
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitCollider.cs b/Erika/Assets/Scripts/Unit/Components/UnitCollider.cs
index 48ec46bb..6858fe74 100644
--- a/Erika/Assets/Scripts/Unit/Components/UnitCollider.cs
+++ b/Erika/Assets/Scripts/Unit/Components/UnitCollider.cs
@@ -8,18 +8,19 @@ public class UnitCollider : UnitComponent
{
public bool showGizmos;
- private Dictionary<int/*hitbox hash*/, List<int/*unitController hash*/>> m_HitMask = new Dictionary<int, List<int>>();
+ [System.Obsolete("废弃")]
+ private Dictionary<int/*hitbox hash*/, List<int/*unitController hash*/>> m_HitMask = new Dictionary<int, List<int>>();
public override void Awake()
{
base.Awake();
- ColliderRegistry.Instance.AddCollider(this);
+ //ColliderRegistry.Instance.AddCollider(this);
}
public override void OnDestroy()
{
- ColliderRegistry.Instance.RemoveCollider(this);
+ //ColliderRegistry.Instance.RemoveCollider(this);
base.OnDestroy();
}
@@ -30,7 +31,12 @@ public class UnitCollider : UnitComponent
showGizmos = true;
}
- // 返回当前激活的对应类型的碰撞盒数据
+ /// <summary>
+ /// 返回当前激活的对应类型的碰撞盒数据
+ /// </summary>
+ /// <param name="type"></param>
+ /// <param name="layer"></param>
+ /// <returns></returns>
public ColliderInfo[] GetCurrentBoxesInfoByType(ColliderBox.EColliderType type, int layer = 0)
{
AnimationData animData = m_Owner.unitAnimation.animationData;
@@ -40,12 +46,16 @@ public class UnitCollider : UnitComponent
return infos;
}
- // 动作切换,重置collider mask
- public void OnAnimationChange()
+ /// <summary>
+ /// 动作切换,重置collider mask
+ /// </summary>
+ [System.Obsolete("废弃")]
+ public void OnAnimationChange()
{
m_HitMask.Clear();
}
+ [System.Obsolete("废弃")]
public void RecordCollision(int colliderHash, int targetHash)
{
List<int> record;
@@ -57,6 +67,7 @@ public class UnitCollider : UnitComponent
record.Add(targetHash);
}
+ [System.Obsolete("废弃")]
public bool CanCollide(int colliderHash, int targetHash)
{
List<int> record;
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitPhysicsBoxCollection.cs b/Erika/Assets/Scripts/Unit/Components/UnitPhysicsBoxCollection.cs
index ef4676a4..b3d0c580 100644
--- a/Erika/Assets/Scripts/Unit/Components/UnitPhysicsBoxCollection.cs
+++ b/Erika/Assets/Scripts/Unit/Components/UnitPhysicsBoxCollection.cs
@@ -2,6 +2,9 @@
using System.Collections.Generic;
using UnityEngine;
+/// <summary>
+/// 角色身体上所有trigger集合
+/// </summary>
public class UnitPhysicsBoxCollection : UnitComponent
{
// 列表里不一定按顺序存储
diff --git a/Erika/Assets/Scripts/Unit/Components/UnitState/CyberAngel.meta b/Erika/Assets/Scripts/Unit/Components/UnitState/CyberAngel.meta
deleted file mode 100644
index 13682d7f..00000000
--- a/Erika/Assets/Scripts/Unit/Components/UnitState/CyberAngel.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: fa5eb9b1f1ac0184b9daa4cab5baaf64
-folderAsset: yes
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Erika/Assets/Scripts/Unit/Controller/MonsterController.cs b/Erika/Assets/Scripts/Unit/Controller/MonsterController.cs
index 22645b47..f75933cc 100644
--- a/Erika/Assets/Scripts/Unit/Controller/MonsterController.cs
+++ b/Erika/Assets/Scripts/Unit/Controller/MonsterController.cs
@@ -22,42 +22,42 @@ public class MonsterController : UnitController
base.Update();
}
- public override void OnHit(CollisionInfo info)
- {
- }
+ //public override void OnHit(CollisionInfo info)
+ //{
+ //}
- public override void OnGetHit(CollisionInfo info)
- {
- ColliderBox hitbox = info.collider.colliderInfo.collider;
- Debug.Assert(hitbox.type == ColliderBox.EColliderType.HitBox);
+ // public override void OnGetHit(CollisionInfo info)
+ // {
+ // ColliderBox hitbox = info.collider.colliderInfo.collider;
+ // Debug.Assert(hitbox.type == ColliderBox.EColliderType.HitBox);
- if(hitbox.hitResponse == ColliderBox.EHitResponse.Light)
- {
- monsterState.ChangeState(MonsterState.EUnitState.HitLight, new MonsterState.HitLightParam(), true);
- }
- else if (hitbox.hitResponse == ColliderBox.EHitResponse.HitAir)
- {
- monsterState.ChangeState(MonsterState.EUnitState.HitAir, new MonsterState.HitAirParam());
- }
- else if (hitbox.hitResponse == ColliderBox.EHitResponse.HitInAir)
- {
- monsterState.ChangeState(MonsterState.EUnitState.HitInAir, new MonsterState.HitInAirParam(), true);
- }
+ // if(hitbox.hitResponse == ColliderBox.EHitResponse.Light)
+ // {
+ // monsterState.ChangeState(MonsterState.EUnitState.HitLight, new MonsterState.HitLightParam(), true);
+ // }
+ // else if (hitbox.hitResponse == ColliderBox.EHitResponse.HitAir)
+ // {
+ // monsterState.ChangeState(MonsterState.EUnitState.HitAir, new MonsterState.HitAirParam());
+ // }
+ // else if (hitbox.hitResponse == ColliderBox.EHitResponse.HitInAir)
+ // {
+ // monsterState.ChangeState(MonsterState.EUnitState.HitInAir, new MonsterState.HitInAirParam(), true);
+ // }
- string path = hitbox.sparkPath;
- GameObject vfx = ResourceManager.Instance.LoadAsset<GameObject>(path);
- if(vfx != null)
- {
- GameObject go = GameObject.Instantiate(vfx);
- go.transform.position = center + hitbox.sparkOffset;
- go.transform.localScale = hitbox.sparkScale;
- }
- }
+ // string path = hitbox.sparkPath;
+ //GameObject vfx = ResourceManager.Instance.LoadAsset<GameObject>(path);
+ // if(vfx != null)
+ // {
+ // GameObject go = GameObject.Instantiate(vfx);
+ // go.transform.position = center + hitbox.sparkOffset;
+ // go.transform.localScale = hitbox.sparkScale;
+ // }
+ // }
- public override void OnGetShot(CollisionInfo info)
- {
- monsterState.ChangeState(MonsterState.EUnitState.HitLight, new MonsterState.HitLightParam(), true);
- }
+ // public override void OnGetShot(CollisionInfo info)
+ // {
+ // monsterState.ChangeState(MonsterState.EUnitState.HitLight, new MonsterState.HitLightParam(), true);
+ // }
public virtual bool IsFacePC()
{
diff --git a/Erika/Assets/Scripts/Unit/Controller/PCController.cs b/Erika/Assets/Scripts/Unit/Controller/PCController.cs
index 35645d57..e634a4bb 100644
--- a/Erika/Assets/Scripts/Unit/Controller/PCController.cs
+++ b/Erika/Assets/Scripts/Unit/Controller/PCController.cs
@@ -44,15 +44,15 @@ public class PCController : UnitController
unitImageEffect.OnUpdate();
}
- public override void OnHit(CollisionInfo info)
- {
- ColliderBox hitbox = info.collider.colliderInfo.collider;
- Debug.Assert(hitbox.type == ColliderBox.EColliderType.HitBox);
- }
+ //public override void OnHit(CollisionInfo info)
+ //{
+ // ColliderBox hitbox = info.collider.colliderInfo.collider;
+ // Debug.Assert(hitbox.type == ColliderBox.EColliderType.HitBox);
+ //}
- public override void OnGetHit(CollisionInfo info)
- {
- }
+ //public override void OnGetHit(CollisionInfo info)
+ //{
+ //}
public override void OnGrab()
{
diff --git a/Erika/Assets/Scripts/Unit/Controller/UnitController.cs b/Erika/Assets/Scripts/Unit/Controller/UnitController.cs
index e77b8435..f5577077 100644
--- a/Erika/Assets/Scripts/Unit/Controller/UnitController.cs
+++ b/Erika/Assets/Scripts/Unit/Controller/UnitController.cs
@@ -52,6 +52,8 @@ public class UnitController : MonoBehaviour/*, Interactable*/
protected List<UnitComponent> unitComponents;
+ public CharacterController unitCharacterController;
+
#region 事件监听
public delegate void OnTimelineEventHandle(AnimationEventBase animEvent);
public OnTimelineEventHandle onTimelineEvent { get; set; }
@@ -193,7 +195,14 @@ public class UnitController : MonoBehaviour/*, Interactable*/
unitPreprocessing = GetOrAddUnitComponent<UnitPreprocessing>();
unitPreprocessing.Initialize();
- }
+
+ unitCharacterController = gameObject.GetOrAddComponent<CharacterController>();
+ unitCharacterController.center = unitDetail.characterControllerSetting.center;
+ unitCharacterController.radius = unitDetail.characterControllerSetting.radius;
+ unitCharacterController.height = unitDetail.characterControllerSetting.height;
+ unitCharacterController.skinWidth = unitDetail.characterControllerSetting.skinWidth;
+
+ }
private void OnPostInitailize()
{
@@ -221,25 +230,13 @@ public class UnitController : MonoBehaviour/*, Interactable*/
unitSkill.OnUpdate();
unitRootMotion.OnUpdate();
unitLensEffect.OnUpdate();
+ unitPhysicsBoxes.OnUpdate();
}
public virtual void OnDestroy()
{
}
- public virtual void OnHit(CollisionInfo info)
- {
- }
-
- public virtual void OnGetHit(CollisionInfo info)
- {
- }
-
- public virtual void OnGetShot(CollisionInfo info)
- {
- }
-
-
public virtual void OnGrab()
{
}
@@ -270,4 +267,14 @@ public class UnitController : MonoBehaviour/*, Interactable*/
UnitSnapshotInfo snapshot = new UnitSnapshotInfo();
return snapshot;
}
+
+ #region 物理碰撞
+
+ public void OnCollision(UnitController other)
+ {
+
+ }
+
+ #endregion
+
} \ No newline at end of file
diff --git a/Erika/Assets/Scripts/Unit/Events/EventCollider_Enable.cs b/Erika/Assets/Scripts/Unit/Events/EventCollider_Enable.cs
new file mode 100644
index 00000000..a9cec9d4
--- /dev/null
+++ b/Erika/Assets/Scripts/Unit/Events/EventCollider_Enable.cs
@@ -0,0 +1,14 @@
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class EventCollider_Enable : AnimationEventBase
+{
+ public override TimelineEventProxy.EEventType type => TimelineEventProxy.EEventType.EventCollider_Enable;
+
+ public override string shortName => "C";
+
+ [Tooltip("是否开启collider")]
+ public bool enabled = true;
+
+} \ No newline at end of file
diff --git a/Erika/Assets/Scripts/Unit/Events/EventCollider_Enable.cs.meta b/Erika/Assets/Scripts/Unit/Events/EventCollider_Enable.cs.meta
new file mode 100644
index 00000000..cba0d755
--- /dev/null
+++ b/Erika/Assets/Scripts/Unit/Events/EventCollider_Enable.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 61052caf1b575b344b9f319dbe3a31c6
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Erika/Assets/Scripts/Unit/TimelineEventProxy.cs b/Erika/Assets/Scripts/Unit/TimelineEventProxy.cs
index 453f1903..61981620 100644
--- a/Erika/Assets/Scripts/Unit/TimelineEventProxy.cs
+++ b/Erika/Assets/Scripts/Unit/TimelineEventProxy.cs
@@ -50,6 +50,8 @@ public partial class TimelineEventProxy
{
EventGame_TimeScale, // 缩放时间
+ EventCollider_Enable, // 开启\隐藏Collider
+
EventMesh_ImageEffect_MotionBlur, // 运动模糊
EventMesh_ImageEffect_Glitch, // glitch
diff --git a/Erika/Assets/Scripts/Unit/UnitDetail.cs b/Erika/Assets/Scripts/Unit/UnitDetail.cs
index 56858b0b..b6c11a1a 100644
--- a/Erika/Assets/Scripts/Unit/UnitDetail.cs
+++ b/Erika/Assets/Scripts/Unit/UnitDetail.cs
@@ -68,6 +68,15 @@ public interface IBodyJointAgent
UnitReferencePointDictionary referencePoints { get; }
}
+[Serializable]
+public struct CharacterControllerSetting
+{
+ [SerializeField] public Vector3 center;
+ [SerializeField] public float radius;
+ [SerializeField] public float height;
+ [SerializeField] public float skinWidth;
+}
+
// 角色的prefab附加数据
// * afterimage的prefab
// * 骨骼映射
@@ -77,6 +86,8 @@ public class UnitDetail : MonoBehaviour, IBodyRendererAgent, IBodyJointAgent
{
public bool showGizmos;
+ public CharacterControllerSetting characterControllerSetting;
+
[FormerlySerializedAs("root")]
public Transform rootBone;
diff --git a/Erika/Assets/Scripts/Unit/UnitRootMotion.cs b/Erika/Assets/Scripts/Unit/UnitRootMotion.cs
index 140882d3..4af74c9d 100644
--- a/Erika/Assets/Scripts/Unit/UnitRootMotion.cs
+++ b/Erika/Assets/Scripts/Unit/UnitRootMotion.cs
@@ -103,7 +103,7 @@ public class UnitRootMotion : UnitComponent
if(m_Owner.transform.position.y + realDest.y < 0)
realDest.y = 0;
}
- m_Owner.transform.position += realDest;
+ m_Owner.unitCharacterController.Move(realDest);
m_PrevFrame = frame;
}
@@ -119,10 +119,10 @@ public class UnitRootMotion : UnitComponent
dest.y = 0;
}
dest.y = Mathf.Max(0, dest.y); // 从地面以下拉回
- //m_Owner.transform.position += RootMotionUtility.ExchangeXZ(dest); // 不需要exchangeXZ
- m_Owner.transform.position += dest;
- }
- }
+ //m_Owner.transform.position += RootMotionUtility.ExchangeXZ(dest); // 不需要exchangeXZ
+ m_Owner.unitCharacterController.Move(dest);
+ }
+ }
#endif