Appearance
输入、物理、动画、UI 相关脚本
核心理解
这四类脚本不要混成一个巨大脚本。推荐这样拆:
输入脚本:读玩家意图。 物理脚本:让角色真正移动、跳跃、碰撞。 动画脚本:根据状态驱动 Animator。 UI 脚本:显示数据、响应按钮。
输入脚本
输入脚本只负责把键盘、手柄、鼠标转成游戏意图:
c
public Vector2 Move { get; private set; }
public void OnMove(InputValue value)
{
Move = value.Get<Vector2>();
}它不应该直接管动画、血量、UI。它只告诉别的脚本:“玩家想往这里走”。
物理脚本
物理脚本负责 Rigidbody、碰撞、触发器、射线:
c
void FixedUpdate()
{
rb.linearVelocity = velocity;
}如果你用的是旧版 Unity,常见写法可能是 rb.velocity。Unity 6 文档里更多看到 linearVelocity。
跳跃常见写法:
c
rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);碰撞和触发器:
c
void OnCollisionEnter(Collision collision) { }
void OnTriggerEnter(Collider other) { }动画脚本
动画脚本不要决定游戏规则,它只把状态传给 Animator:
c
animator.SetFloat("Speed", speed);
animator.SetBool("Grounded", isGrounded);
animator.SetTrigger("Attack");Float/Bool 适合持续状态,Trigger 适合一次性动作,比如攻击、受伤、开门。
UI 脚本
UI 脚本负责显示结果,不负责核心规则:
c
[SerializeField] private Slider hpSlider;
[SerializeField] private TextMeshProUGUI coinText;
public void SetHp(float rate)
{
hpSlider.value = rate;
}
public void SetCoin(int coin)
{
coinText.text = coin.ToString();
}按钮:
c
startButton.onClick.AddListener(StartGame);注意:按钮最好发出“请求”,比如请求开始游戏、请求购买物品,不要把所有游戏规则直接写在 UI 按钮脚本里。
推荐练习顺序
- 输入控制移动。
- Rigidbody 跳跃和落地检测。
- Animator 切待机、跑、跳、攻击。
- UI 显示血量和金币。
- 按钮实现暂停、继续、重新开始。
参考链接