10(完结):Demo之四处找死(五)_UI

最后更新于:2022-04-01 14:37:45

UI是[游戏](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=930fbe77ee6efa13&k=%D3%CE%CF%B7&k0=%D3%CE%CF%B7&kdi0=0&luki=6&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=13fa6eee77be0f93&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2196&urlid=0)里必不可少的元素,在Unity里添加UI是比较轻松的事情,但要玩好它,可就不那么轻松了。 没关系,先入门。 > 笨木头花心贡献,啥?花心?不,是用心。 > 转载请注明,原文地址:[http://www.benmutou.com/archives/2196](http://www.benmutou.com/archives/2196) > 文章来源:[笨木头与游戏开发](http://www.benmutou.com/blog/) ### 1.创建UI 很早之前也介绍过怎么创建UI,这里简单再回顾一下。 在Hierarchy窗口中点击右键,依次选择【UI】-【Text】。 我们会看到窗口中,多了一个Canvas和Text: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ed7cccd.png) ### 2.让UI跟随物体移动 由于我们要创建的UI是属于BugPlayer的,所以,首先要把整个Canvas拖动到BugPlayer身上: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ed8fe3c.png) 此时的Canvas虽然是在BugPlayer之下,但是…它的心是不属于BugPlayer的,它是属于[摄像机](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=930fbe77ee6efa13&k=%C9%E3%CF%F1%BB%FA&k0=%C9%E3%CF%F1%BB%FA&kdi0=0&luki=2&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=13fa6eee77be0f93&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2196&urlid=0)的。 要想Canvas随着物体移动,很简单,修改Canvas属性,如下图: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541eda2218.png) 将Canvas的Render Mode属性改为【World Space】,很好,这样UI就能跟着物体移动了(具体原理不解释)。 此时的Canvas十分庞大,也许是我们的场景太小了。 没关系,我们修改Canvas的属性,让它的Scale变小一些: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541edb65dc.png) 由于UI是平面的,所以只需要缩小X和Y,Z可以忽略(Z:特么的….) 我还偷偷把Canvas的X、Y、Z坐标设为0了,因为这样它才会出现在BugPlayer的正中心。 ### 3.调整UI大小和样式 接下来的操作有些小繁琐,我只能用gif图来展示了: ![u009_5.gif](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541edd056a.gif) 我只要做了几件事情: a.把Text的高度修改为50 b.把Text的文本内容改为“我很好” c.把Text的字体大小改为25 d.把Text的颜色改为红色 现在,运行[游戏](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=930fbe77ee6efa13&k=%D3%CE%CF%B7&k0=%D3%CE%CF%B7&kdi0=0&luki=6&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=13fa6eee77be0f93&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2196&urlid=0),UI是能跟着BugPlayer移动的。 ![u009_6.gif](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ee223bb.gif) 现在UI的方向不对,我们可以把Canvas旋转一下,让方向变正确,这个我就不演示了,大家自己折腾。 ### 4.在代码中操作UI 最后要做的事情,就是在代码里操作UI了。 其实和操作物体是差不多的,主要就是怎么找到这个UI,之前所说的各种找GameObject方式都可以用在UI身上。 不过,这次,我们有稍微一点点的不同。 打开BugPlayerLogic脚本,加上一个属性和两个[函数](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=930fbe77ee6efa13&k=%BA%AF%CA%FD&k0=%BA%AF%CA%FD&kdi0=0&luki=5&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=13fa6eee77be0f93&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2196&urlid=0),如下所说: ~~~ 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](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ee40a2d.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.[game](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=930fbe77ee6efa13&k=game&k0=game&kdi0=0&luki=7&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=13fa6eee77be0f93&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2196&urlid=0)Object.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.[game](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=930fbe77ee6efa13&k=game&k0=game&kdi0=0&luki=7&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=13fa6eee77be0f93&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2196&urlid=0)Object.transform.position.z            );            playerLogic.ZChange();        }    } ~~~ 只需修改OnTriggerEnter函数。 我做了什么事情呢?我调用了other.[game](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=930fbe77ee6efa13&k=game&k0=game&kdi0=0&luki=7&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=13fa6eee77be0f93&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2196&urlid=0)Object的GetComponent函数,这个函数可以获取GameObject上的组件对象。 这是很强大的功能,我们只要拥有了GameObject对象,就可以获取到它所有的[组件](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=930fbe77ee6efa13&k=%D7%E9%BC%FE&k0=%D7%E9%BC%FE&kdi0=0&luki=4&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=13fa6eee77be0f93&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2196&urlid=0)对象了。 既然已经能获取BugPlayerLogic对象了,那自然可以调用它的函数了。 我们在不同的if条件里分别调用了XChange和ZChange[函数](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=930fbe77ee6efa13&k=%BA%AF%CA%FD&k0=%BA%AF%CA%FD&kdi0=0&luki=5&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=13fa6eee77be0f93&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2196&urlid=0)。 OK,运行[游戏](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=930fbe77ee6efa13&k=%D3%CE%CF%B7&k0=%D3%CE%CF%B7&kdi0=0&luki=6&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=13fa6eee77be0f93&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2196&urlid=0),看看我们的效果吧: ![u009_8.gif](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ee5d533.gif) 哦,对不起,我玩得太入迷了,一不小心[多玩](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=930fbe77ee6efa13&k=%B6%E0%CD%E6&k0=%B6%E0%CD%E6&kdi0=0&luki=1&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=13fa6eee77be0f93&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2196&urlid=0)了一会。 细心的笨蛋一定已经发现了,好像有些文字没有显示出来,这是因为Text的宽度不够大,这个大家自己解决,太简单,不想说。 ### 5.结束 特么的,终于结束了。 这个Demo结束了,木头的Unity入门之旅系列教程也结束了,耗时将近一个月。 我相信,对于入门,这些知识已经够用了,接下来就需要大家自己去折腾,去看其他的教程了。 Unity其实入门是很难的,我是指入门的前几天,拖几个物体、建个场景当然很轻松,但想真正写一个Demo级别的[小游戏](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=930fbe77ee6efa13&k=%D0%A1%D3%CE%CF%B7&k0=%D0%A1%D3%CE%CF%B7&kdi0=0&luki=3&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=13fa6eee77be0f93&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2196&urlid=0),似乎都会很迷茫。 而度过前面的几天之后,其实就轻松多了,习惯了Unity的操作方式,看教程也会容易理解很多。 但,入门后的1个月、2个月、1年、2年,也许会越来越难,毕竟,Unity太强大了,有很多东西值得去研究。 请原谅木头精力有限,无法持续输出教程,最近公司也到了比较紧张的时期,我得多花心思在公司上面。 OK,很高兴我能坚持完成这个系列的教程(虽然后面几篇有点乏力),希望以后还能继续多写教程。 如果大家有什么想要了解的,也不妨给我留言,我尝试去折腾,然后写成教程。 太难的就别为难我了,毕竟我还处于Unity初级阶段。 以上。 本篇源码:[Unity_benmutou_010.7z](http://www.benmutou.com/wp-content/uploads/2015/11/wpid-a0749d0b9d58504b74a1b7d2c8e121f7_Unity_benmutou_010.7z)[](#)
';

09:Demo之四处找死(四)_在代码里操作物体

最后更新于:2022-04-01 14:37:42

有没有发现越往后写,旁白出现的次数越少? 是的,最近公司出了点小问题,思绪就变得沉重了一些,思绪一沉重,我的精神分裂就很难发作。 不唠叨了,这次我们来试试在代码里操作物体吧,很简单很简单的。 > 笨木头花心贡献,啥?花心?不,是用心。 > 转载请注明,原文地址:[http://www.benmutou.com/archives/2176](http://www.benmutou.com/archives/2176) > 文章来源:[笨木头与游戏开发](http://www.benmutou.com/blog/) ### 1.找遍全世界,只为了发现你——FindGameObjectWithTag 还记得很早之前我们介绍的Tag吗?我知道你们肯定不记得的。 先给我们的BugPlayer设置一个Tag吧,如下操作: ![u009_1.gif](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ec655a9.gif) OK,Tag只是物体身上的一个属性,我们可以利用这个属性做自己想做的事情。(小若:嘿嘿嘿,真的吗?) 别做怪怪的事情就好了... Unity本身封装了一些针对Tag的操作,是的,包括在全世界中搜索某个Tag的物体。 打开脚本文件SomethingGGD,在OnTriggerEnter函数里加上两句代码: ~~~   void OnTriggerEnter(Collider other)    {        Debug.Log(“OnTriggerEnter”);        GameObject obj = GameObject.FindGameObjectWithTag(“BugPlayer”);        obj.SetActive(false);    } ~~~ 利用FindGameObjectWithTag函数,可以在整个场景里查找Tag等于某个值的物体。 这是一个静态函数。 当然,Tag等于某个值的物体可以不止一个,因为Tag的值是可以随意设置的,因此也有FindGameObjectsWithTag函数,可以查找所有满足Tag值的物体,返回一个数组。 (小若:那,如果有很多个具有Tag=”BugPlayer”的物体呢?用FIndGameObjectWithTag会怎么样?) 如果拥有某个Tag属性的物体有多个,而你特么的又故意用FindGameObjectWithTag来查找单个物体,那就等着出Bug吧,我可不知道会发生什么。 留意第二句代码:obj.SetActive(false),这句代码会把物体变成非活动状态,这样就会就不会在场景中出现,也不会参与场景中的各种事件。就好像,它死了,但灵魂还在。 我们来看看效果: ![u009_2.gif](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ec8496c.gif) BugPlayer撞到地雷的时候,立刻就消失了。 怎么样?我这地雷质量不错吧?明天给你家门口装一个,免费的哈。 ### 2.把你装在心里,随时都能…灭了你——将物体作为属性保存 除了使用Find**(特么的这函数名字太长,我不想写)来查找物体之外,还有一个更偷懒的方法。 首先,给SomethingGGD脚本加上一个属性,顺便修改OnTriggerEnter函数,如下所示: ~~~ public class SomethingGGD : MonoBehaviour {    public GameObject bugPlayer = null;    void OnTriggerEnter(Collider other)    {        Debug.Log(“OnTriggerEnter”);        bugPlayer.SetActive(false);    } } ~~~ 很简单,bugPlayer作为SomethingGGD的一个属性,我随时可以调用它。 等等,这个属性在哪里赋值呢?这是个好问题。(小若:特么就没人问你) 我们来看看Unity编辑器,每次修改完代码,回到编辑器时,它都会编译代码,所以要稍等一会。 然后点击Sphere,看看它的属性: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ec9c5d1.png) 有没有发现什么? 是的,SomethingGGD里多了一个BugPlayer属性,而且它右边还有一个框框,看起来好像可以拖东西进去。 在Unity里就是这样,看起像的东西,那么它一定就是了。 脚本里的Public属性,是可以出现在编辑里的,而且可以直接拖动赋值。 我们把BugPlayer拖动到这个属性里吧: ![u009_3.gif](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ecbb134.gif) 拖动物体的时候,在到达位置之前,一定不要松开鼠标,否则就会变成选中这个物体了。 OK,运行游戏,效果和之前是一毛一样的。 ### 3.特么的对不起,我一直在骗你——Collider参数 各位,其实我刚刚说的两种方式,完全不适合在这里使用,为什么呢? 因为在两个彭撞器发生碰撞的时候,它们是能相互知道对方是谁的。 既然如此,我们根本就不需要去这么辛苦地查询。 忘记刚刚的那些操作,我们在OnTriggerEnter函数里写上这么一句代码: ~~~   void OnTriggerEnter(Collider other)    {        Debug.Log(“OnTriggerEnter”);        other.gameObject.SetActive(false);    } ~~~ OnTriggerEnter函数本身就有一个Collider参数,这个参数就是和我这个碰撞器发生碰撞的碰撞器对象。 碰撞器是一个Collider,Collider只是物体身上的一个组件,所以,Collider的gameObject就是那个和我产生碰撞的物体。 于是,仅仅需要调用:other.gameObject.SetActivie(false) 就能让这个和我产生碰撞的物体消失。 ### 4.更多好玩的 现在, 地雷已经能操作BugPlayer了,那就很多东西可以玩了。 我们试试把OnTriggerEnter函数改成这样: ~~~   void OnTriggerEnter(Collider other)    {        Debug.Log(“OnTriggerEnter”);        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            );        }        else        {            other.gameObject.transform.position = new Vector3(            other.gameObject.transform.position.x + 20,            other.gameObject.transform.position.y,            other.gameObject.transform.position.z            );        }    } ~~~ 这样就有随机效果了,随机改变BugPlayer的x或z坐标。 为什么要有随机效果?因为我们要创建多个地雷了。 还记得怎么复制物体吗?Ctrl+D,我们多复制几个地雷,摆满场景: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ed1a38b.jpg) 我们复制出来的地雷和原来的是一毛一样的,地雷的所有逻辑都存在。 这是很爽的事情,我们只需配好一个物体,就能制作一堆相同的物体了。 现在,运行游戏,让BugPlayer踩地雷去吧。 ![u009_4.gif](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ed32d4a.gif) 我发现这主角还蛮难控制的…. ### 5待续 好了,这个Demo的主要功能已经完成了。 下一篇,也是最后一篇,我们给BugPlayer加上UI 本篇源码: [Unity_benmutou_009](http://www.benmutou.com/wp-content/uploads/2015/11/Unity_benmutou_009.7z) 有没有发现越往后写,旁白出现的次数越少? 是的,最近公司出了点小问题,思绪就变得沉重了一些,思绪一沉重,我的精神分裂就很难发作。 不唠叨了,这次我们来试试在代码里操作物体吧,很简单很简单的。 > **笨木头花心贡献,啥?花心?不,是用心。** > **转载请注明,原文地址:[http://www.benmutou.com/archives/2176](http://www.benmutou.com/archives/2176)** > **文章来源:[笨木头与游戏开发](http://www.benmutou.com/blog/)** ### 1.找遍全世界,只为了发现你——FindGameObjectWithTag 还记得很早之前我们介绍的Tag吗?我知道你们肯定不记得的。 先给我们的BugPlayer设置一个Tag吧,如下操作: ![u009_1.gif](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ec655a9.gif) OK,Tag只是物体身上的一个属性,我们可以利用这个属性做自己想做的事情。(小若:嘿嘿嘿,真的吗?) 别做怪怪的事情就好了... Unity本身封装了一些针对Tag的操作,是的,包括在全世界中搜索某个Tag的物体。 打开脚本文件SomethingGGD,在OnTriggerEnter函数里加上两句代码: ~~~   void OnTriggerEnter(Collider other)    {        Debug.Log(“OnTriggerEnter”);        GameObject obj = GameObject.FindGameObjectWithTag(“BugPlayer”);        obj.SetActive(false);    } ~~~ 利用FindGameObjectWithTag函数,可以在整个场景里查找Tag等于某个值的物体。 这是一个静态函数。 当然,Tag等于某个值的物体可以不止一个,因为Tag的值是可以随意设置的,因此也有FindGameObject**s**WithTag函数,可以查找所有满足Tag值的物体,返回一个数组。 (小若:那,如果有很多个具有Tag=”BugPlayer”的物体呢?用FIndGameObjectWithTag会怎么样?) 如果拥有某个Tag属性的物体有多个,而你特么的又故意用FindGameObjectWithTag来查找单个物体,那就等着出Bug吧,我可不知道会发生什么。 留意第二句代码:obj.SetActive(false),这句代码会把物体变成非活动状态,这样就会就不会在场景中出现,也不会参与场景中的各种事件。就好像,它死了,但灵魂还在。 我们来看看效果: ![u009_2.gif](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ec8496c.gif) BugPlayer撞到地雷的时候,立刻就消失了。 怎么样?我这地雷质量不错吧?明天给你家门口装一个,免费的哈。 ### 2.把你装在心里,随时都能…灭了你——将物体作为属性保存 除了使用Find**(特么的这函数名字太长,我不想写)来查找物体之外,还有一个更偷懒的方法。 首先,给SomethingGGD脚本加上一个属性,顺便修改OnTriggerEnter函数,如下所示: ~~~ public class SomethingGGD : MonoBehaviour {    public GameObject bugPlayer = null;    void OnTriggerEnter(Collider other)    {        Debug.Log(“OnTriggerEnter”);        bugPlayer.SetActive(false);    } } ~~~ 很简单,bugPlayer作为SomethingGGD的一个属性,我随时可以调用它。 等等,这个属性在哪里赋值呢?这是个好问题。(小若:特么就没人问你) 我们来看看Unity编辑器,每次修改完代码,回到编辑器时,它都会编译代码,所以要稍等一会。 然后点击Sphere,看看它的属性: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ec9c5d1.png) 有没有发现什么? 是的,SomethingGGD里多了一个BugPlayer属性,而且它右边还有一个框框,看起来好像可以拖东西进去。 在Unity里就是这样,看起像的东西,那么它一定就是了。 脚本里的Public属性,是可以出现在编辑里的,而且可以直接拖动赋值。 我们把BugPlayer拖动到这个属性里吧: ![u009_3.gif](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ecbb134.gif) 拖动物体的时候,在到达位置之前,一定不要松开鼠标,否则就会变成选中这个物体了。 OK,运行游戏,效果和之前是一毛一样的。 ### 3.特么的对不起,我一直在骗你——Collider参数 各位,其实我刚刚说的两种方式,完全不适合在这里使用,为什么呢? 因为在两个彭撞器发生碰撞的时候,它们是能相互知道对方是谁的。 既然如此,我们根本就不需要去这么辛苦地查询。 忘记刚刚的那些操作,我们在OnTriggerEnter函数里写上这么一句代码: ~~~   void OnTriggerEnter(Collider other)    {        Debug.Log(“OnTriggerEnter”);        other.gameObject.SetActive(false);    } ~~~ OnTriggerEnter函数本身就有一个Collider参数,这个参数就是和我这个碰撞器发生碰撞的碰撞器对象。 碰撞器是一个Collider,Collider只是物体身上的一个组件,所以,Collider的gameObject就是那个和我产生碰撞的物体。 于是,仅仅需要调用:other.gameObject.SetActivie(false) 就能让这个和我产生碰撞的物体消失。 ### 4.更多好玩的 现在, 地雷已经能操作BugPlayer了,那就很多东西可以玩了。 我们试试把OnTriggerEnter函数改成这样: ~~~   void OnTriggerEnter(Collider other)    {        Debug.Log(“OnTriggerEnter”);        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            );        }        else        {            other.gameObject.transform.position = new Vector3(            other.gameObject.transform.position.x + 20,            other.gameObject.transform.position.y,            other.gameObject.transform.position.z            );        }    } ~~~ 这样就有随机效果了,随机改变BugPlayer的x或z坐标。 为什么要有随机效果?因为我们要创建多个地雷了。 还记得怎么复制物体吗?Ctrl+D,我们多复制几个地雷,摆满场景: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ed1a38b.jpg) 我们复制出来的地雷和原来的是一毛一样的,地雷的所有逻辑都存在。 这是很爽的事情,我们只需配好一个物体,就能制作一堆相同的物体了。 现在,运行游戏,让BugPlayer踩地雷去吧。 ![u009_4.gif](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ed32d4a.gif) 我发现这主角还蛮难控制的…. ### 5待续 好了,这个Demo的主要功能已经完成了。 下一篇,也是最后一篇,我们给BugPlayer加上UI 本篇源码: [Unity_benmutou_009](http://www.benmutou.com/wp-content/uploads/2015/11/Unity_benmutou_009.7z)
';

08:Demo之四处找死(三)_触发器

最后更新于:2022-04-01 14:37:40

好了,游戏开始进入奇怪的阶段了,接下来我们要在场景里放上地雷,终结这个帅气的BugPlayer吧。 > 笨木头花心贡献,啥?花心?不,是用心。 > 转载请注明,原文地址:[http://www.benmutou.com/archives/2157](http://www.benmutou.com/archives/2157) > 文章来源:[笨木头与游戏开发](http://www.benmutou.com/blog/) ### 1.Sphere物体 除了Cube(立方体)之外,我们还可以创建很多种形状的物体。 这里我们需要做一个地雷,地雷是有一个杀伤范围的,或者叫做触发范围,也就是说,特么的判断你是否踩到我了。 通常范围的判断都是用圆形的,而在3D的世界里,就是一个立体的圆形。 所以,我们需要创建一个球体——Sphere。 和创建Cube的方式一毛一样:【Hierarchy】-【3D Object】-【Sphere】 如图: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541af64b84.jpg) 但是有一个小细节,我们要在Terrain上面点击右键来创建这个物体,这样物体就创建到地形下面了。 还记得当时创建Cube时的情况吗?它会跑到世界的某个角落,很难找,所以我们要把它创建到Terrian的角落。 ### 2.移动球体到BugPlayer的附近 OK,把球体移动到合适的位置,离BugPlayer近一些。 大家看我的操作,移动物体是有个小技巧的,不需要通过箭头来移动,而是通过物体的某个“面”来移动。 大家自己感受吧: ![u008_1.gif](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541af793f8.gif) ### 3.地雷和球体有什么关系? 也许大家觉得很奇怪,地雷为什么要用球体来实现? 这是因为,地雷的技能(自爆)是由外界来触发的,特么的你踩我了,我这暴脾气就出来了,这就是自爆。(小若:特么的好有道理) 而触发某个事件需要触发器,并且需要一个范围,刚刚已经解释了,用球体作为范围来判断是否触发事件,是比较合适的。 当然,你喜欢正方体也行、不规则形状也行,越复杂的形状,会越消耗性能。 ### 4.触发器 刚刚我们提到了触发器,这是[游戏开发](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=55bc1c28ae1ac20&k=%D3%CE%CF%B7%BF%AA%B7%A2&k0=%D3%CE%CF%B7%BF%AA%B7%A2&kdi0=0&luki=5&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=20ace18ac2c15b05&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2157&urlid=0)里一个很重要的东西。 而Cube、Sphere等物体都是自带触发器的,正确地说,是碰撞器。 我们先来看看Sphere的碰撞器,如图: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541af99f13.png) 碰撞器也是物体的一个[组件](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=55bc1c28ae1ac20&k=%D7%E9%BC%FE&k0=%D7%E9%BC%FE&kdi0=0&luki=3&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=20ace18ac2c15b05&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2157&urlid=0),记住,一切都是组件。 Sphere物体的碰撞器就叫做【Sphere Collider】,Cube的碰撞器就叫做【Cube Collider】,只是形状不一样。 不知道大家发现了没有,我偷偷在【Is Trigger】的属性里打勾了。(小若:没看见,被奇怪的东西挡住了) 这个属性是关键,只有勾上这个属性,【碰撞器】才能真正的称之为【触发器】。 有了Is Trigger属性之后,碰撞器就能检查到是否有物体进入了它的范围,并且会触发回调函数。 而我们只需要在回调函数里做我们想做的事情。 ### 5.触发器事件函数 现在这个地雷是假的,因为它没有任何实际效果,要想有实际效果,就得给它一个AI,没错,我们得给它加个脚本。 新建一个脚本文件,[命名](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=55bc1c28ae1ac20&k=%C3%FC%C3%FB&k0=%C3%FC%C3%FB&kdi0=0&luki=1&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=20ace18ac2c15b05&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2157&urlid=0)为..SomethingGGD吧,一些怪怪的东西。 然后把脚本拖到Sphere物体上。 打开SomethingGGD脚本,加入以下三个函数: ~~~ public class SomethingGGD : MonoBehaviour {    void Start()    {        Debug.Log("Start");    }    void OnTriggerEnter(Collider other)    {        Debug.Log("OnTriggerEnter");    }    void OnTriggerStay(Collider other)    {        Debug.Log("OnTriggerStay");    }    void OnTriggerExit(Collider other)    {        Debug.Log("OnTriggerExit");    }} ~~~ Start:这个[函数](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=55bc1c28ae1ac20&k=%BA%AF%CA%FD&k0=%BA%AF%CA%FD&kdi0=0&luki=2&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=20ace18ac2c15b05&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2157&urlid=0)在这里是多余的,只是为了验证这个脚本是否生效了。 OnTriggerEnter:当有物体进入我的[触发器](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=55bc1c28ae1ac20&k=%B4%A5%B7%A2%C6%F7&k0=%B4%A5%B7%A2%C6%F7&kdi0=0&luki=6&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=20ace18ac2c15b05&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2157&urlid=0)范围时调用; OnTriggerStay:当物体在我的触发器范围内停留时,一直调用; OnTriggerExit:当物体离开我的[触发器](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=55bc1c28ae1ac20&k=%B4%A5%B7%A2%C6%F7&k0=%B4%A5%B7%A2%C6%F7&kdi0=0&luki=6&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=20ace18ac2c15b05&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2157&urlid=0)范围时调用。 三个函数都很好理解,不多说了。 重点是下面要做的事情。 ### 6.让主角去触发 触发器 我们试试主角现在进入地雷范围时,会不会触发这些函数。 但,在这之前,我们的Sphere有点小,几乎看不到它了,把Sphere的Scale属性设大一些,就设为(10,10,10)吧: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541afb3947.png) OK,运行游戏,看看主角是否能触发这些函数,在运行游戏时,左下角会出现一些日志。 而我们在代码里调用Debug.Log()[函数](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=55bc1c28ae1ac20&k=%BA%AF%CA%FD&k0=%BA%AF%CA%FD&kdi0=0&luki=2&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=20ace18ac2c15b05&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2157&urlid=0)就可以在这个地方打印日志。 现在运行游戏,可以看到日志“Start”,证明这个SomethingGGD脚本是已经在运作的,如图: ![u008_2.gif](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ebd521a.gif) 但是当我们尝试让主角去撞地雷的时候,却没有任何新的日志输出,这就代表触发器没生效,这是为什么呢? 因为我们的主角并不是一个“刚体”,也就是说,主角不是一个物理对象。 只有物理对象才有碰撞的说法,只有碰撞了才能让触发器生效。 ### 7.给主角添加刚体组件 我们先来给主角添加一个刚体组件: ![u008_3.gif](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ebf2e61.gif) 添加了刚体组件之后,主角就具备一些物体特性了,但实际上我们不需要主角模拟物体特性,我们只是要它能产生碰撞而已。 所以我在创建了刚体组件后,把【Use Gravity】属性的勾给去掉了,这个属性代表主角是否受重力影响。 如果主角受重力影响,那么,主角会一直往下掉的。 OK,再次运行[游戏](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=55bc1c28ae1ac20&k=%D3%CE%CF%B7&k0=%D3%CE%CF%B7&kdi0=0&luki=4&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=20ace18ac2c15b05&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2157&urlid=0),让主角去撞地雷,这次就能出现日志了: ![u008_4.gif](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ec26090.gif) ### 8.碰撞器 我们一直在说的[触发器](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=55bc1c28ae1ac20&k=%B4%A5%B7%A2%C6%F7&k0=%B4%A5%B7%A2%C6%F7&kdi0=0&luki=6&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=20ace18ac2c15b05&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2157&urlid=0),其实是碰撞器,碰撞是需要两个碰撞器相互产生的。 如果大家有留意的话,应该能发现BugPlayer身上也是有一个碰撞器(Collider)的: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ec476bf.png) 如果把这个碰撞器从主角身上移除,那么,地雷的碰撞器也就无法发现主角了。 我们来理一理: 1. 要产生碰撞,需要双方都有一个碰撞器,因为这是判断物体是否碰撞的依据,可以理解为,这是一个碰撞范围。 2. 碰撞器只是判断是否碰撞的依据,但是要真正触发碰撞事件,则必须至少有一个物体是具备刚体[组件](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=55bc1c28ae1ac20&k=%D7%E9%BC%FE&k0=%D7%E9%BC%FE&kdi0=0&luki=3&mcpm=0&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=20ace18ac2c15b05&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2157&urlid=0)的。 3. 总结:至少存在一个刚体时,才能触发碰撞事件,而判断物体是否碰撞的依据是碰撞器(碰撞器的碰撞范围是可以调整的,比如球体形、立方体形、不规则形状) 好了,关于碰撞,还是需要慢慢理解的,我也只是处于初步了解的状态,不多说。 ### 9.待续 这一篇写得有点多,下次我们来实现什么功能好呢? 要不,我们来炸死主角吧。 本篇源码:[Unity_benmutou_008.7z](http://www.benmutou.com/wp-content/uploads/2015/11/wpid-90d41d8ecb5577b5fa88cb400af14f1c_Unity_benmutou_008.7z)[](#)
';

07:Demo之四处找死(二)_主角移动和旋转

最后更新于:2022-04-01 14:37:38

上一篇我们仅仅是创建了场景和主角,暂时不具备任何玩法。 这次,我们来看看怎么让主角移动起来。 > 笨木头花心贡献,啥?花心?不,是用心。 > 转载请注明,原文地址:[http://www.benmutou.com/archives/2131](http://www.benmutou.com/archives/2131) > 文章来源:[笨木头与游戏开发](http://www.benmutou.com/blog/) ### 1.Update,又是Update 似乎[游戏开发](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=a5cc34bc97dc9175&k=%D3%CE%CF%B7%BF%AA%B7%A2&k0=%D3%CE%CF%B7%BF%AA%B7%A2&kdi0=0&luki=4&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=7591dc97bc34cca5&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2131&urlid=0)里总是无法离开Update,我现在的工作不是游戏开发,没法使用Update,导致我非常不习惯。 Update是什么?我们把游戏想象成一个大的while循环,每一次循环都会调用一次Update函数。 而我们就可以在Update函数里做一些乱七八糟的事情。 比如,每一次Update就让角色的x坐标+1,于是,很多次Update的调用连起来之后,角色就在移动了。 总而言之,Update是我们经常会用到了,很重要的东西,这里不多解释了。 ### 2.别急,先给BugPlayer上色 因为BugPlayer现在是白色,不方便演示,我们就先来给它上色吧。 在【Project】创建右键,依次点击【Create】->【Material】,命名为PlayerMaterial。 这样就创建了一个材质,接着修改材质的颜色,然后把材质拖到BugPlayer身上,如: ![u006_3.gif](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ae993c9.gif) 由于我在录制Gif之前就已经把材质拖到BugPlayer身上了,所以这一步我就没演示了,和拖脚本是一毛一样的。 ### 3.前后移动 OK,要开始移动了,跟紧了。 打开BugPlayerLogic脚本,修改Update[函数](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=a5cc34bc97dc9175&k=%BA%AF%CA%FD&k0=%BA%AF%CA%FD&kdi0=0&luki=5&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=7591dc97bc34cca5&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2131&urlid=0),现在脚本的内容应该是这样的: 1. ~~~ public class BugPlayerLogic : MonoBehaviour {    void Start () { }       void Update ()    {        if (Input.GetAxis("Vertical") != 0)        {            this.gameObject.transform.position += this.gameObject.transform.forward * Input.GetAxis("Vertical");        }    }} ~~~ Input类用于获取各种输入,包括键盘、鼠标等。 而Input.GetAxis(“Vertical”)代表获取垂直方向上的输入,在电脑上就是W和S键,分别代表正负方向。 下面一一解释: A. this.gameObject 我们要注意了,BugPlayerLogic是一个脚本,它是BugPlayer身上的一个组件,并不是BugPlayer本身。 所以,我们要通过this.gameObject来获取当前脚本所属的obj对象。 理论上来说,一个组件只能有一个GameObject,但由于我是[新手](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=a5cc34bc97dc9175&k=%D0%C2%CA%D6&k0=%D0%C2%CA%D6&kdi0=0&luki=1&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=7591dc97bc34cca5&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2131&urlid=0),所以,不敢乱说。 B. transform GameObject的transform是什么呢?这个最简单了,就是obj对象的位置属性,包括坐标、旋转角度、缩放。 C. transform.position 既然transform包括坐标属性,position自然就是它的坐标属性了。 那么,this.[game](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=a5cc34bc97dc9175&k=game&k0=game&kdi0=0&luki=3&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=7591dc97bc34cca5&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2131&urlid=0)Object.transform.position += XXX; 又是什么鬼? 这代表给坐标加上一个坐标,比如我当前坐标是(10,0),加上(1,0)就变成了(11,0)了。 当然,由于这是3D坐标,实际上是有X、Y、Z的。 (Z:特么的我终于不用被忽略了) (小若:不,它举例的时候还是特意的完全把你忽略了。) 特么的,我是“他”,不是“它”! D. transform.forward 这个forward又是什么呢?顾名思义,它是物体的正方向、正前方。 物体的正前方就是它的Z轴的方向,当我们希望物体忘正前方移动的时候,当然就是要加上正前方的坐标了。 而this.[game](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=a5cc34bc97dc9175&k=game&k0=game&kdi0=0&luki=3&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=7591dc97bc34cca5&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2131&urlid=0)Object.transform.forward * Input.GetAxis(“Vertical”),就是让这个正前方的位移更大一些(根据输入的值来变化)。 关于坐标,应该也是需要研究一番的,我目前还没很熟悉,所以,不多了,免得误导了大家。 OK,总而言之,你记住,向前和向后移动,就是上面那一句代码。 来看看效果: ![u006_4.gif](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541aed7262.gif) 大家实际上可能会发现,按w键的时候,它往后移动了,这是因为我们的摄像机正对着BugPlayer的正方向了。 停止运行[游戏](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=a5cc34bc97dc9175&k=%D3%CE%CF%B7&k0=%D3%CE%CF%B7&kdi0=0&luki=2&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=7591dc97bc34cca5&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2131&urlid=0),把BugPlay旋转一下: ![u006_5.gif](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541aeee3fb.gif) 按下快捷键E就可以进入到旋转模式(或者点击左上方的旋转按钮),我们要绕着Y轴旋转,所以要按住绿色的那条圈,然后拖动鼠标。 大家自己尝试吧,习惯就好了。 ### 4.左右旋转 特么的主角当然不能只会前进后退了,还得左右转向。 这个更简单,打开BugPlayerLogic脚本,继续修改Update[函数](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=a5cc34bc97dc9175&k=%BA%AF%CA%FD&k0=%BA%AF%CA%FD&kdi0=0&luki=5&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=7591dc97bc34cca5&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2131&urlid=0): 1. ~~~   void Update ()    {        /* 旋转镜头 */        if (Input.GetAxis("Horizontal") != 0)        {            transform.Rotate(new Vector3(0, Input.GetAxis("Horizontal"), 0));        }        if (Input.GetAxis("Vertical") != 0)        {            //this.gameObject.transform.position += this.gameObject.transform.forward * Input.GetAxis("Vertical") * 10 * Time.deltaTime;            this.gameObject.transform.position += this.gameObject.transform.forward * Input.GetAxis("Vertical");        }    } ~~~ 既然Input.GetAxis(“Vertical”)是获取垂直方向上的输入,那么,Input.GetAxis(“Horizontal”)自然就是获取水平方向的输入了。 在选中BugPlayer的时候,我们就能看到它的三个方向的箭头: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541af32044.jpg) 看看箭头的颜色,再对比右上角的XXX(小若:XXX是什么鬼啊?) 我不知道右上角的那个XXX叫什么名字,叫做方向图例?随便吧。 总之,看看不同颜色的箭头,分别标注了X、Y等文字,代表这个颜色的箭头是哪个方向的。(Z:别烦我,我想静静地思考一下…特么的我就这么让作者讨厌?) 很明显,BugPlayer的垂直方向是Y轴,如果我们要旋转BugPlayer,是不是应该绕着Y轴旋转? 千万不要告诉我,因为是水平方向的旋转,所以要绕着X轴或者Z轴什么的,我不想和你们说话。 于是,代码中的tranform.rotate就是用来旋转物体的,而Vector3代表的是三维坐标,由于只需要旋转Y轴,所以X和Z的值都是0. OK,运行[游戏](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=a5cc34bc97dc9175&k=%D3%CE%CF%B7&k0=%D3%CE%CF%B7&kdi0=0&luki=2&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=7591dc97bc34cca5&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2131&urlid=0),看看效果: ![u006_6.gif](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541af4df50.gif) 不好意思,这车倒得有点歪了,没关系…车位挺多的… ### 5.待续 好了,本篇到此结束。 下一篇,我们来玩些什么呢,要不,我们开始在场景里设置一些奇怪的东西吧? 本篇源码:[Unity_benmutou_007](http://www.benmutou.com/wp-content/uploads/2015/11/Unity_benmutou_007.7z)
';

06:Demo之四处找死(一)_场景和主角

最后更新于:2022-04-01 14:37:36

终于把一些基本的东西介绍完了,我不想再介绍无聊的菜单和快捷键了,这些东西大家自己在折腾的过程中慢慢熟悉就好。 有什么不懂的就问度娘,不喜欢度娘的,可以找谷歌。 这次,我们来开始一个很简单的Demo,我突然想到一个游戏,又或者只能叫做Demo。 一个人物,可以四处走动,地图上有很多暗雷,踩到之后会随机产生一些效果(比如加血、掉血、增加防御、小若失去吐槽能力等等)。 人物身上当然得有一些UI,这些UI会跟随着人物一起走动。 虽然是个小Demo,但,入门所需的各种操作应该都涉及到了,包括:人物走动(不含动画)、[触发器](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=d5d39a021acceeda&k=%B4%A5%B7%A2%C6%F7&k0=%B4%A5%B7%A2%C6%F7&kdi0=0&luki=7&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=daeecc1a29ad3d5&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2110&urlid=0)、UI、代码里创建和修改物体。 好,我们开始吧。(小若:等等,失去吐槽能力又是什么鬼?) > 笨木头花心贡献,啥?花心?不,是用心。 > 转载请注明,原文地址:[http://www.benmutou.com/archives/2110](http://www.benmutou.com/archives/2110) > 文章来源:[笨木头与游戏开发](http://www.benmutou.com/blog/) ### 1.场景,摄像机定位 先创建一个项目,我命名为【Unity_benmutou_006】,你们随意。 然后创建一个场景:【Hierarchy】->【右键】->【3D Object】->【Terrain】 地形大小设置为【200X200】就可以了,如果大家忘了怎么创建地形、怎么设置地形大小,请回顾这篇教程:[http://www.benmutou.com/archives/2063](http://www.benmutou.com/archives/2063) 还记得我们常用的快捷键【QWERT】吗?上一篇刚讲过的,我不想重复了。 现在发挥你的所有能力,把新建的场景移动到编辑器的中间,比如: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ae0da09.jpg) 试试现在运行游戏,能不能看到我们的场景?(小若:我感觉我看到你妹妹了) 是的,大家是看不到场景的,但是也不能用粗口骂我… 重要的操作来了,让场景出现在[摄像头](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=d5d39a021acceeda&k=%C9%E3%CF%F1%CD%B7&k0=%C9%E3%CF%F1%CD%B7&kdi0=0&luki=4&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=daeecc1a29ad3d5&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2110&urlid=0)的中间: 单击选中【Main Camera】物体(在Hierarchy窗口); 依次点击菜单【GameObject】->【Align With View】; 再次运行游戏,就能看到我们的场景了。 这个功能是用来把物体[定位](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=d5d39a021acceeda&k=%B6%A8%CE%BB&k0=%B6%A8%CE%BB&kdi0=0&luki=8&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=daeecc1a29ad3d5&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2110&urlid=0)到当前视图位置的,所以,选中摄像机,然后定位,摄像机就会跑到当前[编辑器](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=d5d39a021acceeda&k=%B1%E0%BC%AD%C6%F7&k0=%B1%E0%BC%AD%C6%F7&kdi0=0&luki=5&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=daeecc1a29ad3d5&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2110&urlid=0)所看到的地方。 于是,场景就能出现在[摄像机](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=d5d39a021acceeda&k=%C9%E3%CF%F1%BB%FA&k0=%C9%E3%CF%F1%BB%FA&kdi0=0&luki=10&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=daeecc1a29ad3d5&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2110&urlid=0)的范围内,而摄像机决定了我们运行[游戏](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=d5d39a021acceeda&k=%D3%CE%CF%B7&k0=%D3%CE%CF%B7&kdi0=0&luki=9&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=daeecc1a29ad3d5&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2110&urlid=0)时能看到的东西,于是运行游戏才能看到场景。 这里的解释可能不太准确,但,目前这么理解是很帅的。(小若:我感觉和帅是完全没有关系咯) OK,按下[键盘](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=d5d39a021acceeda&k=%BC%FC%C5%CC&k0=%BC%FC%C5%CC&kdi0=0&luki=2&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=daeecc1a29ad3d5&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2110&urlid=0)的Ctrl+S,保存一下场景,保存到项目的Assets目录下,命名为[game](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=d5d39a021acceeda&k=game&k0=game&kdi0=0&luki=6&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=daeecc1a29ad3d5&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2110&urlid=0)。 ### 2.“人物” 接下来当然是要创建我们的主角了,我们这次不用Cube了,我们换一个帅一点的。 在【Hierarchy】上点击右键,依次点击【3D Object】->【Cube】,这样我们就创建了一个立方体了,它将作为我们的主角人物。 (小若:果然是帅了好多…啊个屁啊!还是Cube啊,你是要作死吗?作死吗?) 这时候,双击Cube,会发现Cube并不在场景里,而是自己孤零零地在某个角落。 没关系,我们把它放到场景里,因为操作比较繁琐,所以我用gif图来展示: ![u006_1.gif](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ae26958.gif) 先是把Cube移动到场景(Terrian)下,然后把Cube的位置(Transform)重置,这样Cube就会出现在场景的最角落。(小若:还是角落啊!) 虽然还是角落,但起码是场景的角落,而不是世界的角落。 OK,现在,再次双击Cube,找到它,然后把Cube移动到场景的适当位置,如: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ae475b9.jpg) 因为场景比较大,Cube比较小,大家可能会看不清它在哪…(小若:我知道,我们是瞎的) 我们可以把Cube放大一些,在Transform属性里有一个Scale属性,很明显,把x、y什么的设置成5吧。 (Z:明明就只有X、Y、Z,你就不能一次过说出来吗?为什么偏偏要忽略我!不就是一共三个字母吗?全写出来,很难吗?很难吗!?) OK,人物也搞定了。 不,等等,顺便把这个Cube重命名吧,在Hierarchy上选中Cube,然后按F2,就可以重命名了。 就叫做…“ BugPlayer”吧。(小若:能再随意一点不) ### 3.创建主角脚本 既然是主角,肯定是可以由[玩家](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=d5d39a021acceeda&k=%CD%E6%BC%D2&k0=%CD%E6%BC%D2&kdi0=0&luki=3&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=daeecc1a29ad3d5&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2110&urlid=0)来控制的,要想控制我们的Cube,不,现在叫做BugPlayer。 想要控制BugPlayer,就要有一个脚本来处理这些逻辑。 那么,在【Project】窗口上右键,依次点击【Create】->【C# Script】,然后把脚本命名为“BugPlayerLogic”。 最后,把脚本拖到BugPlayer身上,怎么拖?如果你忘记了,请自己瞎猜(小若:瞎猜你mei啊) 或者回头看看我之前写的教程。 好吧,还是偷偷告诉你们好了: ![u006_2.gif](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ae6668d.gif) 由于是Demo,我就不考虑目录的编排了,全部挤在一起就好了。 接下来,要打开新建的脚本文件了,打开的方式有两种: a.直接在Project窗口下双击脚本文件 b.在BugPlayer的属性里,双击脚本左边的小图标: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ae80929.png) 如果你有听我说的,安装了VS2015(社区版,是免费的),那么,就会自动启动VS,打开当前Unity项目的[解决方案](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=d5d39a021acceeda&k=%BD%E2%BE%F6%B7%BD%B0%B8&k0=%BD%E2%BE%F6%B7%BD%B0%B8&kdi0=0&luki=1&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=daeecc1a29ad3d5&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2110&urlid=0),顺便打开你双击的那个脚本文件。 打开后,你会看到里面只有一个Start和Update函数,先不用管它。 ### 4.待续 好了,下一篇我们再接着做,接下来做什么好呢?我想想..(小若:特么的你不是先想好了再写教程的吗?!) 我们就,让BugPlayer移动起来吧。 **本篇源码:**[**Unity_benmutou_006.7z**](http://www.benmutou.com/wp-content/uploads/2015/11/Unity_benmutou_006.7z)
';

05:正常人都要掌握的操作

最后更新于:2022-04-01 14:37:33

各位,对不起,我一直都很想快点进入代码的教程,但是不知道为什么,老是在编辑器这边徘徊。 这不,本篇又要介绍[编辑器](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=bf47491585e091bb&k=%B1%E0%BC%AD%C6%F7&k0=%B1%E0%BC%AD%C6%F7&kdi0=0&luki=2&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=bb91e085154947bf&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2089&urlid=0)了,唉。(小若:好可怜…个屁吖,还不是你自己要介绍的!) > 笨木头花心贡献,啥?花心?不,是用心。 > 转载请注明,原文地址:[http://www.benmutou.com/archives/2089](http://www.benmutou.com/archives/2089) > 文章来源:[笨木头与游戏开发](http://www.benmutou.com/blog/) ### 1.技能快捷键 呐,我们玩Dota的人呢,是绝对不能忘记一件事情的——那就是技能快捷键。 比如我们玩【阿木·辛格·娄】这个英雄,它的技能快捷键就是:QWERT。 记住这几个快捷键,拿一血就容易多了。(小若:好的,好的,我准备好了,那我负责中路?) 好的,那我负责上路..啊个屁啊!我们是在写教程好吗?(小若:又抢我台词..) OK,新建一个Unity项目,然后新建一个立方体Cube,别告诉我你忘了怎么建,我才不管你了… ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ad4ebdb.jpg) 选中新建的Cube,如上图,我们会看到Cube中间有三个箭头。 这三个箭头是用来移动物体的,分别对应三维坐标X、Y、Z。 至于谁是X谁是Y(Z:等等,那我呢?为什么要忽略我?),可以看看右上角的小图标: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ad629bc.png) 初学者很容易被三维坐标搞得晕头转向,不过没关系…晕着晕着就习惯了。 现在,分别按键盘上的Q、W、E、R、T键,每按一个键,就看看物体发生了什么变化,并且尝试去操作那些变化后的东西。 如果你没法发现这几个技能键的各个用处,那么…请你滚粗好吗?(小若:哎哟,不错哦,好想揍你) 详细的说明如下: Q:切换到手掌状态,这样就可以移动整个场景 W:切换到移动状态,这样就可以移动当前物体 E:切换到旋转状态,这样就可以旋转物体 R:切换到缩放状态,这样就可以缩放物体 T:切换到选择状态,可以框选多个物体 ### 2.复制物体 如果你做了一个很帅的Cube物体,想要复制一个,那怎么办? 很简单,选中这个Cube,然后按住[键盘](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=bf47491585e091bb&k=%BC%FC%C5%CC&k0=%BC%FC%C5%CC&kdi0=0&luki=5&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=bb91e085154947bf&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2089&urlid=0)的Ctrl+D,你会看到如图所示的样子: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ad74eab.png) 就这样复制了一个物体,这是经常会用到的快捷键,记住它吧。 ### 3.隐藏物体 有时候我做了一个很厉害的Cube(小若:能不能不要Cube,敢不敢换一个帅一点的物体?) 但是我又突然不想要了,可是我又不舍得删,怎么办?(小若:孩子,要拿得起,放得下) 选择你想隐藏的物体,看看它的属性页的左上角: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ad889e2.png) 有没有看到一个勾选框,是的,没错,就如你所想的那样,嗯。 这里所说的隐藏,是指游戏运行时的隐藏,编辑状态下的话…也是会隐藏的,哈哈哈。(小若:我觉得你在找屎咯) ### 4.我们的第一个脚本..文件 别兴奋,只是建一个脚本文件,我们不写代码。 在【Project】窗口里点击右键,依次选择【Create】->【C# Script】,这样就创建了一个脚本文件了: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ada1159.png) 注意了,如果你希望给这个脚本重命名,请在刚创建的时候就输入它的名字。 因为,你以后再修改名字的话,脚本对应的类的名字是不会被修改的。 如果你希望脚本的名称就是类的名称,那就要小心点了,别随便改动文件名 ### 5.添加组件 别失望,我让你创建脚本是有用的。 现在,尝试点击并拖动脚本文件,拖到Cube物体的属性页里。 这是一个很高难度的操作,你一定要仔细看我的说明。(小若:呵呵) 首先,点击Cube物体,你会看到它的属性页。 然后,点击并拖动脚本文件到Cube的属性页空白处。 注意,点击并拖动,在拖动完成之前都不要松开[鼠标](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=bf47491585e091bb&k=%CA%F3%B1%EA&k0=%CA%F3%B1%EA&kdi0=0&luki=1&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=bb91e085154947bf&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2089&urlid=0),否则你只会看到脚本的属性页。 然后,你就能看到Cube的属性多了一个脚本了: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541adb2f15.png) 这是一个很常用的操作,添加其他组件时也是这样的操作方式。 甚至是脚本的某个成员属性,也可以通过拖动来赋值,很帅。 [组件](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=bf47491585e091bb&k=%D7%E9%BC%FE&k0=%D7%E9%BC%FE&kdi0=0&luki=4&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=bb91e085154947bf&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2089&urlid=0)+拖动,这算是Unity的一大特色吧。 ### 6.Tag(标签) 最后,看看Cube的Tag属性,这个有点难找,在Cube属性页的最上面,但是在Cube名字的下面: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541add2492.png) 点击Untagged下拉框,就能看到一堆选择项,这些都是预设的Tag标签,你可以选择一个。 但通常是自己建一个,点击最后的【Add Tag】,然后点击右下角的【+】号按钮: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541adeb6af.png) 接下来,你自己建,想建多少个就建多少个。 建完之后,再次点击Cube物体,回到它的属性页,你会发现…它的Tag还是Untagged,哈哈哈。 是的,你刚刚建的那些Tag都是公用的,并不是针对某个物体的。 所以,你还得给Cube选择一个Tag。 Tag[标签](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=bf47491585e091bb&k=%B1%EA%C7%A9&k0=%B1%EA%C7%A9&kdi0=0&luki=3&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=bb91e085154947bf&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2089&urlid=0)是什么鬼?它就只是物体的一个属性,你可以这样理解:public string tag; 明白了吗?然后,我们想用这个属性来做什么就用来做什么,你自己喜欢。 通常情况下,我们会用它来查找物体,比如我获取到了一个物体,但是我不知道它是谁。 这时就可以通过判断它的Tag来确定它是谁了。 同样的,我们可以给怪物物体设置一个相同的Tag(比如monster),只要Tag是monster的,那就代表它是怪物。 这样,英雄在攻击敌人时,就不会不分敌我了。 ### 8.结束 OK,这篇介绍得比较杂,但常用的入门操作介绍得差不多了。 其实我也就是入门阶段而已,我平时也就是用这些操作。 ### 9.PS——保存场景 我漏掉了一个很重要的东西,因为写完才想起的,所以只能额外添加一个小标题来写了。 (小若:再假一点试试?好像我不知道博客可以编辑似的) 那就是保存场景。 Unity和Cocos有一个地方是比较类似的,那就是,都有场景的概念。 场景可以理解为界面的切换,比如菜单界面进入到关卡选择界面,然后再进入到战斗界面。 这几个界面就可以分别用三个场景来实现(当然,你非要在一个场景里做几个大功能,那也没人能组织你)。 创建Unity项目后,默认会新建一个场景,但是这个场景是未命名了,按下Ctrl+S,就会弹出保存对话框。 输入你的场景名,保存即可。 关于目录结构,我们以后再说。 [本篇源码:](#)[Unity_benmutou_005](http://www.benmutou.com/wp-content/uploads/2015/10/Unity_benmutou_005.zip)
';

04:地形初初初级介绍

最后更新于:2022-04-01 14:37:31

我突然有点不知所措,Unity的教程果然很难写,我有点不知道该从哪个话题开始写起。 我想,从地形开始写起?这个用的比较多,嗯,就它吧。(小若:不知道为什么,我总感觉好像很随便的样子) > 笨木头花心贡献,啥?花心?不,是用心。 > 转载请注明,原文地址:[http://www.benmutou.com/archives/2063](http://www.benmutou.com/archives/2063) > 文章来源:[笨木头与游戏开发](http://www.benmutou.com/blog/) 为什么标题是【初初初级介绍】?(小若:我知道,你口吃) 因为我个人对地形也不是很熟悉,仅仅是能使用一些基本功能,所以,我也只能给大家介绍基本功能。 对于Unity[编辑器](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=eb2f883e62b79e96&k=%B1%E0%BC%AD%C6%F7&k0=%B1%E0%BC%AD%C6%F7&kdi0=0&luki=3&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=969eb7623e882feb&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2063&urlid=0)方面的操作,还是视频教程比较合适,无奈我的[口才](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=eb2f883e62b79e96&k=%BF%DA%B2%C5&k0=%BF%DA%B2%C5&kdi0=0&luki=5&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=969eb7623e882feb&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2063&urlid=0)很差,做视频教程完全不行。 大家可以自行去找[视频教程](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=eb2f883e62b79e96&k=%CA%D3%C6%B5%BD%CC%B3%CC&k0=%CA%D3%C6%B5%BD%CC%B3%CC&kdi0=0&luki=9&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=969eb7623e882feb&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2063&urlid=0),这个挺多的。 我也收回一开始我说的那句【对Unity的现有教程有点失望】的话,因为我是半年多以前找的教程,而现在我发现,Unity的教程也越来越优秀了。 我的教程会更偏向于代码,因为对菜单的介绍实在是太麻烦了。 (小若:噢,原来是太麻烦了,那也不能怪你了…啊个屁啊!只是因为太麻烦所以就不介绍吗?这样真的可以吗?) ### 1.创建空白地形 依旧是在【Hierarchy】的空白处点击右键,依次选择【3D Object】->【Terrain】,你就会发现场景里多了一块白色的怪怪的东西。 别怕,那就是地形。 ### 2.设置地形大小 点击选择地形,看看它的属性[面板](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=eb2f883e62b79e96&k=%C3%E6%B0%E5&k0=%C3%E6%B0%E5&kdi0=0&luki=1&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=969eb7623e882feb&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2063&urlid=0),你发现了什么? 是的,你发现了它有超级多的属性,特么的我现在真的只懂一点点,所以,我只介绍我懂的那一些。 如图: [![u004_1](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541700c583.png)](http://www.benmutou.com/wp-content/uploads/2015/10/u004_1.png) 我们选择最右边的按钮,这是地形设置菜单,里面有很多属性,我们只看下面的这些: [![u004_2](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541701e4ff.png)](http://www.benmutou.com/wp-content/uploads/2015/10/u004_2.png) 没错,只看【Terrain width】和【Terrain Length】属性,它们分别就是地形的宽度和长度。(小若:我感觉从字面意思就能知道,完全不需要你解释的样子,不知道是不是幻觉) 注意,是宽度和长度,而不是宽度和高度,这是3D的,目前只关注宽和长即可。 500*500其实已经蛮大了,对于我之前的【只有一关】这个[小游戏](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=eb2f883e62b79e96&k=%D0%A1%D3%CE%CF%B7&k0=%D0%A1%D3%CE%CF%B7&kdi0=0&luki=4&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=969eb7623e882feb&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2063&urlid=0)来说,完全不需要这么大。 我设成100*100吧,大家就随意了。 ### 3.地形贴图 就这么一块白白的地形,总让人有种怪怪的感觉,所以,我们需要给地形贴点[墙纸](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=eb2f883e62b79e96&k=%C7%BD%D6%BD&k0=%C7%BD%D6%BD&kdi0=0&luki=7&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=969eb7623e882feb&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2063&urlid=0)。 现在,我们选择地形属性的第四个按钮,如图: [![u004_3](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ac2c841.png)](http://www.benmutou.com/wp-content/uploads/2015/10/u004_3.png) 看到图片你就知道,我接下来要你点的是哪个按钮了吧? 点击【Edit Textures..】按钮,开始选择我们的图片。 如果你怕复杂,可以只选一张图片,然后点击【[add](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=eb2f883e62b79e96&k=add&k0=add&kdi0=0&luki=6&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=969eb7623e882feb&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2063&urlid=0)】即可,如果你比较好奇,可以选两张,然后里面的各种参数自己试。 比如我的: [![u004_4](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ac45462.png)](http://www.benmutou.com/wp-content/uploads/2015/10/u004_4.png) 现在我还不想解释里面的参数(我只懂一点点),大家只要知道,这些参数可以改变地形贴图的效果就可以了。 自己多动手试试,学Unity,如果自己不多尝试,真的不好学,细节太多。 点击【Add】之后,看看场景,变成下面的样子了: [![u004_5](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ac5a640.png)](http://www.benmutou.com/wp-content/uploads/2015/10/u004_5.png) 这个还是蛮帅的。 第一个添加的贴图会默认覆盖整个地形,我们可以添加很多贴图,选择你添加的贴图后,就可以在地形上[画画](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=eb2f883e62b79e96&k=%BB%AD%BB%AD&k0=%BB%AD%BB%AD&kdi0=0&luki=2&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=969eb7623e882feb&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2063&urlid=0)了。 就像[画笔](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=eb2f883e62b79e96&k=%BB%AD%B1%CA&k0=%BB%AD%B1%CA&kdi0=0&luki=8&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=969eb7623e882feb&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2063&urlid=0)一样,大家自己尝试了,不唠叨了。 ### 4.地形海拔高度 现在的地形还仅仅是一个平平的飞机场(我没有别的意思)(小若:特么的你用了我的括号,那我用什么?) 还记得盘古怎么开天辟地的吗? 想当年,天地还是一体的,世界是平的,有一天,盘古伸了个懒腰,于是,天和地被分开了… 在很久很久以后,海拔最高的喜马拉雅山出现了。 没错,海拔,目前我们的地形海拔高度是0,我们来试试怎么提高地形的海拔高度。 这次我们要看地形的第二个按钮,如图: [![u004_6](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ac805a8.png)](http://www.benmutou.com/wp-content/uploads/2015/10/u004_6.png) 没错,你们又发现了,我要你们关注的是下面的【Height】一栏,这个就可以理解为地形的海拔高度。 如果你现在拖动上面的滑动条,是改变不能海拔高度的,默认的海拔高度是0(不管滑动条上显示的是什么)。 我们试试把滑动滑动条,让它变为100,然后点击【Flatten】按钮。 发生什么神奇的事情了吗?(小若:地形不见了!) 没错,也许有人会发现地形不见了,其实,它只是往上跑了。 大家操作一下场景,放大缩小拖动什么的,找到地形,它在上面不远的地方。(小若:啊,找到了,好辛苦。) 其实吧,笨蛋才这么去找呢。 直接双击【Hierarchy】里的【Terrian】就能定位到这个对象了,完全不需要找,呵呵。(小若:大家不要拦着我,我这次特么绝对要轻轻地捶他一下!) OK,现在场景的海拔高度已经变成100了,它目前是[游戏](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=eb2f883e62b79e96&k=%D3%CE%CF%B7&k0=%D3%CE%CF%B7&kdi0=0&luki=10&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=969eb7623e882feb&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2063&urlid=0)里海拔最高的地形,没有之一。 ### 5.地形笔刷 还是刚刚那张图,大家应该发现了很多类似PhotoShop里的笔刷,如果你不知道什么是PhotoShop,也不知道什么是笔刷的话… 那么,我就来给你解释一下好了…啊个屁啊!不知道的话就滚粗好吗?(小若:这年头,连吐槽的工作都有人抢,唉…) 我们随便选一个笔刷,比如: [![u004_7](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ac9aaf6.png)](http://www.benmutou.com/wp-content/uploads/2015/10/u004_7.png) 单击某个笔刷就能选中了。 OK,你在地形上随便画试试,是不是有效果了?[![u004_8](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541acb8286.png)](http://www.benmutou.com/wp-content/uploads/2015/10/u004_8.png) (小若:特么的我完全没效果啊) 如果你发现画不出东西,那就对了,看看你Height里面的值是多少?是不是100? 特么的地形的海拔是100,你画的笔刷海拔也是100,地形和笔刷的高度是一毛一样的,怎么可能有效果呢? 所以,把Height的值设大一些,比如我的是190,然后再画一下试试。(小若:有了!) 如果你把值设得比海拔低,会怎么样? 没错,大海就是这么来的,山崖就是这么来的,天洞就是这么来的。 建议有恐高症的人不要把地形拉太近,比如: [![u004_9](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ad01be4.png)](http://www.benmutou.com/wp-content/uploads/2015/10/u004_9.png) 至于【Height】上面的【Brush Size】和【Opacity】属性有什么用? Brush Size顾名思义,笔刷大小。 Opacity顾名思义…个屁啊,“不透明度”是什么意思?其实它是控制笔刷的强度的,大家自己设置这个属性, 再画一画就能看到效果了。 ### 6.“无高度”限制的笔刷 如果你刚刚画得很投入,一定会发现,地形不会超出我们设定的Height值,也就是说,笔刷画出来的东西,顶部一定是平的。 这个很好理解,因为它最高就是这么高,当一整块地形都画满笔刷,并且都画到最高时,顶部只能是平的,自己多[画画](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=eb2f883e62b79e96&k=%BB%AD%BB%AD&k0=%BB%AD%BB%AD&kdi0=0&luki=2&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=969eb7623e882feb&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2063&urlid=0)就能看到效果了。 现在我们介绍最后一个按钮: [![u004_10](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_575541ad3a19c.png)](http://www.benmutou.com/wp-content/uploads/2015/10/u004_10.png) 和刚刚的说法相对应的,这个按钮下的笔刷,画出来的地形是没有最大高度限制的。 可以很明显地看到,它没有Height属性。 而如果你在[画笔](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=eb2f883e62b79e96&k=%BB%AD%B1%CA&k0=%BB%AD%B1%CA&kdi0=0&luki=8&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=969eb7623e882feb&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2063&urlid=0)刷的时候,同时按住Shift键,会发现好玩的东西。 ### 7.结束 最后,大家不要忘了,我们还有贴图,贴图是可以用在这些由笔刷画出来的地形上的。 可以这么理解,笔刷是控制地形的形状,而贴图是用来上色的。 特么我的以后不敢截那么多图了,这一篇教程下来,图片就1、2M了,要是我这篇教程火了怎么办? 一次浏览就耗去我1、2M,我这博客流量,要超上限了。(小若:你想多了,想多了很多) 好了,我真的很不喜欢介绍菜单啊,但是又不得不介绍。 我希望快点进入脚本方面的教程。 本篇源码:[Unity_benmutou_004](http://www.benmutou.com/wp-content/uploads/2015/10/Unity_benmutou_004.7z)
';

03:HelloWorld

最后更新于:2022-04-01 14:37:29

有人跟我说:你特么的都写了3篇了,什么实际的东西都没有。(小若:特么的根本就没人评论你的教程!) 这么说就不对了,教程只是配菜,吐槽才是主菜,你们觉得呢。 > 笨木头花心贡献,啥?花心?不呢,是用心~ > 转载请注明,原文地址:[http://www.benmutou.com/archives/2057](http://www.benmutou.com/archives/2057) > 文章来源:[笨木头与游戏开发](http://www.benmutou.com/blog/) ### 1. Cube版HelloWorld 说了这么多,先来个HelloWorld解解馋吧。 在【Hierarchy】窗口,这个英文的意思呢就是…我们接着来看下一步。(小若:[翻译](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=f2c62a0dab7a9ccb&k=%B7%AD%D2%EB&k0=%B7%AD%D2%EB&kdi0=0&luki=3&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=cb9c7aabd2ac6f2&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2057&urlid=0)吖,你倒是翻译吖!哼) 在窗口的空白处单击右键,依次选择【3D Object】->【Cube】。 你会发现在场景中间多了一个正方体,而且你会很兴奋地发现,原来Unity创建物体这么简单。 原来Unity制作游戏这么简单,然后你就会很兴奋地自己去尝试创建很多物体,然后运行游戏。 最后,你会发现,你什么都做不了。 OK,回归正途(小若:是回归主题!) 创建Cube(正方体)之后,如图所示: [![unity2_2.jpg](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_5755416f7f507.jpg)](http://www.benmutou.com/wp-content/uploads/2015/10/wpid-589181fe73c03fc69583dcb6656ee880_501e4bb0-7277-4cb0-9eef-8c1c5e60089e.jpg) 然后,点击播放按钮,哪个是播放按钮?你觉得哪个像,你就点哪个,如果你找不到,那就滚粗好吗(小若:好想揍你,怎么办) ### 2.Scene和Game的秘密 运行后就能直接看到效果了,而且你会发现,场景窗口的Tab小标签偷偷换了,如图: ![unity2_3.jpg](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_5755416f9a19b.jpg) 运行之前是【Scene】标签,运行之后是【Game】标签。 如果在运行之后,你再点击【Scene】[标签](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=f2c62a0dab7a9ccb&k=%B1%EA%C7%A9&k0=%B1%EA%C7%A9&kdi0=0&luki=2&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=cb9c7aabd2ac6f2&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2057&urlid=0),就会发现,你可以编辑场景里的物体。 于是你就会很兴奋,觉得Unity开发[游戏](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=f2c62a0dab7a9ccb&k=%D3%CE%CF%B7&k0=%D3%CE%CF%B7&kdi0=0&luki=6&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=cb9c7aabd2ac6f2&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2057&urlid=0)贼简单,竟然可以一边运行一边修改。 于是你就各种修改,改出很帅的效果。 最后,你再次点击播放按钮,运行状态下点击播放按钮,就会停止运行。 然后,你发现你改的东西都没了。 没错,在运行状态下改的东西是不会生效的,只能在运行状态下看到效果。 ### 3.UI版HelloWorld 接下来就比较难了,跟紧了,按照下面的步骤执行: 在【Hierarchy】窗口空白处点击右键,依次选择【UI】->【Canvas】; 在创建好的Canvas上点击右键,依次选择【UI】->【Text】。 最终你将创建了如图所示的东西: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_5755416fb45aa.png) Canvas是画布,Text自然就是文本[控件](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=f2c62a0dab7a9ccb&k=%BF%D8%BC%FE&k0=%BF%D8%BC%FE&kdi0=0&luki=1&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=cb9c7aabd2ac6f2&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2057&urlid=0)了。 至于那个EventSystem,是自动生成的,先不用管它。 现在,单击【Text】,你会看到它的属性,找到它的【字体大小】和【颜色】属性,自己找,很明显的。 然后随便改,比如我改成字体大小是20(最好别太大,否则你会发现奇怪的事情)、颜色是红色。 最后运行游戏,效果如图: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_5755416fc6bf8.jpg) ### 4.结束 OK,由于是HelloWorld,就不能深入讲解了。 而且Unity有个很奇怪的地方,它每一个地方都能涉及到很多东西。 所以不能一次性讲完,用到的时候再讲。 本篇[源码](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=f2c62a0dab7a9ccb&k=%D4%B4%C2%EB&k0=%D4%B4%C2%EB&kdi0=0&luki=5&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=cb9c7aabd2ac6f2&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2057&urlid=0):[![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_5755416fd8c28.png)](http://www.benmutou.com/wp-content/uploads/2015/10/wpid-589181fe73c03fc69583dcb6656ee880_003%E6%95%99%E7%A8%8B%E6%BA%90%E7%A0%81.zip)
';

02:不谈对象,咱们谈组件

最后更新于:2022-04-01 14:37:26

今天有人问了一个一直以来都让我很纠结的问题:木头为什么长得这么帅?(小若:不就是一个瞎子随便问了个问题嘛,至于吗?) 这,大家以后别问我这个问题了,我真的不知道怎么回答,我尝试过很多变丑的方法,但是都失败了。 > 笨木头花心贡献,啥?花心?不呢,是用心~ > 转载请注明,原文地址:[http://www.benmutou.com/archives/2044](http://www.benmutou.com/archives/2044) > 文章来源:[笨木头与游戏开发](http://www.benmutou.com/blog/) ### 1.还在谈对象?我们这里流行组件 一定有人告诉过你,在面向对象的世界里,一切都是对象。 现在,你要进入Unity的世界了,在这里,不谈对象,因为,一切都是组件。 咳咳,正规点(小若:是正经不是正规!),什么是组件? 其实组件也是对象,只不过是封装过的对象,一个人类可以由头、脚、手、身躯、尾巴、翅膀组成。(小若:你才有尾巴,你全家都有尾巴…) 人类本身这个类是空的,它包含了其他部分的组件,从而组合成了一个完整的人类,拥有人类正常的功能,如行走、飞行、漂移等。 我们打开Unity编辑器,打开你新建的一个测试项目,默认是有一个【Main Camera】物体的,单击它,会看到右边有一堆属性。 不要怕,如图: [![unity2_1.jpg](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_5755416f61838.jpg)](http://www.benmutou.com/wp-content/uploads/2015/10/wpid-6f176071a63dd321d80729c0a16c01ae_f9f178bd-cb4d-4daf-a5da-263026f25886.jpg) 箭头所指的地方,【Add Component】就是【添加组件】的意思,由于怕大家看不到,所以多用了2个箭头。(小若:你是觉得大家瞎了吗?) 也就是说,我们可以往物体上添加很多组件,物体就是由这样的一个个组件组合而成的,包括脚本、声音、坐标、材质都可以作为组件添加到别的物体身上。 总之,记住一个重点,五个字:一切都是组件,一切都是组件,一切都是组件。 好了,更多的,大家自行百度、Google、LOL去。 ### 2.语言和代码编辑器的选择 Unity支持C#和JavaScript作为脚本语言,理论上这两者选谁都可以,取决于大家的实际情况。 如果你本身已经对JS很熟悉了,那就选JS,反之亦然。 木头个人倾向于C#,因为它属于比较正宗的编程语言,JS毕竟是脚本语言,木头的这系列教程都将使用C#作为开发语言。 如果你以为Unity编辑器里面可以写代码,那你就错了,脚本代码必须在另外一个编辑器里写。 以前Unity默认是使用Mono编辑器的,我个人觉得超级难用,是超级难用,超级难用!(小若:乖,别闹) 而现在,Unity会优先使用Visual Studio,我很喜欢用VS,因为我已经习惯了。 建议大家用VS2015,因为它会自带VS Tool for Unity,可以断点调试代码。 但,不知道什么原因,我的笔记本上总是没法调试,家里和公司的台式机却没问题,如果有谁知道原因,请告诉我,十分感谢。 ### 3.结束 这篇写得很短,没完的,但我另开一篇来讲解我们最喜欢的东西——HelloWorld。
';

1:学游泳的第一步是下水

最后更新于:2022-04-01 14:37:24

这次的教程更像是我个人的学习记录,所以不一定是从零开始,更多的是,从另一个引擎转战到Unity的教程。 [学游泳](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=d784709801233f89&k=%D1%A7%D3%CE%D3%BE&k0=%D1%A7%D3%CE%D3%BE&kdi0=0&luki=9&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=893f2301987084d7&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2035&urlid=0)的第一步,不用说了,必定要下水。 > 笨木头花心贡献,啥?花心?不呢,是用心~ > 转载请注明,原文地址:[http://www.benmutou.com/archives/2035](http://www.benmutou.com/archives/2035) > 文章来源:[笨木头与游戏开发](http://www.benmutou.com/blog/) ### 1.Unity安装什么的乱七八糟 首先自己想办法找到Unity官网,然后下载安装,这里有个小提示,官方默认下载的是一个[下载器](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=d784709801233f89&k=%CF%C2%D4%D8%C6%F7&k0=%CF%C2%D4%D8%C6%F7&kdi0=0&luki=3&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=893f2301987084d7&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2035&urlid=0),并不是完整安装包。 如果你想下载完整安装包,请点击下载页面的【其他下载】,如下图: [![unity001_1](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_5755416edffe8.jpg)](http://www.benmutou.com/wp-content/uploads/2015/10/unity001_1.jpg) 这里可以分别下载你需要的东西,我下载的是除了32位编辑器以外的所有东西。 很明显,我这个教程用的版本是5.2,Unity的兼容性还算不错,应该只要是5.x版本,我这教程都能适用。吧。(小若:最后那个字就不要单独占一句话好吗) Unity并没有什么特别的安装需求,一般的开发者的[电脑](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=d784709801233f89&k=%B5%E7%C4%D4&k0=%B5%E7%C4%D4&kdi0=0&luki=1&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=893f2301987084d7&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2035&urlid=0)完全能一键安装,立刻完美运行。 这里特别说明一下,千万不要尝试去找什么中文语言包,原版的最好,就像粤语电影,非得给我[翻译](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=d784709801233f89&k=%B7%AD%D2%EB&k0=%B7%AD%D2%EB&kdi0=0&luki=5&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=893f2301987084d7&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2035&urlid=0)成[普通话](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=d784709801233f89&k=%C6%D5%CD%A8%BB%B0&k0=%C6%D5%CD%A8%BB%B0&kdi0=0&luki=2&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=893f2301987084d7&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2035&urlid=0),我会很痛苦。 当初学Cocos2d-x也有这种感觉,明明是中国人的引擎,源码注释却是英文的。 不过,在代码这方面,英文确实比中文好。 记住,不要找汉化,你会后悔的。 ### 2.新建项目 安装完之后,请打开Unity,自己新建一个项目。 新建项目这种低等级的东西我就不多说了(小若:我呸!有本事就别说。) 算了,我还是说一下吧,下不为例咯。 菜单【File】-【New Project】,如图: [![unity001_2](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_5755416f1b6c0.jpg)](http://www.benmutou.com/wp-content/uploads/2015/10/unity001_2.jpg) 选择[项目名称](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=d784709801233f89&k=%CF%EE%C4%BF%C3%FB%B3%C6&k0=%CF%EE%C4%BF%C3%FB%B3%C6&kdi0=0&luki=4&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=893f2301987084d7&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2035&urlid=0)和路径就可以了,其他的默认。 唉,太简单,不多说。 ### 3.开始入水 现在,请不要继续看我说废话了,进入你新建的Unity项目,随意操作。 鼠标左键、右键、[滚轮](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=d784709801233f89&k=%B9%F6%C2%D6&k0=%B9%F6%C2%D6&kdi0=0&luki=6&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=893f2301987084d7&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2035&urlid=0)、双击、单击、按住左/右键拖动、按住滚轮拖动,等等,请随意尝试。 我是绝对绝对不想介绍菜单的,这不好,真的不好。 我不想截图,难道这个我应该说出来吗?我不会说的。(小若:是的,你选择写出来了。) ### 4.重要的菜单 其实菜单是不应该先介绍的,Unity[编辑器](http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=18&is_app=0&jk=d784709801233f89&k=%B1%E0%BC%AD%C6%F7&k0=%B1%E0%BC%AD%C6%F7&kdi0=0&luki=7&n=10&p=baidu&q=25013069_cpr&rb=0&rs=1&seller_id=1&sid=893f2301987084d7&ssp2=1&stid=0&t=tpclicked3_hc&td=1682305&tu=u1682305&u=http%3A%2F%2Fwww%2Ebenmutou%2Ecom%2Farchives%2F2035&urlid=0)的菜单很多,一般初次接触的人都会不知所措,我给你们介绍也没用。 所以,下面这个图,你们就随便看看吧: [![unity001_3](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-06-06_5755416f37dc4.jpg)](http://www.benmutou.com/wp-content/uploads/2015/10/unity001_3.jpg) 图中标注的几个地方都是以后必定会用到的,而且基本上也就是用这些东西了。 学Unity一定要有一个意识:我想要的,它都有;我觉得应该这么操作,它很可能就是了。 所以,多去猜测,Unity在人性化、用户体验方面真的做得很多。 多尝试一些操作,这样才能记住。 否则,这么多菜单,这么多小细节,没人能全部教给自己的。 ### 5.结束 好了,这篇只是环境搭建,意思一下,没什么重要的。
';

0:前言

最后更新于:2022-04-01 14:37:22

木头我最近心血来潮,想重拾当年写教程的热血状态,包括旁白小若也一并复活。 ### 1.木头正式宣布转战Unity3D 其实研究Unity3D有一段时间了,只是业余研究,断断续续的,所以基础还是很弱的。 为什么这里要说正式宣布转战Unity3D呢? 因为Cocos引擎让我彻底失望了,仅仅是因为一件事情——Cocos商店的侵权行为,具体可以看我微博:[点这里](http://www.weibo.com/2170365272/CE8gF7iQd?from=page_1005052170365272_profile&wvr=6&mod=weibotime&type=comment) 简单总结就是:Cocos商店的电子书版块,大部分都是盗版的电子书,包括我出版的《Cocos2d-x游戏开发之旅》。 本来这对我来说,是一件小事,我甚至可以闭一只眼睛。 可是,不管是我在微博里提出这件事,还是发送邮件给Cocos商店,结果都只有一个:Cocos商店方面选择无视。 如果说,Cocos引擎是一个不起眼的小引擎,我无话可说,国内大环境如此,早已习惯,比如CSDN的下载频道。 可,Cocos引擎是我的良师益友,我感觉被好朋友在后面捅了一刀,狠狠的,而且最终连一个解释都不给我。 所以,我想,我是真的不会再回到Cocos引擎了,这样的一个团队,我不知道他们继续走下去会变成什么样。 虽然我也不知道Unity的团队是什么德行,但,我不抱期望,也就不会失望了,仅此而已。 没错,木头就是这么一个孩子气的人。 当然,我依旧会尽我所能地回答大家的问题。 ### 2.对Unity教程的失望 说实话,我对Unity现有的那些教程感到蛮失望的,可能Unity比较特殊,毕竟它的编辑器太庞大,写教程确实不好写。 我也没有自信能写好这些教程,但,我会尽力。 其实,我更多的是记录自己的学习过程,顺便和大家分享,仅此而已,如果你觉得写得不好,请见谅。 ### 3.更新频率的问题 我很忙,我一直这么说,因为我的时间都安排好了,包括玩。 我现在,打算把周六周日的时间抽一部分出来研究Unity或者写Unity的学习心得。 也许更新会比较慢,也取决于我有没有东西可以分享。 我也不知道我还能不能像以前那样,写出无忧无虑的文章,毕竟,经历多了,心态也不一样了。 这,其实是让我很难过的一件事情,我不想失去写文章的能力。 可,我确实在慢慢地失去这个能力。 ### 4.开始 写这篇前言,是希望能给自己一个督促。 开始吧,我会加油的…(小若:所以说啊,为什么不用感叹号,那才更能表达你的决心吖,像我就不一样,我很有决心的,加油…)
';

前言

最后更新于:2022-04-01 14:37:20

> 原文出处:[【笨木头Unity】入门之旅](http://blog.csdn.net/column/details/benmutou-unity-first.html) 作者:[钟迪龙](http://blog.csdn.net/musicvs) **本系列文章经作者授权在看云整理发布,未经作者允许,请勿转载!** # 【笨木头Unity】入门之旅 > 笨木头的Unity入门教程。
';