Menu
CoddyTech

滚动的小球

本课属于 Coddy Unity 学习旅程的“物理与游戏玩法”单元。第 28 课,共 71 课。

本章将制作一个名为 Coin Rush 的小游戏。你可以用方向键在有围墙的场地中滚动小球,并在计时结束前收集金币。两个脚本会分担工作,就像在 Unity 项目中一样:Ball负责移动小球、记录分数和计时,Coin则附在每枚金币上。Coin.cs一开始是一个空类,下一课会补充它的内容。

推动小球,而不是直接放置它,小球就会滚动。用AddForce推动小球的 Rigidbody,并让它自由旋转:推力会移动小球,地板的摩擦力会抓住小球底部并使它转动。按住 Space 时,这颗保龄球会沿球道滚动:

public float push = 6f;
private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
}

void FixedUpdate()
{
    if (Input.GetKey(KeyCode.Space))
    {
        rb.AddForce(Vector3.forward * push);
    }
}

小球无滑动滚动时,其旋转速度等于移动速度除以半径。因此,半径为 0.5、移动速度为每秒 3 个单位的小球,旋转速度为每秒 6 弧度(rb.angularVelocity)。改为设置它的transform.position,或在 Rigidbody 的 Constraints 中冻结旋转,它就会像冰球一样滑动而不转动。纯色球体无论如何看起来都一样:要观察滚动效果,请在游戏运行时查看 Rigidbody 的 Info 部分中的 Angular Velocity。

challenge icon

挑战

中等

开始 Coin Rush:用方向键滚动球体。

  1. 在 Ball.cs 的 Start() 中,设置 rb = GetComponent<Rigidbody>();。
  2. 在 FixedUpdate() 中,读取 float x = Input.GetAxis("Horizontal"); 和 float z = Input.GetAxis("Vertical");,然后调用 rb.AddForce(new Vector3(x, 0f, z) * force);。

按“开始”,点击游戏并滚动:球会在移动时转向。然后点击“检查”。

亲手试试

using UnityEngine;

public class Ball : MonoBehaviour
{
    public float force = 10f;
    private Rigidbody rb;

    void Start()
    {
    }

    void FixedUpdate()
    {
        // 用方向键推动小球:Horizontal 沿 x 轴,Vertical 沿 z 轴。
    }
}

物理与游戏玩法中的所有课

自己练习: Unity 在线编辑器