在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

如果打开别人的项目,则需要下载别人创建该项目时的版本,而该版本可能从官网不容易找到,可以尝试在 https://unityitellyou.gitee.io/ 寻找。

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

然后即可进入创建好的工程界面,如下,中间的大片区域就是游戏场景,这里是 3D 的:

基本操作

进入工程界面后,可以看到按钮很多,第一次用会有些一头雾水,因此这里我们先了解一些最基本的操作。

操作视图

3D 游戏可以理解为 3 维坐标系的地图中的各种角色的互动,也就是 3 维世界的动画,代码可以控制动画的移动。

因此首先要了解如何操作视图,下面是 Mac 下的一些操作:

  • 按下 Option 键,鼠标左键可以转动 3D 世界;直接鼠标右键也可以旋转,但是不太一样。
  • 鼠标滚轮键可以平移 3D 世界。
  • 滚轮可以放大缩小。

创建物体

回到工程界面,左边的 Hieracrhy 是 3D 世界中所有的元素,其中相机和光源是默认的:

Main Camera 是相机,类似于眼睛,点击之后如下图,右下角的小区域就是游戏时的界面(3D 世界的视角):

Directional Light 是光影系统,可以看到光是斜着照下去的:

在左边 Hierarchy 右键可以添加其他元素:

添加 Sphere 之后的画面如下:

注意看右边 Inspector 中的 Transform 信息,Position 中,绿色箭头是 Y,蓝色箭头是 Z,红色箭头是 X,新建元素后,最好把 Position 复位一下;

此外还有 Rotation 和 Scale 可以调整旋转和大小,也是 X, Y, Z 三个方向。

通过 Rotation Rotation 调整摄像机角度的操作如下:

Inspector 中的其它信息也是有用的,具体细节可以用到的时候再查。

Unity 自带的图案比较简单,如果要创建复杂的元素,Unity 有一个官方应用商店,可以看到别人做好的模型,如果需要可以用。

创建地图

根据环境中的物体,创建若干元素,然后创建一个空物体,在左边 Hierarchy 将创建的若干元素拖进空物体,命名为 Environment。

创建脚本

选中创建的 Sphere 元素,在右边的 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
18
using UnityEngine;

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

void Start ()
{
}

void Update ()
{
float v = Input.GetAxis("Vertical");
float h = Input.GetAxis("Horizontal");
Debug.Log("当前输入纵向:"+v + " " + "横向 :"+h);
transform.Translate(h*speed*Time.deltaTime, 0, v*speed*Time.deltaTime);
}
}

step5: 运行游戏,然后按 W、A、S、D 键或方向键就可以看到球体以一定的速度移动了。


Share