feat: VFS 虚拟仿真实验核心框架 v2

- 加权评分系统:每步独立 ScoreWeight,满分 100,SequenceClick 按子项比例计分
- StepData 新增 DetailedContent(学习模式详细操作说明)和 SubStepCount
- 伤情检查步骤扩展为 5 子项序列(视觉检查→肿胀→疼痛→生命体征→神经评估)
- 夹板固定模式完整评分(选择夹板→放置衬垫→夹板固定→固定后检查)
- Doc/ 文件夹归档三份文档:项目大纲、文案、评分标准
- README 更新评分权重表和夹板固定流程
This commit is contained in:
yangbear
2026-06-24 02:07:43 +08:00
commit a11e003fcd
23 changed files with 2377 additions and 0 deletions
@@ -0,0 +1,102 @@
using UnityEngine;
/// <summary>
/// 角色动画控制器:管理伤者和施救者的动画状态切换。
/// 挂在角色根 GameObject 上,引用其 Animator 组件。
/// </summary>
public class CharacterAnimController : MonoBehaviour
{
[Header("角色类型")]
public enum CharacterRole { Patient, Rescuer }
public CharacterRole Role = CharacterRole.Patient;
[Header("Animator 引用")]
[SerializeField] private Animator _animator;
// Animator 参数名(按项目实际命名约定调整)
private static readonly int ParamRun = Animator.StringToHash("IsRunning");
private static readonly int ParamJump = Animator.StringToHash("Jump");
private static readonly int ParamFall = Animator.StringToHash("Fall");
private static readonly int ParamLying = Animator.StringToHash("IsLying");
private static readonly int ParamCrouch = Animator.StringToHash("Crouch");
private static readonly int ParamCheck = Animator.StringToHash("Check");
private static readonly int ParamBandage = Animator.StringToHash("Bandage");
private static readonly int ParamRemoveShoe = Animator.StringToHash("RemoveShoe");
private void Awake()
{
if (_animator == null) _animator = GetComponent<Animator>();
}
#region
public void PlayRun()
{
if (_animator == null) return;
_animator.SetBool(ParamRun, true);
}
public void StopRun()
{
if (_animator == null) return;
_animator.SetBool(ParamRun, false);
}
public void TriggerJump()
{
_animator?.SetTrigger(ParamJump);
}
public void TriggerFall()
{
_animator?.SetTrigger(ParamFall);
_animator?.SetBool(ParamLying, true);
}
public void SetLying(bool lying)
{
_animator?.SetBool(ParamLying, lying);
}
#endregion
#region
public void PlayCrouch()
{
_animator?.SetBool(ParamCrouch, true);
}
public void StopCrouch()
{
_animator?.SetBool(ParamCrouch, false);
}
public void TriggerCheck()
{
_animator?.SetTrigger(ParamCheck);
}
public void TriggerBandage()
{
_animator?.SetTrigger(ParamBandage);
}
public void TriggerRemoveShoe()
{
_animator?.SetTrigger(ParamRemoveShoe);
}
#endregion
#region
/// <summary>按名称触发任意 Animator 参数</summary>
public void TriggerByName(string triggerName)
{
if (_animator == null || string.IsNullOrEmpty(triggerName)) return;
_animator.SetTrigger(Animator.StringToHash(triggerName));
}
#endregion
}