unity3d script脚本练习
【专业iPhone 3d游戏、移动游戏开发:北京贝武易科技公司】
有疑问请联系我QQ:363596350
下面是unity3d script脚本练习,感谢
作者: Graham McAllister
译者:威阿(2009-04-06)
:arrow: 脚本命名规范:
在开始前,先说一下在Unity中的一些规范.
变量 首写是小写字母.变量用来储存游戏状态中的任何信息.
函数 首写是大写字母.函数是一个代码块,只需要写一次,在需要时候可以被再次重用.
类 首写是大写字母.可以被认为是函数的库.
提示:当阅读范例代码或者Unity的API,要注意首写字母,这将有助于你更好的理解对象之间的关系.
我们第一个项目是在一个简单的游戏场景中走动.
设置场景
- 启动Unity.
首先,让我们创建一个用来行走的平面,用一个扁的Cube.
- 创建一个Cube,缩放x,y,z为”5,0.1,5”,它现在看起来应该是一个大平板.在层次视图(Hierarchy View)中重命名为”Plane”.
- 创建第二个Cube,将它放置在这个大平板的中心位置.如果在游戏视图(Game View)看不到它们,那么改变主相机位置使它们可见.重命名该物体为”Cube1”.
- 你也应该建立一个点光源,并且放在大平板之上,使它们更清晰.
- 保存 选择菜单File->Save As保存这个场景文件.
我们第一个脚本 我们现在开始游戏设计.我们打算让Player移动. 通过控制主相机的位置来实现,要做到这一点,我们现在要写一个脚本来读取键盘的输入.然后把脚本和相机链接起来(更多的在下一节).
- 首先创建一个空脚本.选择” Assets->Create->Javascript”并在项目面板重命名为”Move1”.
- 双击Move1脚本,它将打开,并且默认包含有Update()函数,我们将我们的代码插入这个函数,任何加入Update()函数中的代码都将在每一帧(frame)执行一次. 在Unity中为了移动一个游戏对象我们需要用transform来更改它的位置,属于Translate,这个Translate函数有x,y和z三个参数,因为我们想通过光标键控制主相机,我们只需要下面这些代码,来决定按键按下后参数的变化:

通过Unity界面来连接变量是非常强大的.
Unity的功能.它允许在Unity界面上拖拽(drag and drop)的方式来赋予脚本代码. 这是快速又简洁的主意.这样在Unity界面中完成连接变量,我们知道我们总是需要脚本代码中暴露的变量,以便我们在检视面板中指派参数.为了演示连接变量的概念,我们建立一个跟随玩家(主相机)的聚光灯.
- 添加一个聚光灯到场景视图,移动它靠近其他游戏对象.
- 创建一个JavaScript脚本并重命名为Follow.
让我们想想我们要做的,我们希望主相机的地方有个聚光灯所照耀.事实上,Unity中有个函数能做到这一点. transform.LookAt(). 如果你开始想”我该怎么做?”和已经想了很多代码.那么要记得经常查看Unity的函数API.,我们能同样的猜想查看API中的” transform’”章节,为感兴趣的游戏对象的位置和旋转. 现在,我们来到连接变量章节,我们如何使用LookAt()参数呢?我们可以编写代码指定一个游戏对象,但是我们是想通过Unity GUI来指派变量,因此我们将用一个暴露变量(Transform类型).我们的Follow.js脚本应该如下:
访问组件

作为一个游戏对象能有多个脚本(或其他组件).它不可避免的要访问其他组件的函数或变量.Unity中通过GetComponent() 函数来实现这个. 我们现在要添加另外的脚本来让按下跳跃键(默认空格键)时让聚光灯射向Cube1.
让我们先思考这个问题,我们要做的是:
1. 监视跳跃键被按下.
2. 当跳跃键按下时,聚光灯将照射Cube1.我们如何做到这一点呢?那么Follow脚本包含一个”target”变量,其值确定哪些游戏对象被聚光灯所照射.我们需要为这个值设定一个新的参数.我们可以写代码给这个值为cube(看本节后的”写代码”),但我们知道暴露了这个变量,通过GUI上指定变量的值是更好的办法:
- 创建一个新的JavaScript脚本并重命名为Switch,添加代码到Switch.js:
这样写代码
前面的教程中我们提到,可以通过写代码的方式指定变量(而不是通过Unity界面),让我们看看如何做.记住,这只是用来比较,建议通过Unity界面来给变量赋值.早先按下空格时告诉聚光灯聚焦到Cube1上.我们的解决方案是做一个暴露变量在Switch脚本,我们便可以在Unity的界面上拖拽Cube1上去.在代码中主要有两种方法做到这一点:
1. 使用游戏对象的名称(name)
2. 使用游戏对象的标签(tag)
1. 游戏对象名称 可以从层次视图中看到游戏对象的名称.用GameObject.Find()函数来使这些名称作为参数. 因此如果我们想按下跳跃键时候切换聚光灯从主相机到Cube1,代码如下::
实例
通常在运行时创建(create)对象(如游戏正在播放).要这样做,我们要用到Instantiate函数. 让我们讲述如何在每次按下开火按钮(或按鼠标左键或左Ctrl键)后通过实例(建立)一个新的游戏对象. 那么我们怎么做呢?我们希望用户像往常一样走动,当按下开火按钮,实例化创建一个新的对象.思考以下几点:
1. 哪个物体做我们的实例?
2. 在哪里做实例化?
关于哪个对象到实例,最好的解决办法是暴露变量.这意味着我们随时可以通过拖拽游戏对象到变量来改变对象为实例. 至于哪里做实例化,现在我们只要实现当按下开火按钮时在用户(主相机)当前位置创建新的游戏对象. 实例化函数有三个参数:
(1)我们要建立一个对象,
(2)对象的三维位置
(3)对象的旋转位置.
完整的代码如下(Create.js):
调试
调试是发现和修正你的代码中人为错误的技巧,Unity中提供了Debug类,我们现在看看Debug.Log()函数.
Log Log()函数允许用户发送信息到Unity的控制台.这样做的原因可能包括:
1. 在运行时要验证某部分代码是否达成.
2. 报告变量的状态. 我们现在使用Log()函数,当用户点击开火按钮时发送一个消息到Unity控制台.
- 打开创建的脚本并在” Instantiate’”代码内”if”处添加如下代码:
常见脚本类型
每当一个新Javascript被创建,默认情况下将包含Update()函数.这一届将讲述其他常见的函数,简单的从下面列表中替换Update()函数名字.
FixedUpdate()
置于这个函数中的代码每隔一定间隔执行(固定的帧率).它通常被用来Rigibody中用力的时候.
OnMouseOver()
当鼠标在一个载有GUI元素(GUIElement)或碰撞器(Collider)的游戏对象里的按下动作抬起后执行该函数内的代码.// Fades the red component of the material to zero // while the mouse is over the mesh function OnMouseOver () { renderer.material.color.r -= 0.1 * Time.deltaTime; }
查看Unity API 获得这些函数的更多信息. 此教程介绍了Unity脚本的基本概念.你现在应该看看其他Unity教程或自己试试吧!
【专业iPhone 3d游戏、移动游戏开发:北京贝武易科技公司】
有疑问请联系我QQ:363596350