笨木头  2015-11-15 11:17     Unity3D     阅读(9303)     评论(18)
转载请注明,原文地址: http://www.benmutou.com/archives/2196
文章来源:笨木头与游戏开发
 
UI是游戏里必不可少的元素,在Unity里添加UI是比较轻松的事情,但要玩好它,可就不那么轻松了。
没关系,先入门。
 

笨木头花心贡献,啥?花心?不,是用心。

转载请注明,原文地址:http://www.benmutou.com/archives/2196

文章来源:笨木头与游戏开发





 

1.创建UI

很早之前也介绍过怎么创建UI,这里简单再回顾一下。
在Hierarchy窗口中点击右键,依次选择【UI】-【Text】。
我们会看到窗口中,多了一个Canvas和Text:
 

2.让UI跟随物体移动

由于我们要创建的UI是属于BugPlayer的,所以,首先要把整个Canvas拖动到BugPlayer身上:
 
此时的Canvas虽然是在BugPlayer之下,但是...它的心是不属于BugPlayer的,它是属于摄像机的。
要想Canvas随着物体移动,很简单,修改Canvas属性,如下图:
将Canvas的Render Mode属性改为【World Space】,很好,这样UI就能跟着物体移动了(具体原理不解释)。
 
此时的Canvas十分庞大,也许是我们的场景太小了。
没关系,我们修改Canvas的属性,让它的Scale变小一些:
由于UI是平面的,所以只需要缩小X和Y,Z可以忽略(Z:特么的....)
我还偷偷把Canvas的X、Y、Z坐标设为0了,因为这样它才会出现在BugPlayer的正中心。
 

3.调整UI大小和样式

接下来的操作有些小繁琐,我只能用gif图来展示了:
u009_5.gif
我只要做了几件事情:
a.把Text的高度修改为50
b.把Text的文本内容改为“我很好”
c.把Text的字体大小改为25
d.把Text的颜色改为红色
 
现在,运行游戏,UI是能跟着BugPlayer移动的。
u009_6.gif
现在UI的方向不对,我们可以把Canvas旋转一下,让方向变正确,这个我就不演示了,大家自己折腾。
 

4.在代码中操作UI

最后要做的事情,就是在代码里操作UI了。
其实和操作物体是差不多的,主要就是怎么找到这个UI,之前所说的各种找GameObject方式都可以用在UI身上。
 
不过,这次,我们有稍微一点点的不同。
 
打开BugPlayerLogic脚本,加上一个属性和两个函数,如下所说:
using UnityEngine;
using UnityEngine.UI;
 
public class BugPlayerLogic : MonoBehaviour {
    public Text txt = null;
 
    public void XChange()
    {
        txt.text = "啊,我的X!";
    }
    public void ZChange()
    {
        txt.text = "啊,我的Y!不,是我的Z!";
    }
}
我把using语句也贴出来了,为什么呢?因为要使用UI对象,就要引入UnityEngine.UI命名空间,否则是找不到这些UI类的。
我们现在了一个Text属性,没错,我们使用的是之前的其中一种方式,用属性来保存对象。
同时增加了两个函数,等会会用到。
 
现在,回到编辑器,把Text拖动到BugPlayer的BugPlayerLogic脚本组件上的txt属性里(小若:特么的,这是语文四级考试吗?)
u009_7.gif
 
接下来,当然就是修改SomethingGGD脚本了,如下:
    void OnTriggerEnter(Collider other)
    {
        Debug.Log("OnTriggerEnter");
 
        BugPlayerLogic playerLogic = other.gameObject.GetComponent<BugPlayerLogic>();
        int rand = (int)Random.Range(1, 100);
        if(rand < 50)
        {
            other.gameObject.transform.position = new Vector3(
            other.gameObject.transform.position.x,
            other.gameObject.transform.position.y,
            other.gameObject.transform.position.z - 20
            );
 
            playerLogic.XChange();
        }
        else
        {
            other.gameObject.transform.position = new Vector3(
            other.gameObject.transform.position.x + 20,
            other.gameObject.transform.position.y,
            other.gameObject.transform.position.z
            );
 
            playerLogic.ZChange();
        }
    }

只需修改OnTriggerEnter函数。
我做了什么事情呢?我调用了other.gameObject的GetComponent函数,这个函数可以获取GameObject上的组件对象。
这是很强大的功能,我们只要拥有了GameObject对象,就可以获取到它所有的组件对象了。
 
既然已经能获取BugPlayerLogic对象了,那自然可以调用它的函数了。
我们在不同的if条件里分别调用了XChange和ZChange函数。
 
OK,运行游戏,看看我们的效果吧:
u009_8.gif
 
哦,对不起,我玩得太入迷了,一不小心多玩了一会。
细心的笨蛋一定已经发现了,好像有些文字没有显示出来,这是因为Text的宽度不够大,这个大家自己解决,太简单,不想说。
 

5.结束

特么的,终于结束了。
这个Demo结束了,木头的Unity入门之旅系列教程也结束了,耗时将近一个月。
 
我相信,对于入门,这些知识已经够用了,接下来就需要大家自己去折腾,去看其他的教程了。
Unity其实入门是很难的,我是指入门的前几天,拖几个物体、建个场景当然很轻松,但想真正写一个Demo级别的小游戏,似乎都会很迷茫。
而度过前面的几天之后,其实就轻松多了,习惯了Unity的操作方式,看教程也会容易理解很多。
但,入门后的1个月、2个月、1年、2年,也许会越来越难,毕竟,Unity太强大了,有很多东西值得去研究。
 
