🐸 青蛙编程网
首页 / C# / Unity 入门 / 3. 用 C# 脚本驱动

用 C# 脚本驱动游戏对象

这是什么:Unity 脚本——你自己造的组件,挂到物体上,它就有了你定义的行为。

为什么用:前置知识:场景与 GameObject,物体已经摆好了,但它们都是"雕塑"——不动。你写的每行 C# 都得有人按下播放键才跑起来,脚本就是那个开关。

如何用:本章先新建一个 MonoBehaviour 脚本挂到方块上,再用键盘方向键让它跑起来。

脚本也是一种组件

还记得上一章的结论吗?组件是演员的演技。而"演技"怎么写?用 C#。脚本(Script)就是你自己造的组件:写一个类,挂到物体上,物体就获得了你定义的行为。

C# 系列学的 class 在这里正式上岗。

创建并挂载脚本

  1. Project 窗口(下方文件柜)空白处右键 → Create → Scripting → MonoBehaviour Script,命名 PlayerMover(文件名必须和类名一致)
  2. 双击脚本,Unity 会用编辑器(默认 Visual Studio 或 VS Code)打开它
  3. 选中场景里的 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,移动不吃帧率。

动手改

  1. 把 speed 改成 10f,感受速度翻倍;再在运行时拖 Inspector 里的值,体会不用停游戏就能调
  2. 加一行 transform.Rotate(0, 100 * Time.deltaTime, 0);,让方块一边跑一边自转
  3. 给脚本加一个 public Vector3 jumpForce 字段,按空格时给 y 方向加一段位移(Input.GetKeyDown(KeyCode.Space)),提前感受下一章的物理

下一章:物理与碰撞,让 Unity 替你算重力 🐸

📥 下载本章代码

ZIP 内含本章全部代码文件与说明,解压即用,与教程内容同步生成。