Unity入门 - Roll the Ball!

作者: pirateH | 来源:发表于2016-07-06 13:41 被阅读599次

    // 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

    相关文章

      网友评论

      • plus_Nt:关于静态碰撞体(static colliders)运动时的性能损耗,我在官网论坛发帖问过:
        http://forum.unity3d.com/threads/is-transforming-static-colliders-really-damage-performance-with-test.419208/
        我的总结是:在Unity5中,transform一个static collider不会受到性能惩罚。Unity在设计上也会逐渐避免这种反直觉的trick。

        Rigidbody的isKinematic属性意义在于,它自身不受物理系统的任何影响,却可以作为物理刚体影响其它刚体。

        同为Unity初学者,共勉。
        pirateH:@plus_Nt :+1: 欢迎以后多交流
        plus_Nt:@pirateH 不是。有一点专业背景,但我本身不是做开发的,Unity和C#都是现学
        pirateH:@plus_Nt 厉害!你是本身就是做开发的么?

      本文标题: Unity入门 - Roll the Ball!

      本文链接:https://www.haomeiwen.com/subject/reqkjttx.html