请原谅木头精力有限,无法持续输出教程,最近公司也到了比较紧张的时期,我得多花心思在公司上面。
 
OK,很高兴我能坚持完成这个系列的教程(虽然后面几篇有点乏力),希望以后还能继续多写教程。
 
如果大家有什么想要了解的,也不妨给我留言,我尝试去折腾,然后写成教程。
太难的就别为难我了,毕竟我还处于Unity初级阶段。
 
以上。
 
本篇源码:Unity_benmutou_010.7z
 
18 条评论
  • 莫小贱V 2016-01-20 01:44:32

    唉,失业了,有时间逛逛这里,也冷清了不少啊
    0回复
    • 博主 糟糕_树叶的mut 2016-01-20 08:22:43

      卧槽,你不是跟龙灵修了吗?

      我最近有很多分心的事情,都没研究游戏了[囧]
      0回复
      • 莫小贱V 2016-01-28 21:17:56

        说来话长了,遭遇不测,准备年后找工作,才发现招unity的人多了起来,不过不想转,看看底层的东西才重要,unity,cocos,工具而已,连语言都是工具
        0回复
        • 博主 糟糕_树叶的mut 2016-01-29 08:54:02

          [囧]反正我早就被游戏行业抛得远远的了,现在我都不知道自己算不算是搞技术的了,没什么长进,哈哈哈。

          祝你好运啊。
          0回复
  • 戴繁祥 2015-12-10 16:30:03

    木头我想知道除了双摄像机和对硬件的接口以外 虚拟现实跟普通的游戏有什么不一样啊
    0回复
    • 博主 糟糕_树叶的mut 2015-12-11 08:35:34

      虚拟现实我也不懂,完全没了解啊[生病]
      0回复
  • 乜亻八一 2015-12-07 17:04:28

    木头啊 想搞手游开发 untiy有前途些吧 但是有必要学一下cocos吗 我是想先把cocos学了 再学untiy 还是可以直接开始学untiy。。。 求教~ 木前辈
    0回复
    • 博主 糟糕_树叶的mut 2015-12-07 21:00:42

      学cocos,你可以更加好地锻炼自己的技术;学Unity,你可以更随心所欲地创作。
      如果你没有游戏开发经验,学cocos是比较好的开始,它很多坑,可能让你变成超人。

      但是,从心理上来说,既然以后要学Unity,为什么又要学cocos呢?这样学起来其实压力蛮大的。

      直接学Unity其实也不是不行,但是自己要多注意,多培养自己在写代码方面的能力,不要被Unity的拖拉操作给蒙蔽了。
      0回复
      • 乜亻八一 2015-12-08 09:51:28

        OK 我还是会学点cocos 因为知道自己现在还不行 哈哈 谢木头老师[good]支持你
        0回复
  • 123123123 2015-11-23 18:22:53

    !!集中到一天看完了!!果然还是木头的教程幽默易懂啊!!好可惜只有10篇。我刚看完就有个疑问- -那假如说我想使用第一人称视角作为主角,使其不断往z轴推进应该也可以吧,(这样就省的去弄主角建模了有木有!!)我记得cocos的时候木头是在update函数里不断改变精灵的x坐标从而让物体往前移动,unity我是不是可以一样这么做-0 0新建一个camera然后做一个脚本,脚本update里也不断改变z坐标,然后把这个脚本拖到新建的camera里,让camera自己往前走0 0
    0回复
    • 博主 糟糕_树叶的mut 2015-11-24 07:44:21

      哈哈哈,记住了,在Unity里,只要你能想到的,它都帮你搞定了。
      把Camera拖到主角那里,作为主角的子节点,就可以了,就像UI一样,Camera会跟着主角移动的。
      0回复
      • 123123123 2015-11-24 12:11:27

        收到~哈哈。木头你的只有一关游戏,建模是你自己建的么,还是找的可商用的?感觉建模是个大问题
        0回复
        • 博主 糟糕_树叶的mut 2015-11-25 08:02:12

          当然不是,太看得起我了,就是Unity商店里下载的,拿剑的那个小人物,好像就在人物模型的第一页?
          0回复
    • 博主 糟糕_树叶的mut 2015-11-24 07:44:39

      然后,谢谢赞赏[害羞]
      0回复
  • 火星工程师 2015-11-20 22:15:10

    哎,教程还没看就没有了[委屈]
    0回复
    • 博主 糟糕_树叶的mut 2015-11-21 15:07:35

      哈哈哈
      0回复
  • 【笨木头Unity】入门之旅010(完结):Demo之四处找死(五)_UI &#045; 移动开发 &#045; 阿里欧歌 2015-11-18 08:44:24

    […] 转载请注明,原文地址:http://www.benmutou.com/archives/2196 […]
    0回复
  • 【笨木头Unity】入门之旅000:前言(含教程目录导航) | 笨木头与游戏开发 2015-11-15 11:22:22

    […] 【笨木头Unity】入门之旅010(完结):Demo之四处找死(五)_UI […]
    0回复
发表评论
粤ICP备16043700号

本博客基于 BlazorAnt Design Blazor 开发