在Mac上使用VSCode开发Unity3D

  |  

摘要: 本文记录在 Mac 上配置 Unity3D 开发环境的过程。

【对数据分析、人工智能、金融科技、风控服务感兴趣的同学,欢迎关注我哈,阅读更多原创文章】
我的网站:潮汐朝夕的生活实验室
我的公众号:潮汐朝夕
我的知乎:潮汐朝夕
我的github:FennelDumplings
我的leetcode:FennelDumplings


$1 安装 Unity3D

下载页面:https://unity.cn/releases ,如下:

这里我们选择从 hub 下载,首先需要安装 Unity Hub。

Unity Hub 是一个致力于简化工作流的桌面端应用程序,是一个集社区、项目管理、学习资源、安装与一体的工作平台;它提供了一个用于管理 Unity 项目、简化下载、查找,卸载以及安装管理多个 Unity 版本的工具。

第一次下载会要求你注册账号,注册后,会有一个 UnityID,可以访问我的 UnityID 页面

下载并安装 Unity Hub 后,打开,登陆 UnityID,之后会建议安装 Unity Editor,这里选择安装。

安装好后,即可进入 UnityHub。如下图:

点击右上角的【New Project】,进入以下界面:

做好相关选项的选择后,点击【Create Project】, 需要安装的内容会提示:

  • 安装 PlasticSCM

  • 安装 Unity

仅额外勾选后面的简体中文,其他的不动,继续,会提示以下关于 Visual Studio 的选项。

然后即可进入创建好的工程界面,如下:

选中画面中的球体,在右边的 Inspector 窗口中点 Add Component,选择 New Script,输入文件名即可,这里输入 Ball,cs 后缀会自动加上。

点击脚本组件选择 Edit Script,第一次点击的时候需要选择编辑器。这里选择 VSCode(https://code.visualstudio.com/),


$2 第一个脚本程序

创建新的脚本程序,添加以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Ball : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}

// 脚本在屏幕显示 UI 的 GUI 程序片段
void OnGUI()
{
GUI.Label(new Rect(Screen.width / 2, Screen.height / 2, 100, 100), "Hello World! ");
}

// Update is called once per frame
void Update()
{
}
}

然后在 Hierachy 视图中 Main Camera 组件,然后在组件的 Inspector 视图中附加上面的脚本程序,然后在 Camera 组件的 Clear Flags 选项中选择属性 Solid Color。

启动,即可看到 Game 视图中的附加脚本程序。

编译输出

前面我们完成了 Hello World 的编写,并进行了输出测试。接下来要编译输出成 Windows 上可以运行的 .exe 程序。


$2 Unity脚本基础知识与例子

可以看到脚本 Ball 中引用了 UnityEngine 命名空间,组件类型为 Ball,继承了 MonoBehaviour。

$2-1 Start 事件和 Update 事件

Start() 函数在游戏开始运行的时候执行一次,适合进行组件初始化。

Update() 函数每帧会执行一次,在不同设备上更新频率有区别,当系统硬件资源不足时,帧率会降低。

例子: 向 Console 打印信息

在开发过程中,可以经常用 Debug.Log() 向控制台输出信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Ball : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
Debug.Log("组件执行开始函数!");
}

// Update is called once per frame
void Update()
{
Debug.Log("当前游戏进行时间:" + Time.time);
}
}

从菜单栏开始,Window -> General -> Console,即可打开控制台,然后执行游戏,可以看到 Console 产生的大量信息。

$2-2 修改物体位置

修改物体位置,就是修改 Transform 组件的数据。

可以在 Inspector 窗口里查看和修改 Transform 组件的位置、旋转、缩放参数。这些参数也可以在脚本中修改,但有些可以在脚本修改的参数界面上不一定在界面上有。

这里我们要改的是 Transform 组件的 Position,有两种方法,一种是使用 Translate() 函数,另一种是直接指定新位置。

1
2
3
4
void Start()
{
transform.position = new Vector3(1, 2.5f, 3);
}

如果要做一个连续位移动画,则每帧移动一个小距离即可。以下两行是等价的,选择一行即可。

1
2
3
4
5
void Update()
{
transform.Translate(0, 0, 0.1f);
transform.position += new Vector3(0, 0, 0.1f);
}

系统繁忙时帧率不稳定,因此如果想要实现每秒移动特定距离而不是每帧移动特定距离,则需要用两帧之间的间隔 Time.deltaTime 算一下。

1
2
3
4
void Update()
{
transform.Translate(0, 0, 5 * Time.deltaTime);
}

$2-3 读取和处理输入

Unity 支持多种输入设备,例如键盘、鼠标、手柄、摇杆、触摸屏等。但控制方式是类似的,下面代码获取用户当前的纵轴输入和横轴输入。

1
2
3
4
5
6
void Update()
{
float v = Input.GetAxis("Vertical");
float h = Input.GetAxis("Horizontal");
Debug.Log("当前输入纵向:" + v + " 横向:" + h);
}

Input.GetAxis() 函数返回 -1 ~ 1 之间的值。该值通过乘法可以将输入的幅度与物体运动速度联系起来。

1
2
3
4
5
6
7
void Update () 
{
float v = Input.GetAxis("Vertical");
float h = Input.GetAxis("Horizontal");
Debug.Log("当前输入纵向:"+v + " " + "横向 :"+h);
transform.Translate(h*10*Time.deltaTime, 0, v*10*Time.deltaTime);
}

例子: 实现一个移动的小球

step1: 新建一个球体
step2: 调整摄像机朝向和位置,可以设置为俯视、平视、斜上方视角
step3: 为球体创建脚本 Ball 并挂载
step4: 写 Ball.cs 的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using UnityEngine;

public class Ball : MonoBehaviour
{
public float speed = 10;

void Start ()
{
}

void Update ()
{
float v = Input.GetAxis("Vertical");
float h = Input.GetAxis("Horizontal");
transform.Translate(h*speed*Time.deltaTime, 0, v*speed*Time.deltaTime);
}
}

step5: 运行游戏


Share