[转载]Unity3D游戏引擎最详尽基础教程.pdf

上传人:tbuqq 文档编号:5106633 上传时间:2020-02-02 格式:PDF 页数:47 大小:3.61MB
返回 下载 相关 举报
[转载]Unity3D游戏引擎最详尽基础教程.pdf_第1页
第1页 / 共47页
[转载]Unity3D游戏引擎最详尽基础教程.pdf_第2页
第2页 / 共47页
[转载]Unity3D游戏引擎最详尽基础教程.pdf_第3页
第3页 / 共47页
[转载]Unity3D游戏引擎最详尽基础教程.pdf_第4页
第4页 / 共47页
[转载]Unity3D游戏引擎最详尽基础教程.pdf_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《[转载]Unity3D游戏引擎最详尽基础教程.pdf》由会员分享,可在线阅读,更多相关《[转载]Unity3D游戏引擎最详尽基础教程.pdf(47页珍藏版)》请在三一文库上搜索。

1、转载Unity3D游戏引擎最详尽基础教程 原文地址: Unity3D 游戏引擎最详尽基础教程作者:ShangShang 我一直向所有想做游戏的朋友推荐Unity3D ,为什么呢?首先是因为专业,Unity3D 非 常强大,用它创建一个类似MiniGore 这样的 3D 平面射击游戏简直轻而易举,而就连 使命召唤这样的大型3d 游戏,如果素材得当也不在话下。二是因为易用,他的操作非 常容易,而使用的脚本语言又是JavaScript 或者 C# ,不仅非常简单,也让各个种类的 程序员都非常容易上手。再次,就是因为免费,如果你不使用Pro 或者 Mobile 的内容 的话, Unity3d 就是完全

2、免费的。还有就是对3D 模型的兼容性,几乎任何3d 模型都 可以导入到unity 中,可以说是一个很方便的特性。 今天,我就来讲讲Unity3D 的基础操作,这可以说是一个新手必读吧,读完之后,你 一定会惊叹,原来做一个游戏这么简单。 第一节 加入重力 我们先打开Unity3d ,新建一个场景(Scene),新建的时候应该会有对话框要求你加 入哪些 Asset Package ,记得选择 Physics Material ,因为后面我们一定要用的哦亲。 如果创建的时候没加,你可以再后来的Asset 菜单里加: 之后,我们建立一个Cude,调整一下x 和 z 的大小,我这里调成了25,让它变成一

3、个 地板,你也可以放一个texture 上去,看起来更加真实,我这里从简,再创建一个 sphere ,在 component 中选择Physics 中的 RigidBody ,前提是选中你的sphere 物体, 之后会看到这个Sphere 的 inpector 中加入一个component叫做 RigidBody,调整好 Camera 运行一下,你就会发现Sphere 受到重力的影响自动掉落到地板上。 之后,通过我们之前引入的Physics Materials 资源包,你还可以选择这个物体的物理 性质,我这里选择Bouncy (跳跳),落下之后,这个物体就会蹦来蹦去的,呵呵 第二节 检测碰撞

4、下面我们通过简单的JavaScript 语句来检测碰撞,这在制作游戏中是很有用的,比如 说检测到子弹和敌人的碰撞之后,可以使用我们后来要讲到destory 命令消灭敌人。 这次我们新建一个Terrain 项目,在用Grass 贴图来覆盖住它,如果你找不到贴图的话, 记得在 Asset 菜单里找找,看看哪些资源你还没有引入进去。 然后再加入一个Cube 项目,我这里叫做PlayerCube ,为他加上重力,之后选择 bouncy 性质,然后我们再新建一个Cude,调整 y 和 z 的值让他变成一堵墙,放置好, 命名为 Wall,别忘了给Terrain 改名为 Terrain , 之后我们在Ass

5、et 菜单中建立一个JavaScript 项目,改名为CollisionDetect ,双击打开, 如果你使用的是Unity 3.5 的话,就会打开MonoDev ,这是一个新工具还是很好用的, 在其中新建一个函数,别管Start 和 Update 函数,我们待会会讲。 加入以下代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 function OnCollisionEnter(theCollision : Collision) if

6、(theCollision.gameObject.name=“Terrain“) Debug.Log(“Hit terrain“); else if(theCollision.gameObject.name=“Wall“) Debug.Log(“Hit the wall“); 如果看不懂这些代码的话,也没关系,JavaScript 是最好学的编程语言,Google 一下 吧,保存这个JS文件,然后拖到我们的PlayerCube 上。 这时候我们运行,就会看到PlayerCube 到处蹦,碰到Terrain 的时候,控制台就会显 示 Hit Terrain ,碰到 wall 的时候就会显示Hit

7、 the wall 。 第三节检测用户输入 下面我们来讲一下如何检测用户的键盘和鼠标的操作。 就用我们上次的那个场景,这次我们给PlayerCube 加上我们可以控制的动作。就是通 过 wasd 或者上下左右键来控制移动。 请注意,如果要使用这里使用的方法来控制移动,那么所控制的物体不能够是一个物 理世界的物体,也就是说你要把RigidBody 这个 component 删掉,如果你想要在物理 世界里移动物体的话,你就需要我们在下面会讲到的力(force )。 首先我们新建一个JavaScript 文件,这里命名为InputDetect吧,输入下面的代码: 1 2 3 4 5 6 7 8 9

