Skip to content

输入、物理、动画、UI 相关脚本

unity-input-physics-animation-ui-scripts

核心理解

这四类脚本不要混成一个巨大脚本。推荐这样拆:

输入脚本:读玩家意图。 物理脚本:让角色真正移动、跳跃、碰撞。 动画脚本:根据状态驱动 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 按钮脚本里。

推荐练习顺序

  1. 输入控制移动。
  2. Rigidbody 跳跃和落地检测。
  3. Animator 切待机、跑、跳、攻击。
  4. UI 显示血量和金币。
  5. 按钮实现暂停、继续、重新开始。

参考链接

文章评价

读完这篇,留下你的看法

暂无审核通过的评价。

登录账号后才能评价。

本站访客数0总站访问量0本页访问量0