滚动的小球
本课属于 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。
挑战
中等开始 Coin Rush:用方向键滚动球体。
- 在
Ball.cs的Start()中,设置rb = GetComponent<Rigidbody>();。 - 在
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 在线编辑器