Unity 脚本入门
在 Unity 中脚本是必不可少的组成部分,因为它将定义游戏的各种行为。Unity 推荐使用的编程语言是 JavaScript
,但是 C#
或 Boo
同样也可以。下面介绍 JavaScript
的基本使用及脚本的 API
。
一、命名规范
在开始之前,先说一下在 Unity 中的一些命名规范。
- 变量 - 首写是小写字母。变量用来存储游戏状态中的任何信息。
- 函数 - 首写是大写字母。函数是一个代码块,只需要写一次,在需要的时候可以再次重用。
- 类 - 首写是大写字母。可以被认为是函数的库。
提示:当阅读范例代码或者 Unity 的 API ,要注意首写字母,这将有助于你更好的理解对象之间的关系。
二、第一个脚本游戏
我们的第一个脚本游戏是在一个简单的游戏场景中走动.
第一步:设置场景,即在游戏场景中添加地面和游戏对象。
- 地面可由一个扁的 Cube 代替。
- 创建一个 Cube ,缩放新 x,y,z,为『5,0.1,5』,它现在应该是一个大平板,在层次视图中(Hierarchy View)重命名为『Plane』。
创建一个Plane
*游戏对象可由另一个Cube代替。 *创建第二个Cube,将它放置在这个大平板的中心位置。如果在游戏视图(Game View)看不到它们,那么改变主相机位置使它们可见。重命名该物体为”Cube1”。 *还应该建立一个点光源,并且放在大平板之上,使它们更清晰。
添加一个 Cube
第一个脚本
要想让游戏对象 Cube1 运动起来,就需要加入脚本。
通过控制主相机的位置来实现,要做到这一点,我们现在要写一个脚本来读取键盘的输入,然后把脚本和相机链接起来。
首先创建一个空脚本。
- 选择"Assets -> Create -> Javascript" 并在项目面板重命名为 "Move1"。
创建 Move1
- 双击 Move1 脚本,它将打开,并且默认包含有
Start()
和Update()
函数,我们将编写的代码插入这个函数,任何加入Update()
函数中的代码都将在每一帧(frame)执行一次。
双击打开 Move1
Update()
函数:这个函数在渲染每一帧之前被调用。这里是大部分游戏行为代码被调用的地方。
在 Unity 中为了移动一个游戏对象我们需要用 transform 来更改它的位置,属于 Translate ,这个 Translate 函数有 x,y,z 三个参数,因为我们向通过光标健控制主相机,我们只需要下面这些代码,来决定按键按下后参数的变化。
function Update() {
transform.Translate(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
}
Input.GetAxis()
函数返回 -1 或 1 的一个只,例如在横轴上左光标键映射为 -1 ,右光标键映射为 1。
横轴和竖轴是在输入设置(Input Settings)中预先定义好的。从 Edit -> Project Settings -> input
中很容易重定义按键映射。
现在我们的第一个脚本写完了,怎么让 Unity 的游戏对象具有这个脚本行为呢?
第一步: 首先点击你希望应用此脚本的游戏对象,这里是主相机,你可以从层次视图和场景视图中选择它。
第二步: 从菜单栏中 Components -> Script -> Move1
,将这个脚本赋予相机,你在检视面板中看到主相机有 Move1 这个组件。
Components -> Script -> Move1
inspector 面板
提示:你也可以从项目视图拖拽脚本到场景视图的游戏对象。
点击播放按钮运行游戏,你能通过光标键或 W,A,S,D 键来移动主相机。你也许注意到了,摄像机移动的有点太快了,让我们来找一种更好的办法来控制摄像头的速度。
正如先前在 update()
函数里的代码,相机的速度是按帧执行的。然而我们需要游戏对象的移动按秒执行。为了实习这一目标,我们需要将返回值乘以 Input.GetAxis()
函数中的 Time。deltaTime:
。
var speed = 5.0;
function Update() {
var x = Input.GetAxis("Horizontal") * Time.deltaTime * speed;
var z = Input.GetAxis("Vertical") * Time.deltaTime * speed;
transform.Translate(x, 0, z));
}
将上面的代码更新到 Move1 脚本。
注意:
Update()
外的这个速度变量。这是所为的public
变量,这个变量会在检视面板中看到。它是很有用的,实际使用中可以方便的调整它的值,这比改变代码来说方便的多。
- Linux下用dd命令测试硬盘的读写速度
- 教你 Debug 的正确姿势——记一次 CoreMotion 的 Crash
- Linux系统yum命令安装软件时保留(下载)rpm包
- Go语言读写数据库
- 《Android 创建线程源码与OOM分析》
- 微信 Android 视频编码爬过的那些坑
- 少年,这有套《街霸2》AI速成心法,想传授于你……
- 你知道android的MessageQueue.IdleHandler吗?
- 《Android基础:Fragment,看这篇就够了》
- Android 7.0中ContentProvider实现原理
- 《iOS APP 性能检测》
- iOS 11 安全区域适配总结
- Linux下巧用chattr、watch命令的实例
- 【特斯拉组件】iOS高性能PageController
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- spring之为什么要使用事务?(一)
- Mysql 如何实现全文检索,关键词跑分
- spring之操作数据库之使用NamedParameterJdbcTemplate(具名参数)
- 谷歌colab上安装百度paddlepaddle框架
- 谷歌colab运行paddlepaddle之手写数字识别
- 【python-leetcode112-树的深度遍历】路径总和
- spring之第一个spring程序
- 【python-leetcode437-树的深度遍历】路径总和Ⅲ
- 双指针--合并两个排序数组
- spring之事务的其它属性(隔离级别、回滚、只读、过期)(四)
- 二分查找
- 一文弄懂数组的和
- spring之基于xml文件来配置事务(五)
- hash算法的应用
- 树的遍历