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入门教程。