阅读(4043) (0)

Unity 3D 编写脚本

2020-07-10 16:56:35 更新

本节我们正式在 Unity 3D 中编写一个简单的脚本实例。

本节以C#Script为脚本编程语言编写实例。

创建脚本

  1. 执行 AssetsCreateC#ScriptJavaScript 菜单命令创建一个空白脚本,将其命名为 Move。

在 Project 面板中双击 Move 打开脚本进行编写。在 Upadate()函数中写入代码。

    using UnityEngine;
    using System.Collections;
    public class Move:MonoBehaviour{
        void Update(){
            transform.Translate(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
        }
    }

Input.GetAxis()函数返回-1~1的值,在水平轴上,左方向键对应 -1,右方向键对应 1。由于目前不需要向上移动摄像机,所以 Y 轴的参数为 0

  1. 执行 EditProject SettingsInput(输入)菜单命令,对映射到水平和垂直方向的名称和快捷键进行修改。

链接脚本

脚本创建完成后,需要将其添加到物体上。在 Hierarchy 视图中,单击需要添加脚本的游戏物体 Main Camera(主摄像机),然后执行 ComponentScriptMove 菜单命令,如下图所示,Move 脚本就链接到了 Main Camera 上。

摄像机(Camera)是向玩家捕获和显示世界的设备。通过自定义和操纵摄像机,可以自由旋转游戏视角。场景中摄像机的数量不受限制,它们可以以任何顺序放置在屏幕上的任何地方,或者只捕获屏幕的某些部分。摄像机参数如下图和下表所示。

参数 描述 功能
Clear Flags 清除标识 确定屏幕哪些部分将被清除。这是为了方便使用多个摄像机捕捉不同的游戏元素。
Background 背景 在完成了视图中的所有元素的绘制后以及没有天空盒的情况 下,剩余屏幕的颜色。
Culling Mask 消隐遮罩 包含层或忽略层将被摄像机渲染。在检视窗口向对象分配层。
Projection 投影 切换摄像机以模拟透视。
Perspective 透视 透视摄像机,由原点向外扩散性发射。即,距离越远,它的视口 区域也就越大,透视视图和人眼的视觉感受是一致的。
Orthographic 正交 正交摄像机,无论远近,它的视口范围永远是固定的,相机会均 匀地渲染物体,没有透视感。
Size 大小 当摄像机设置为正交模式时,摄影机视口的大小。
Field of view 视野 摄像机的视野,沿着本地 Y 轴测量,以度为单位。
Clipping Planes 裁剪面 摄像机从开始到结束渲染的距离。
Near 相对于摄像机,绘制将发生的最近点。
Far 相对于摄像机,绘制将发生的最远点。
Viewport Rect 视口矩形 摄像机画面显示在屏幕上的区域。
X 摄像机视图的开始水平位置。
Y 摄像机视图的开始垂直位置。
W 宽度 摄像机输出在屏幕上的宽度。
H 高度 摄像机输出在屏幕上的高度。
Depth 深度 摄像机在渲染顺序上的位置。具有较低深度的摄像机将在较高 深度的摄像机之前渲染。
Rendering Path 渲染路径 定义摄像机的渲染路径。
Target Texture 目标纹理 用于将摄像机视图输出并渲染到屏幕,一般用于制作导航图或 者画中画等效果。
Occlusion Culling 遮挡剔除 指定是否剔除物体背向摄像机的部分。
HDR 高动态光照渲染 启用摄像机的高动态范围渲染功能。

运行测试

单击播放按钮,在 Scene 视图中,使用键盘上的 W(前)、S(后)、A(左)、D(右)键移动摄像机,转换视角或位置。

注意事项

在 Unity 3D 中,C# 脚本的运行环境使用了 Mono 技术。

Mono 是指 Novell 公司致力于 .NET 开原的工程,利用 Mono 技术可以在 Unity 3D 脚本中使用所有 .NET 的相关类。

  1. 脚本中的类都继承自 MonoBehaviour 类。

Unity 3D 中所有挂载到游戏对象上的脚本中包含的类都继承自 MonoBehaviour 类。

MonoBehaviour 类中定义了各种回调方法,如 Startupdate 等等。

通过在 Unity 中创建 C# 脚本,系统模板已经包含了必要的定义。

  1. 使用 AwakeStart 方法初始化。

用于初始化的 C# 脚本代码必须置于 AwakeStart 方法中。

AwakeStart 的不同之处在于:

  • Awake 方法是在加载场景时,并且在所有 Start 方法之前运行。

  • Start 方法是在第一次调用 UpdateFixedUpdate 方法之前调用。

  1. 类名必须匹配文件名。

C# 脚本中类名必须和文件名相同,否则当脚本挂载到游戏对象时,控制台会报错。

  1. 只有满足特定情况时变量才能显示在属性查看器中。

只有公有的成员变量才能显示在属性查看器中,而 privateprotected 类型的成员变量不能显示,如果要使属性项在属性查看器中显示,它必须是 public 类型的。

  1. 尽量避免使用构造函数。

不要在构造函数中初始化任何变量,而应使用 AwakeStart 方法来实现。

在单一模式下使用构造函数可能会导致严重后果,因为它把普通类构造函数封装了,主要用于初始化脚本和内部变量值,这种初始化具有随机性,容易引发引用异常。因此,一般情况下尽量避免使用构造函数。