Merge branch 'main' of https://scove-vault.duckdns.org/scove/HALLUCINATION
This commit is contained in:
@@ -100,8 +100,7 @@ BlendTree:
|
|||||||
m_Name: Idle
|
m_Name: Idle
|
||||||
m_Childs:
|
m_Childs:
|
||||||
- serializedVersion: 2
|
- serializedVersion: 2
|
||||||
m_Motion: {fileID: 5908583710877457969, guid: 009c43c371cbf974f860ee540816fa3d,
|
m_Motion: {fileID: 5908583710877457969, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Threshold: -0.5
|
m_Threshold: -0.5
|
||||||
m_Position: {x: 0, y: 0}
|
m_Position: {x: 0, y: 0}
|
||||||
m_TimeScale: 1
|
m_TimeScale: 1
|
||||||
@@ -117,8 +116,7 @@ BlendTree:
|
|||||||
m_DirectBlendParameter: InputHorizontal
|
m_DirectBlendParameter: InputHorizontal
|
||||||
m_Mirror: 0
|
m_Mirror: 0
|
||||||
- serializedVersion: 2
|
- serializedVersion: 2
|
||||||
m_Motion: {fileID: 5908583710877457969, guid: 009c43c371cbf974f860ee540816fa3d,
|
m_Motion: {fileID: 5908583710877457969, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Threshold: 0.5
|
m_Threshold: 0.5
|
||||||
m_Position: {x: 0, y: 0}
|
m_Position: {x: 0, y: 0}
|
||||||
m_TimeScale: -1
|
m_TimeScale: -1
|
||||||
@@ -738,8 +736,7 @@ BlendTree:
|
|||||||
m_Name: CroouchIdleAiming
|
m_Name: CroouchIdleAiming
|
||||||
m_Childs:
|
m_Childs:
|
||||||
- serializedVersion: 2
|
- serializedVersion: 2
|
||||||
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d,
|
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Threshold: -0.5
|
m_Threshold: -0.5
|
||||||
m_Position: {x: 0, y: 0}
|
m_Position: {x: 0, y: 0}
|
||||||
m_TimeScale: 1
|
m_TimeScale: 1
|
||||||
@@ -755,8 +752,7 @@ BlendTree:
|
|||||||
m_DirectBlendParameter: InputHorizontal
|
m_DirectBlendParameter: InputHorizontal
|
||||||
m_Mirror: 0
|
m_Mirror: 0
|
||||||
- serializedVersion: 2
|
- serializedVersion: 2
|
||||||
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d,
|
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Threshold: 0.5
|
m_Threshold: 0.5
|
||||||
m_Position: {x: 0, y: 0}
|
m_Position: {x: 0, y: 0}
|
||||||
m_TimeScale: -1
|
m_TimeScale: -1
|
||||||
@@ -942,8 +938,7 @@ AnimatorState:
|
|||||||
m_MirrorParameterActive: 0
|
m_MirrorParameterActive: 0
|
||||||
m_CycleOffsetParameterActive: 0
|
m_CycleOffsetParameterActive: 0
|
||||||
m_TimeParameterActive: 0
|
m_TimeParameterActive: 0
|
||||||
m_Motion: {fileID: 6273134904810983842, guid: 632f8ebe81a772e4998224dabbbf836b,
|
m_Motion: {fileID: 6273134904810983842, guid: 632f8ebe81a772e4998224dabbbf836b, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Tag:
|
m_Tag:
|
||||||
m_SpeedParameter:
|
m_SpeedParameter:
|
||||||
m_MirrorParameter:
|
m_MirrorParameter:
|
||||||
@@ -1066,8 +1061,7 @@ BlendTree:
|
|||||||
m_Name: CrouchIdle
|
m_Name: CrouchIdle
|
||||||
m_Childs:
|
m_Childs:
|
||||||
- serializedVersion: 2
|
- serializedVersion: 2
|
||||||
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d,
|
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Threshold: -0.5
|
m_Threshold: -0.5
|
||||||
m_Position: {x: 0, y: 0}
|
m_Position: {x: 0, y: 0}
|
||||||
m_TimeScale: 2
|
m_TimeScale: 2
|
||||||
@@ -1083,8 +1077,7 @@ BlendTree:
|
|||||||
m_DirectBlendParameter: InputHorizontal
|
m_DirectBlendParameter: InputHorizontal
|
||||||
m_Mirror: 0
|
m_Mirror: 0
|
||||||
- serializedVersion: 2
|
- serializedVersion: 2
|
||||||
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d,
|
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Threshold: 0.5
|
m_Threshold: 0.5
|
||||||
m_Position: {x: 0, y: 0}
|
m_Position: {x: 0, y: 0}
|
||||||
m_TimeScale: -2
|
m_TimeScale: -2
|
||||||
@@ -1371,8 +1364,7 @@ BlendTree:
|
|||||||
m_Name: Blend Tree
|
m_Name: Blend Tree
|
||||||
m_Childs:
|
m_Childs:
|
||||||
- serializedVersion: 2
|
- serializedVersion: 2
|
||||||
m_Motion: {fileID: 6944727830613845018, guid: f63fbd0ba70f1554c9dc5f893ff28546,
|
m_Motion: {fileID: 6944727830613845018, guid: f63fbd0ba70f1554c9dc5f893ff28546, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Threshold: -170
|
m_Threshold: -170
|
||||||
m_Position: {x: 0, y: 0}
|
m_Position: {x: 0, y: 0}
|
||||||
m_TimeScale: 1
|
m_TimeScale: 1
|
||||||
@@ -1380,8 +1372,7 @@ BlendTree:
|
|||||||
m_DirectBlendParameter: InputHorizontal
|
m_DirectBlendParameter: InputHorizontal
|
||||||
m_Mirror: 0
|
m_Mirror: 0
|
||||||
- serializedVersion: 2
|
- serializedVersion: 2
|
||||||
m_Motion: {fileID: 5927633979316069339, guid: f63fbd0ba70f1554c9dc5f893ff28546,
|
m_Motion: {fileID: 5927633979316069339, guid: f63fbd0ba70f1554c9dc5f893ff28546, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Threshold: -90
|
m_Threshold: -90
|
||||||
m_Position: {x: 0, y: 0}
|
m_Position: {x: 0, y: 0}
|
||||||
m_TimeScale: 1
|
m_TimeScale: 1
|
||||||
@@ -1389,8 +1380,7 @@ BlendTree:
|
|||||||
m_DirectBlendParameter: InputHorizontal
|
m_DirectBlendParameter: InputHorizontal
|
||||||
m_Mirror: 0
|
m_Mirror: 0
|
||||||
- serializedVersion: 2
|
- serializedVersion: 2
|
||||||
m_Motion: {fileID: 7173170133434809738, guid: f63fbd0ba70f1554c9dc5f893ff28546,
|
m_Motion: {fileID: 7173170133434809738, guid: f63fbd0ba70f1554c9dc5f893ff28546, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Threshold: 0
|
m_Threshold: 0
|
||||||
m_Position: {x: 0, y: 0}
|
m_Position: {x: 0, y: 0}
|
||||||
m_TimeScale: 1
|
m_TimeScale: 1
|
||||||
@@ -1398,8 +1388,7 @@ BlendTree:
|
|||||||
m_DirectBlendParameter: InputHorizontal
|
m_DirectBlendParameter: InputHorizontal
|
||||||
m_Mirror: 0
|
m_Mirror: 0
|
||||||
- serializedVersion: 2
|
- serializedVersion: 2
|
||||||
m_Motion: {fileID: -4636754764438762427, guid: f63fbd0ba70f1554c9dc5f893ff28546,
|
m_Motion: {fileID: -4636754764438762427, guid: f63fbd0ba70f1554c9dc5f893ff28546, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Threshold: 90
|
m_Threshold: 90
|
||||||
m_Position: {x: 0, y: 0}
|
m_Position: {x: 0, y: 0}
|
||||||
m_TimeScale: 1
|
m_TimeScale: 1
|
||||||
@@ -1407,8 +1396,7 @@ BlendTree:
|
|||||||
m_DirectBlendParameter: InputHorizontal
|
m_DirectBlendParameter: InputHorizontal
|
||||||
m_Mirror: 0
|
m_Mirror: 0
|
||||||
- serializedVersion: 2
|
- serializedVersion: 2
|
||||||
m_Motion: {fileID: -606276786794296147, guid: f63fbd0ba70f1554c9dc5f893ff28546,
|
m_Motion: {fileID: -606276786794296147, guid: f63fbd0ba70f1554c9dc5f893ff28546, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Threshold: 170
|
m_Threshold: 170
|
||||||
m_Position: {x: 0, y: 0}
|
m_Position: {x: 0, y: 0}
|
||||||
m_TimeScale: 1
|
m_TimeScale: 1
|
||||||
@@ -14735,7 +14723,7 @@ AnimatorStateMachine:
|
|||||||
m_Position: {x: -288, y: -120, z: 0}
|
m_Position: {x: -288, y: -120, z: 0}
|
||||||
- serializedVersion: 1
|
- serializedVersion: 1
|
||||||
m_StateMachine: {fileID: 1107822795797827924}
|
m_StateMachine: {fileID: 1107822795797827924}
|
||||||
m_Position: {x: -288, y: -180, z: 0}
|
m_Position: {x: -290, y: -180, z: 0}
|
||||||
- serializedVersion: 1
|
- serializedVersion: 1
|
||||||
m_StateMachine: {fileID: 2678945455928377032}
|
m_StateMachine: {fileID: 2678945455928377032}
|
||||||
m_Position: {x: -290, y: -240, z: 0}
|
m_Position: {x: -290, y: -240, z: 0}
|
||||||
@@ -20946,8 +20934,7 @@ BlendTree:
|
|||||||
m_Name: Bow_Idle
|
m_Name: Bow_Idle
|
||||||
m_Childs:
|
m_Childs:
|
||||||
- serializedVersion: 2
|
- serializedVersion: 2
|
||||||
m_Motion: {fileID: -744450954914381049, guid: 009c43c371cbf974f860ee540816fa3d,
|
m_Motion: {fileID: -744450954914381049, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Threshold: -0.5
|
m_Threshold: -0.5
|
||||||
m_Position: {x: 0, y: 0}
|
m_Position: {x: 0, y: 0}
|
||||||
m_TimeScale: 2
|
m_TimeScale: 2
|
||||||
@@ -20963,8 +20950,7 @@ BlendTree:
|
|||||||
m_DirectBlendParameter: InputHorizontal
|
m_DirectBlendParameter: InputHorizontal
|
||||||
m_Mirror: 0
|
m_Mirror: 0
|
||||||
- serializedVersion: 2
|
- serializedVersion: 2
|
||||||
m_Motion: {fileID: -744450954914381049, guid: 009c43c371cbf974f860ee540816fa3d,
|
m_Motion: {fileID: -744450954914381049, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Threshold: 0.5
|
m_Threshold: 0.5
|
||||||
m_Position: {x: 0, y: 0}
|
m_Position: {x: 0, y: 0}
|
||||||
m_TimeScale: -2
|
m_TimeScale: -2
|
||||||
@@ -33694,7 +33680,7 @@ AnimatorStateMachine:
|
|||||||
m_ChildStates:
|
m_ChildStates:
|
||||||
- serializedVersion: 1
|
- serializedVersion: 1
|
||||||
m_State: {fileID: 1102974793704474096}
|
m_State: {fileID: 1102974793704474096}
|
||||||
m_Position: {x: 264, y: 168, z: 0}
|
m_Position: {x: 260, y: 170, z: 0}
|
||||||
- serializedVersion: 1
|
- serializedVersion: 1
|
||||||
m_State: {fileID: 1102332861771149508}
|
m_State: {fileID: 1102332861771149508}
|
||||||
m_Position: {x: 260, y: 70, z: 0}
|
m_Position: {x: 260, y: 70, z: 0}
|
||||||
@@ -33710,7 +33696,7 @@ AnimatorStateMachine:
|
|||||||
m_AnyStatePosition: {x: 48, y: 168, z: 0}
|
m_AnyStatePosition: {x: 48, y: 168, z: 0}
|
||||||
m_EntryPosition: {x: 50, y: 120, z: 0}
|
m_EntryPosition: {x: 50, y: 120, z: 0}
|
||||||
m_ExitPosition: {x: 504, y: 120, z: 0}
|
m_ExitPosition: {x: 504, y: 120, z: 0}
|
||||||
m_ParentStateMachinePosition: {x: 24, y: -24, z: 0}
|
m_ParentStateMachinePosition: {x: 30, y: -20, z: 0}
|
||||||
m_DefaultState: {fileID: 1102332861771149508}
|
m_DefaultState: {fileID: 1102332861771149508}
|
||||||
--- !u!1107 &1107815003637627098
|
--- !u!1107 &1107815003637627098
|
||||||
AnimatorStateMachine:
|
AnimatorStateMachine:
|
||||||
@@ -35894,8 +35880,7 @@ BlendTree:
|
|||||||
m_Name: Crouch Idle
|
m_Name: Crouch Idle
|
||||||
m_Childs:
|
m_Childs:
|
||||||
- serializedVersion: 2
|
- serializedVersion: 2
|
||||||
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d,
|
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Threshold: -0.5
|
m_Threshold: -0.5
|
||||||
m_Position: {x: 0, y: 0}
|
m_Position: {x: 0, y: 0}
|
||||||
m_TimeScale: 2
|
m_TimeScale: 2
|
||||||
@@ -35911,8 +35896,7 @@ BlendTree:
|
|||||||
m_DirectBlendParameter: InputHorizontal
|
m_DirectBlendParameter: InputHorizontal
|
||||||
m_Mirror: 0
|
m_Mirror: 0
|
||||||
- serializedVersion: 2
|
- serializedVersion: 2
|
||||||
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d,
|
m_Motion: {fileID: -2893743026720447327, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Threshold: 0.5
|
m_Threshold: 0.5
|
||||||
m_Position: {x: 0, y: 0}
|
m_Position: {x: 0, y: 0}
|
||||||
m_TimeScale: -2
|
m_TimeScale: -2
|
||||||
@@ -36478,8 +36462,7 @@ BlendTree:
|
|||||||
m_Name: Idle Aiming
|
m_Name: Idle Aiming
|
||||||
m_Childs:
|
m_Childs:
|
||||||
- serializedVersion: 2
|
- serializedVersion: 2
|
||||||
m_Motion: {fileID: -5495367200724739231, guid: 009c43c371cbf974f860ee540816fa3d,
|
m_Motion: {fileID: -5495367200724739231, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Threshold: -0.5
|
m_Threshold: -0.5
|
||||||
m_Position: {x: 0, y: 0}
|
m_Position: {x: 0, y: 0}
|
||||||
m_TimeScale: 2
|
m_TimeScale: 2
|
||||||
@@ -36487,8 +36470,7 @@ BlendTree:
|
|||||||
m_DirectBlendParameter: InputHorizontal
|
m_DirectBlendParameter: InputHorizontal
|
||||||
m_Mirror: 0
|
m_Mirror: 0
|
||||||
- serializedVersion: 2
|
- serializedVersion: 2
|
||||||
m_Motion: {fileID: -5495367200724739231, guid: 009c43c371cbf974f860ee540816fa3d,
|
m_Motion: {fileID: -5495367200724739231, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Threshold: -0.2
|
m_Threshold: -0.2
|
||||||
m_Position: {x: 0, y: 0}
|
m_Position: {x: 0, y: 0}
|
||||||
m_TimeScale: 0.5
|
m_TimeScale: 0.5
|
||||||
@@ -36504,8 +36486,7 @@ BlendTree:
|
|||||||
m_DirectBlendParameter: InputHorizontal
|
m_DirectBlendParameter: InputHorizontal
|
||||||
m_Mirror: 0
|
m_Mirror: 0
|
||||||
- serializedVersion: 2
|
- serializedVersion: 2
|
||||||
m_Motion: {fileID: -5495367200724739231, guid: 009c43c371cbf974f860ee540816fa3d,
|
m_Motion: {fileID: -5495367200724739231, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Threshold: 0.2
|
m_Threshold: 0.2
|
||||||
m_Position: {x: 0, y: 0}
|
m_Position: {x: 0, y: 0}
|
||||||
m_TimeScale: -0.5
|
m_TimeScale: -0.5
|
||||||
@@ -36513,8 +36494,7 @@ BlendTree:
|
|||||||
m_DirectBlendParameter: InputHorizontal
|
m_DirectBlendParameter: InputHorizontal
|
||||||
m_Mirror: 0
|
m_Mirror: 0
|
||||||
- serializedVersion: 2
|
- serializedVersion: 2
|
||||||
m_Motion: {fileID: -5495367200724739231, guid: 009c43c371cbf974f860ee540816fa3d,
|
m_Motion: {fileID: -5495367200724739231, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Threshold: 0.5
|
m_Threshold: 0.5
|
||||||
m_Position: {x: 0, y: 0}
|
m_Position: {x: 0, y: 0}
|
||||||
m_TimeScale: -2
|
m_TimeScale: -2
|
||||||
@@ -36682,8 +36662,7 @@ BlendTree:
|
|||||||
m_Name: Holding Melee Idle
|
m_Name: Holding Melee Idle
|
||||||
m_Childs:
|
m_Childs:
|
||||||
- serializedVersion: 2
|
- serializedVersion: 2
|
||||||
m_Motion: {fileID: -5508357832084655506, guid: 009c43c371cbf974f860ee540816fa3d,
|
m_Motion: {fileID: -5508357832084655506, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Threshold: -1
|
m_Threshold: -1
|
||||||
m_Position: {x: 0, y: 0}
|
m_Position: {x: 0, y: 0}
|
||||||
m_TimeScale: 1
|
m_TimeScale: 1
|
||||||
@@ -36699,8 +36678,7 @@ BlendTree:
|
|||||||
m_DirectBlendParameter: InputHorizontal
|
m_DirectBlendParameter: InputHorizontal
|
||||||
m_Mirror: 0
|
m_Mirror: 0
|
||||||
- serializedVersion: 2
|
- serializedVersion: 2
|
||||||
m_Motion: {fileID: -5508357832084655506, guid: 009c43c371cbf974f860ee540816fa3d,
|
m_Motion: {fileID: -5508357832084655506, guid: 009c43c371cbf974f860ee540816fa3d, type: 3}
|
||||||
type: 3}
|
|
||||||
m_Threshold: 1
|
m_Threshold: 1
|
||||||
m_Position: {x: 0, y: 0}
|
m_Position: {x: 0, y: 0}
|
||||||
m_TimeScale: -1
|
m_TimeScale: -1
|
||||||
|
|||||||
@@ -70,7 +70,6 @@ public class AnimatorAI : MonoBehaviour
|
|||||||
|
|
||||||
protected virtual void Start()
|
protected virtual void Start()
|
||||||
{
|
{
|
||||||
// Sử dụng GetComponentInChildren để tìm Animator ở các đối tượng con (khung Mesh)
|
|
||||||
animator = GetComponentInChildren<Animator>();
|
animator = GetComponentInChildren<Animator>();
|
||||||
enemyAI = GetComponent<EnemyAI>();
|
enemyAI = GetComponent<EnemyAI>();
|
||||||
agent = GetComponent<NavMeshAgent>();
|
agent = GetComponent<NavMeshAgent>();
|
||||||
@@ -79,54 +78,103 @@ public class AnimatorAI : MonoBehaviour
|
|||||||
if (animator == null)
|
if (animator == null)
|
||||||
{
|
{
|
||||||
Debug.LogError($"<color=red>[AnimatorAI]</color> KHÔNG tìm thấy Animator trên {gameObject.name} hoặc các con của nó!");
|
Debug.LogError($"<color=red>[AnimatorAI]</color> KHÔNG tìm thấy Animator trên {gameObject.name} hoặc các con của nó!");
|
||||||
}
|
return;
|
||||||
else if (debugMode)
|
|
||||||
{
|
|
||||||
Debug.Log($"<color=green>[AnimatorAI]</color> Đã tìm thấy Animator trên đối tượng: {animator.gameObject.name}");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CHẨN ĐOÁN SÂU:
|
||||||
|
if (debugMode) StartCoroutine(DeepDiagnosticRoutine());
|
||||||
|
|
||||||
InitializeParameters();
|
InitializeParameters();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private IEnumerator DeepDiagnosticRoutine()
|
||||||
|
{
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
yield return new WaitForSeconds(2f); // Kiểm tra mỗi 2 giây
|
||||||
|
|
||||||
|
if (animator == null) yield break;
|
||||||
|
|
||||||
|
// 1. Kiểm tra Avatar
|
||||||
|
if (animator.avatar == null)
|
||||||
|
Debug.LogError($"<color=red>[T-POSE ALERT]</color> {animator.gameObject.name} KHÔNG CÓ AVATAR! Đây là lý do bị T-Pose. Hãy kéo Avatar vào component Animator.");
|
||||||
|
|
||||||
|
// 2. Kiểm tra Speed
|
||||||
|
if (animator.speed <= 0)
|
||||||
|
Debug.LogWarning($"<color=yellow>[T-POSE ALERT]</color> Tốc độ Animator đang bằng {animator.speed}. Nhân vật sẽ không cử động.");
|
||||||
|
|
||||||
|
// 3. Kiểm tra Animation Clips
|
||||||
|
var stateInfo = animator.GetCurrentAnimatorStateInfo(0);
|
||||||
|
var clipInfo = animator.GetCurrentAnimatorClipInfo(0);
|
||||||
|
|
||||||
|
if (clipInfo.Length == 0)
|
||||||
|
{
|
||||||
|
Debug.LogError($"<color=red>[T-POSE ALERT]</color> State hiện tại ({stateInfo.fullPathHash}) KHÔNG CÓ Clip animation nào! Hãy kéo file .anim vào ô Motion của State trong Animator Controller.");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4. Kiểm tra Culling
|
||||||
|
if (animator.cullingMode == AnimatorCullingMode.CullCompletely)
|
||||||
|
{
|
||||||
|
// Đôi khi Unity tự tắt animation nếu camera không nhìn thấy
|
||||||
|
Debug.Log($"<color=white>[Info]</color> Culling Mode đang là CullCompletely. Nếu nhân vật ở xa có thể sẽ dừng animation.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!useSimulation) yield break; // Nếu không dùng simulation thì chỉ check 1 lần rồi thôi
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected virtual void InitializeParameters()
|
protected virtual void InitializeParameters()
|
||||||
{
|
{
|
||||||
if (animator == null) return;
|
if (animator == null) return;
|
||||||
|
|
||||||
isDead = new vAnimatorParameter(animator, "isDead");
|
// Khởi tạo và kiểm tra từng tham số quan trọng
|
||||||
isGrounded = new vAnimatorParameter(animator, "IsGrounded");
|
isDead = ValidateAndInit("isDead");
|
||||||
isCrouching = new vAnimatorParameter(animator, "IsCrouching");
|
isGrounded = ValidateAndInit("IsGrounded");
|
||||||
isStrafing = new vAnimatorParameter(animator, "IsStrafing");
|
isCrouching = ValidateAndInit("IsCrouching");
|
||||||
isSliding = new vAnimatorParameter(animator, "IsSliding");
|
isStrafing = ValidateAndInit("IsStrafing");
|
||||||
isSprinting = new vAnimatorParameter(animator, "IsSprinting");
|
isSliding = ValidateAndInit("IsSliding");
|
||||||
isAiming = new vAnimatorParameter(animator, "IsAiming");
|
isSprinting = ValidateAndInit("IsSprinting");
|
||||||
canAim = new vAnimatorParameter(animator, "CanAim");
|
isAiming = ValidateAndInit("IsAiming");
|
||||||
flipAnimation = new vAnimatorParameter(animator, "FlipAnimation");
|
canAim = ValidateAndInit("CanAim");
|
||||||
flipEquip = new vAnimatorParameter(animator, "FlipEquip");
|
flipAnimation = ValidateAndInit("FlipAnimation");
|
||||||
groundDistance = new vAnimatorParameter(animator, "GroundDistance");
|
flipEquip = ValidateAndInit("FlipEquip");
|
||||||
groundAngle = new vAnimatorParameter(animator, "GroundAngle");
|
groundDistance = ValidateAndInit("GroundDistance");
|
||||||
verticalVelocity = new vAnimatorParameter(animator, "VerticalVelocity");
|
groundAngle = ValidateAndInit("GroundAngle");
|
||||||
moveSet_ID = new vAnimatorParameter(animator, "MoveSet_ID");
|
verticalVelocity = ValidateAndInit("VerticalVelocity");
|
||||||
upperBody_ID = new vAnimatorParameter(animator, "UpperBody_ID");
|
moveSet_ID = ValidateAndInit("MoveSet_ID");
|
||||||
idleRandom = new vAnimatorParameter(animator, "IdleRandom");
|
upperBody_ID = ValidateAndInit("UpperBody_ID");
|
||||||
idleRandomTrigger = new vAnimatorParameter(animator, "IdleRandomTrigger");
|
idleRandom = ValidateAndInit("IdleRandom");
|
||||||
randomAttack = new vAnimatorParameter(animator, "RandomAttack");
|
idleRandomTrigger = ValidateAndInit("IdleRandomTrigger");
|
||||||
weakAttack = new vAnimatorParameter(animator, "WeakAttack");
|
randomAttack = ValidateAndInit("RandomAttack");
|
||||||
strongAttack = new vAnimatorParameter(animator, "StrongAttack");
|
weakAttack = ValidateAndInit("WeakAttack");
|
||||||
isBlocking = new vAnimatorParameter(animator, "IsBlocking");
|
strongAttack = ValidateAndInit("StrongAttack");
|
||||||
attackID = new vAnimatorParameter(animator, "AttackID");
|
isBlocking = ValidateAndInit("IsBlocking");
|
||||||
defenseID = new vAnimatorParameter(animator, "DefenseID");
|
attackID = ValidateAndInit("AttackID");
|
||||||
recoilID = new vAnimatorParameter(animator, "RecoilID");
|
defenseID = ValidateAndInit("DefenseID");
|
||||||
reactionID = new vAnimatorParameter(animator, "ReactionID");
|
recoilID = ValidateAndInit("RecoilID");
|
||||||
triggerRecoil = new vAnimatorParameter(animator, "TriggerRecoil");
|
reactionID = ValidateAndInit("ReactionID");
|
||||||
triggerReaction = new vAnimatorParameter(animator, "TriggerReaction");
|
triggerRecoil = ValidateAndInit("TriggerRecoil");
|
||||||
hitDirection = new vAnimatorParameter(animator, "HitDirection");
|
triggerReaction = ValidateAndInit("TriggerReaction");
|
||||||
resetState = new vAnimatorParameter(animator, "ResetState");
|
hitDirection = ValidateAndInit("HitDirection");
|
||||||
reload = new vAnimatorParameter(animator, "Reload");
|
resetState = ValidateAndInit("ResetState");
|
||||||
cancelReload = new vAnimatorParameter(animator, "CancelReload");
|
reload = ValidateAndInit("Reload");
|
||||||
reloadID = new vAnimatorParameter(animator, "ReloadID");
|
cancelReload = ValidateAndInit("CancelReload");
|
||||||
shoot = new vAnimatorParameter(animator, "Shoot");
|
reloadID = ValidateAndInit("ReloadID");
|
||||||
shot_ID = new vAnimatorParameter(animator, "Shot_ID");
|
shoot = ValidateAndInit("Shoot");
|
||||||
powerCharger = new vAnimatorParameter(animator, "PowerCharger");
|
shot_ID = ValidateAndInit("Shot_ID");
|
||||||
|
powerCharger = ValidateAndInit("PowerCharger");
|
||||||
|
}
|
||||||
|
|
||||||
|
private vAnimatorParameter ValidateAndInit(string paramName)
|
||||||
|
{
|
||||||
|
vAnimatorParameter p = new vAnimatorParameter(animator, paramName);
|
||||||
|
if (!p.isValid && debugMode)
|
||||||
|
{
|
||||||
|
// Chỉ cảnh báo những biến cốt lõi nếu thiếu
|
||||||
|
if (paramName == "VerticalVelocity" || paramName == "IsGrounded" || paramName == "IsAiming")
|
||||||
|
Debug.LogWarning($"<color=yellow>[AnimatorAI]</color> Cảnh báo: Controller thiếu biến quan trọng: <b>{paramName}</b>");
|
||||||
|
}
|
||||||
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual void Update()
|
protected virtual void Update()
|
||||||
|
|||||||
Reference in New Issue
Block a user