用 C# 脚本驱动游戏对象
这是什么:Unity 脚本——你自己造的组件,挂到物体上,它就有了你定义的行为。
为什么用:前置知识:场景与 GameObject,物体已经摆好了,但它们都是"雕塑"——不动。你写的每行 C# 都得有人按下播放键才跑起来,脚本就是那个开关。
如何用:本章先新建一个 MonoBehaviour 脚本挂到方块上,再用键盘方向键让它跑起来。
脚本也是一种组件
还记得上一章的结论吗?组件是演员的演技。而"演技"怎么写?用 C#。脚本(Script)就是你自己造的组件:写一个类,挂到物体上,物体就获得了你定义的行为。
C# 系列学的 class 在这里正式上岗。
创建并挂载脚本
- Project 窗口(下方文件柜)空白处右键 →
Create→Scripting→MonoBehaviour Script,命名PlayerMover(文件名必须和类名一致) - 双击脚本,Unity 会用编辑器(默认 Visual Studio 或 VS Code)打开它
- 选中场景里的 Cube,把
PlayerMover脚本直接从 Project 拖到 Inspector 里——挂载完成,Inspector 出现了它的名字,说明这个组件已生效
读懂脚本骨架:MonoBehaviour 生命周期
新建脚本自带这段骨架(注释为讲解所加):
using UnityEngine;
public class PlayerMover : MonoBehaviour // 继承 MonoBehaviour 才能挂到物体上
{
void Start() // 游戏开始时执行一次:初始化的好地方
{
Debug.Log("我登场了!");
}
void Update() // 每一帧执行一次:约每秒 60 次,写持续行为
{
// 持续移动的逻辑写这里
}
}
| 写法 | 含义 |
|---|---|
: MonoBehaviour |
继承 Unity 的基类,有它才有生命周期回调,才能当组件挂载 |
Start() |
开演前的一次性准备:设初始位置、找队友都在这 |
Update() |
每帧调用的主循环:读输入、移动、计时都靠它 |
Debug.Log() |
Unity 版的 Console.WriteLine,输出到 Console 窗口 |
点编辑器上方 ▶ 运行,Console(菜单 Window → Panels → Console)里就能看到那句登场台词。
完整脚本:键盘控制移动
把 Update 换成下面的代码,实现 WASD / 方向键控制:
using UnityEngine;
public class PlayerMover : MonoBehaviour
{
public float speed = 5f; // public 字段会显示在 Inspector 里,可拖动调整!
void Update()
{
// GetAxis 返回 -1 ~ 1 的平滑值:按 A/D 得左右,按 W/S 得前后
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
// 拼出移动方向:(左右, 0, 上下),并乘速度和帧间隔
Vector3 dir = new Vector3(h, 0, v) * speed * Time.deltaTime;
// 改自己的 Transform 位置——上一章学的组件在这里上岗
transform.position += dir;
}
}
| 代码 | 作用 |
|---|---|
public float speed |
公开字段自动出现在 Inspector,不改代码就能调数值 |
Input.GetAxis("Horizontal") |
读键盘水平输入,松开时平滑归零,新手比 GetKey 顺手 |
Time.deltaTime |
上一帧到这帧的秒数,乘上它移动速度才与帧率无关 |
transform.position += dir |
每帧挪一小步,连起来就是平滑移动 |
保存脚本回到 Unity(会自动重新编译),点 ▶:按 WASD,方块滑动了 🎉。在 Inspector 里把 Speed 改成 15,立刻变成"极速能跑"——public 的便利现场兑现。
记忆口诀:类继承 MonoBehaviour,Start 备场,Update 每帧跑;乘上 deltaTime,移动不吃帧率。
动手改
- 把
speed改成10f,感受速度翻倍;再在运行时拖 Inspector 里的值,体会不用停游戏就能调 - 加一行
transform.Rotate(0, 100 * Time.deltaTime, 0);,让方块一边跑一边自转 - 给脚本加一个
public Vector3 jumpForce字段,按空格时给 y 方向加一段位移(Input.GetKeyDown(KeyCode.Space)),提前感受下一章的物理
下一章:物理与碰撞,让 Unity 替你算重力 🐸