Unity官方教程Roll-a-ball (二)

9.接下来我们需要控制球的滚动,为了不让球通过地面,我们需要给物体增加一个刚体(rigid body),选择Player,然后在Inspector中Add Component,或者你也可以在顶部菜单栏中Component里面添加Physics-rigid body。刚体是一个让物体拥有物理属性的组件。

10.然后我们新建一个Scripts文件夹,右键新建一个C#脚本,并把脚本拖动附加到Hierarchy的Player中,你也可以在add component里面增加脚本。重命名脚本为PlayerControl

11.脚本中带有的代码如下

start函数是初始化时候调用的函数,update是绘画每帧到时候都会调用的,一般逻辑都在Update中。
12.update跟FixedUpdate函数有什么区别?
update函数是每次渲染新一帧的时候被调用,会受当前渲染物体,三角形数量的影响,而FixedUpdate不受帧率的影响,就在固定的间隔时间内调用,所以我们这里选择用FixedUpdate函数。
13.当我们想查询当前类的使用方法或者变量的时候,我们可以选择当前类,然后cmd+’,会打开documentation供我们查询。
14.我们对代码进行如下修改

定义一个公有的speed来调控球运动的速度,这时Player的组件的PlayerControl 脚本下面会出现一个变量

我们可以直接在这里调节速度。
Input.GetAxis(“Horizontal”) 和Input.GetAxis(“Vertical”) 分别获得键盘上的上下左右输入,然后我们新建一个三维向量,xyz分别表示各个轴的变化量,Y轴是向上的,所以我们这里赋值Y为0,因为我们不行球向天上运动。
然后,为了让小球运动起来,我们需要给它一个力的作用,当然也可以直接变transform的position的值,但是施加力的值可以让运动更真实。GetComponent获得当前物体的组件<Rigidbody>,然后对它施加力,方向*速度*平稳的一个间隔时间。
15.接下来,我们要让Camera跟随小球一起运动,如果直接把Camera拖动给Player,那么,相机会跟着小球滚动,但是缺点就是相机也会绕着小球做弧形运动,所以我们还是直接给Camera写一个脚本来控制。

我们创建一个GameObject对象来获得player对象,offset是摄像机当前位置,LateUpDate函数是在所以Update函数执行完成后执行的update函数,在每一帧我们把小球的位置在加上相机原来的相对位置,因为小球的y不会变都是0,所以我们的相机也是和小球保持相同高度,只变x和z。
16.下面我们来创建小球碰撞的获取物品(PickUps),这里我们新建一个正方体(cube),然后在Assets里面新建一个Prefabs(预置物体)文件夹,把cube重命名PickUp,然后拖入Prefabs里面,并把正方体Position的Y移动0.5,然后Add Component 给我们的Cube增加一个旋转。

旋转的代码很简单,就是调用物体的update,然后Rotate函数*时间,物体就会在x,y,z三个方向以不同速度旋转。之后我们在Hierarchy里面新建一个Empty GameObject 重命名PickUps,并把PickUp拖入,然后复制多个。

17.然后我们需要改我们的Player脚本,来实现碰撞了,这里我们用的是

OnTriggerEnter,other是碰撞物,如果tag是pickup,那我们就DisActive这个物体。
Tag标签,需要我们在prefab中设置

这样Hierarchy里面的全都会带上这个Tag。
18.完成后我们发现直接撞击到PickUp但是不会消失,这是因为我们没有选中

选中后,发现小球可以像吃金币一样吃正方体了。这里补充一下OnTrigger和OnCollision的区别,OnTrigger是会取消物理作用,也就是小球可以直接穿过正方体,但是不会把正方体撞开,OnCollision是包含了物理作用,如果正方体是运动的物体,那么正方体会被撞飞出去而不是穿过。
19.最后看上去都很不错了,但是还有一些优化的建议,像Cube这样的物体,unity会当作一个新物体一直在重绘每一帧,我们需要给PickUp加上rigidbody,然后把use gravity的勾取消,然后选择Is Kinematic,这样可以节约系统资源。

20.最后我们添加一个guitext来显示获取个数
首先添加一个Empty GameObject,然后Add Component - Rrendering - GUI Text这是5.0添加GUI Text方法。然后把Positon设置为0.1,0.9,0表示在屏幕左上角,可以通过Pixel Offset来微调,下面还有字体,大小,颜色等可以调。

21.我们在Player脚本中增加一个计数,并把GUIText拖动到脚本里面绑定

22.完成

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值