Unity入门 - Roll the Ball!
// Unity学习笔记,自己会记录一些学习中遇到的问题,可以给自己看也可以给需要的人看,希望能帮助掉在同样坑里的小伙伴们
// 初学者,没太多编程基础,所以难免可能会有写错的地方,请见谅
Let's go!
昨天正式开始学习Unity,直接去官网看的教学视频。
第一个视频是Roll-a-ball tutorial
http://unity3d.com/cn/learn/tutorials/projects/roll-ball-tutorial
第一步 让球动起来
到第3课照着弄完,球就是不动。。。
后来发现是视频里script不适用于最新版本的unity,修改了script之后(加入了speed),球会动了,但总是往下掉。。
原来是sphere collider不知道什么时候被我给勾掉了,勾上之后就不会掉了!
还剩一个问题是 点击上下左右后,球会延迟很久才动,到unity的forum上找到了解决办法:
To do this, use the play buttons at the top of the editor:
First put the editor in pause mode:
Then enter playmode: (大约是变蓝色说明加载好了)
... and this way, you'll be in paused play-mode. Let the editor fully load and start the scene, then uncheck pause and play the game:
The ball should move immediately.
搞定!
2016/07/05
第二步 让镜头跟随球移动
直接将camera丢到球下面,camera也会跟着球一起动,但是当球滚动时,camera也滚动了,所以改为使用script的控制camera跟随。
这次的script比较简单,一次成功~
学到了两个东西
1. fixupdate、update和lateupdate
这篇文章介绍的很清楚:http://bbs.9ria.com/thread-417976-1-1.html
简单说
fixupdate “在固定的时间间隔执行,不受游戏帧率的影响”; “FixedUpdate是真实时间,所以处理物理逻辑的时候要把代码放在FixedUpdate而不是Update.”
LateUpdate是在所有Update函数调用后被调用
是在所有script里的update之后:update update update …… lateupdate
在控制镜头跟随时,要让球动完,镜头再动,所以使用lateupdate(感觉在这个例子中看不大出来差别)。
2. public与private
不算完全懂吧,但是知道了一点
public定义的变量 会在inspector中可编辑
private定义的变量 只能在script中设定
第三步 制作游戏场景
这一段就很顺利了,加cube做墙,加cube做pickup,通过写script(transform.rotate)让pickup自旋起来。
记几个关键点吧:
1. rotate时,为了不受设备帧率的影响,使用Time.deltatime来抵消帧率差异
transform.rotate (new Vector3(x,y,z) * Time.deltatime )
2. 游戏中反复使用的物品可使用perfab制作模板
3. 通过Local和Global切换坐标系
2016/07/06
续:
通过脚本实现pickup可被球给pick up:
进入球的脚本
onTriggerEnter 探测球和其他物体的碰撞
给pickup加上tag,通过compareTag检测碰撞对象是否为pickup
如果是,使用setActive(false)让该pickup消失
把pickup设为trigger(否则onTriggerEnter不会生效)
pickup的性能优化:
- 通过给pickup加上rigidbody让unity知道它是dynamic的,不是static的,这样就不会每次pickup一转动就从新计算所有的static物体
- kinematic的使用:把pickup的rigidbody设为kinematic,kinematic不受物理力的作用(包括重力),但可以通过transform进行各种变化
今天是7月7日,看不到尽头的黑色天空,眼里的很多汗吃回到了嘴里。感谢unity让我能到另一个世界。
第四步 游戏分数计算与获胜提示
这一段也很顺利
在球的script中,新建变量count记录pick up到的pickup的数量
场景中新建文本UI(countText)显示count
设定countText的显示规则
场景中将countText拖到球的count text空栏中,完成指向
类似方法,创建winText吃掉所有pickup后显示
学到几点:
使用ui,要在抬头加 using Unity.Engine.UI
.text设定文本内容,.ToString数字转化为文本
避免重复可自制函数
@.@ Roll the ball 就做好啦! @*-*@
2016/07/08