8、10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 10

9、7 108 109 110 111 112 113 114 115 116 117 118 #pragma strict var Player : GameObject; function Start () function Update () Player = GameObject.Find(“PlayerCube“); if(Input.GetKey(KeyCode.W) Debug.Log(“Hit w“); Player.transform.Translate(Vector3.forward * 2); else if(Input.GetKey(KeyCode.S) Debug.Log

10、(“Hit s“); Player.transform.Translate(Vector3.back * 2); else if(Input.GetKey(KeyCode.A) Debug.Log(“Hit a“); Player.transform.Translate(Vector3.left * 2); else if(Input.GetKey(KeyCode.D) Debug.Log(“Hit d“); Player.transform.Translate(Vector3.right * 2); 这时,我们运行这个游戏,就可以通过 WASD来控制 PlayerCube 的移动了。 第四节

11、 使用 Prefab 复制和控制物体 我们可以直接把Prefab 看做是个妈,她能生好多小孩,如果妈妈的DNA 变了,小孩的 跟着变,就是说你可以用Prefab 创建物体,然后通过这个Prefab 修改所有这类物体的 性质,这对于批量生成的敌人或者NPC来说很有用。 首先,先创建一个Prefab,我这里命名为 Mother,之后新建一个Sphere 物体,当然 你也可以建一些其他的物体,之后给这个Sphere 加上你想要的性质,我加入了 RigidBody 和 Bouncy ,之后将 Sphere 拖到 Mother 上,你会发现mother 变蓝了,之 后你就可以随意拖一些mother 物体

12、到屏幕上去,你会发现所有的Prefab 创建出的物 体在清单上都是蓝色的,说明他们都有共同的性质。 当然,作用于一个Prefab 上的脚本也会作用到它的子物体上去。 第五节 使用 Destroy 命令消灭物体 我们游戏中怎么能够没有敌人呢?有敌人就得能够消灭他们,这时候,我们就会使用 Destroy 命令了。 在这里,我们使用上次Mother 生出来的小球球作为敌银,一旦我们的PlayerCube 碰 撞到了小球的话,就是用Destroy 让小球消失。 新建一个 JavaScript 脚本,输入以下代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

13、 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 #pragma strict var mother : GameObject; function Start () function Update () function OnCollisionEnter(theCollision : Collision) mothe

14、r = GameObject.Find(“Mother“); if(theCollision.gameObject.name=“Mother“) Debug.Log(“Hit mother“); Destroy(mother); 这段代码很好懂吧,就是检验碰撞,然后销毁碰撞到的Mother 物体,别忘了把 Destroy 的 JavaScript 文件拖到PlayerCube 上去。运行一下,就可以看到碰撞到的物 体都被消灭了。 第六节 使用 Instantiate命令创造物体 我们直接在界面创造的物体都只是会在界面被初始化的时候加载,那么,如果为了节 约内存或者其他什么事情,我想要在游戏过程

15、中添加物体,那该怎么办呢?你猜对了, 就是用 instantiate 命令。 这个命令就是英文实例化的意思,下面我们给碰撞之后消失的mother 物体继续初始化 一些,也就是说消灭了一些,又来了一大波 为什么非要用mother 呢?因为只有拥有Prefab 的物体才能够使用这个命令哦亲。 1 2 3 4 5 6 7 8 9 10 11 12 13 function Update () var instance : GameObject = Instantiate (PreFab,transform.position,transform.rotation); 注意:这样的话,每次刷新一帧都会出现

16、一个新的mother 物体,你的内存也许会受不 了哦,更合理的方法是按下空格键,然后出现一个新的物体,你可以自己做吗?试试 看 你可能已经注意到了,每一个初始化的脚本都会默认有两个函数,就是: Update ()函数 每刷新一帧都会检查并执行 Start ()函数 只在场景初始化的时候执行 第七节 使用 Timer 计时器 这次,我们要让一个计时器倒数,倒数到0 的时候创建一个mother 物体,来看 Javascript 代码吧: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

17、31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 #pragma strict var myTimer : float = 5.0; function Start () function Update () if (myTimer = 0) myTimer -= Time.deltaTime; guiText.text=(“+myTimer); if (myTimer = 0) guiText.text = (“Done“); 把这个脚本拖到GUItext 控件上,你会发现我们

18、所期待的效果。 第八节 让物体动起来 其实让物体行动的技巧,我们已经会了,不是吗? 如果你觉得不是的话,没有认真的看上面的文章哦,我就再给你讲一次吧。 请特别注意,这种方法不适合物理世界的物体,如果向移动物理世界的物体,请看下 一节: 创建一个 Cylinder 物体,之后将下面的脚本附着在上面。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 #pragma strict var myObject : GameObjec

19、t; function Start () function Update () myObject.gameObject.Find(“Cylinder“); myObject.transform.Translate(Vector3(0,0,1); 第九节 使用物理世界的力 这里是我们讲移动物体的重点,因为大部分的物体移动都是在物理世界完成的,而如 果想要在物理世界移动东西,除了position 和 rotation 的移动之外,就是使用 力 了, 在高中学过经典物理学的人都知道,要使物体用移动,木有力是不行的,那么我们就 开始吧,再新建一个什么物体,我新建了一个Capsule。 之后,我会在这个

20、物体的上方加一个力,让它用力的向下飞,触碰到地之后,通过 bouncy 这个性质再弹回来。新建一个JavaScript 文件,就叫做Force 吧,加入如下代 码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #pragma strict var Power : float = 500.0; function Start () rigidbody.AddForce(Vector3(0,Power,0); function Update

21、() 运行之后,会发现capsule 其实是个很有幽默感的物体。 第十节 使用贴图和材质 贴图和材质能够使你的虚拟3D 世界看起来更加真实,不幸的是,需要大量在PS和 AI 中的设计工作,最近我一想到要打开PS就有点烦 呜呜。 闲话少说,我已经做好了一个贴图,怎么使用在材质上呢?之后我们怎么才能通过材 质使用到其他物体之上呢? 就像你看到的一样,我是直接拖进去的 之后我们从新建菜单中选择Material 这一项,之后选中material ,将贴图拖进material 的贴图选框里,之后,就可以拖动这个Material 赋给任何物体了。 第十一节使用声效和音乐 音效和音乐对于一个游戏来说是非常重

22、要的,一个寂静无声的世界是无聊的,而且不 真实,什么?你说声效和音乐是一个东西?那你就错了,声效是,比如说发射子弹的 声音,什么东西爆炸的声音等等,而音乐则是背景音乐什么的,不一样的亲。 对于音乐来说,往往使用立体声音乐,而对于生效来说,我们随便使用一个简单的音 乐文件就可以了。 想要在 Unity3D 中播放音乐,你需要两样东西,一个是监听器,一个是音乐源,监听 器是 Camera 的一个组件,所以你不用担心,你唯一需要增加的就是音乐源。 直接将项目中的音乐拖放到Audio Source 项就可以播放,但是如果我们想要在某个特 定的点上播放音乐该怎么办呢?答案就是,写一个脚本,新建一个脚本,

23、输入如下代 码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #pragma strict var myClip : AudioClip; function Start () AudioSource.PlayClipAtPoint(myClip,transform.position); function Update () 之后将这个脚本拖放到我们的物体上,最后,将音频文件拖放到AudioSource 选项框 中。 第十二节使用关节 关

24、节在 3D 游戏之中的应用非常广,主要在于物理世界的重力影响,下面我们就通过关 节来制作一个钟摆。 这次我们新建一个场景,松了一口气?刚才的场景是不是太乱了?你做的时候可以整 理一下嘛,呵呵 新建一个 cube 作为地面,之后一个cube 放在上空作为摆垂,之后用几个capsule 分 别用 component 中的 fixed joint 连接起来,之后最上面的那个capsule 与世界相连, 使用 Hinge Joint ,这样的话,他会默认与世界相连,不用担心,看图 第十三节使用 Axes 在 Edit Project Setting input 中可以查看各种形式的input,这些 i

25、nput 方法在 unity 中被叫做 Axes。 我们创建一个JavaScript,叫做 GetAxes,输入以下内容: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 #pragma strict function Start () function Update () var Honriz : float = Input.GetAxis(“Honrizontal“); Debug.Log(Honriz); 在拖放脚本之后,运行这个场景

26、,看看控制台输出了什么,你就明白了。 第十四节使用触发器 触发器一般用于检测一个物体是否处于一个空间内,他是怎么做到的呢? 首先,他创造一个大的物体,之后将他的randerer 属性去掉,他就隐形了,这样,我 们再把他的isCollide 属性去掉,他就不会发生碰撞了,之后,我们只需要用脚本检测 物体是否与这个物体碰撞就可以了。 我们新建一个场景,做一个地板,再做一个底座,叠加起来,再在他们的上空做一个 方块,设置rigidbody 属性,将底座设置成为我们刚才说的那种隐形的状态,之后新建 一个 JavaScript 脚本,输入代码 1 2 3 4 5 6 7 8 9 10 11 12 13

27、14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 #pragma strict function Start () function Update () function OnTriggerEnter (myTrigger : Collider) if(myTrigger.gameObject.name = “box“) Debug.Log(“Hit“); 按下运行,会发现可以检测出Hit。 第十五节使用 GUI 其实我们已经学过了如何使用GUI text ,不信,我们就用屏幕上的字代替我们在上面 的程序中的Debug.Log 现实的内容。 你自己能做吗? 试试看吧,一个下午写了这么多,有点累。 一定要在 Unity 中加入一个GUI Text ,运行一下,就会发现屏幕上的GUI Text 会随着 你设定的的内容而变化了。 之后看些什么? 本教程的所有代码在Unity3D 3.5 F5 + Mac OS X Lion上测试可用。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1