Unity3D游戏引擎最详尽基础教程

我一直向所有想做游戏的朋友推荐Unity3D,为什么呢?首先是因为专业,Unity3D非常强大,用它创建一个类似MiniGore这样的3D平面射击游戏简直轻而易举,而就连使命召唤这样的大型3d游戏,如果素材得当也不在话下。二是因为易用,他的操作非常容易,而使用的脚本语言又是JavaScript或者C#,不仅非常简单,也让各个种类的程序员都非常容易上手。再次,就是因为免费,如果你不使用Pro或者Mobile的内容的话,Unity3d就是完全免费的。还有就是对3D模型的兼容性,几乎任何3d模型都可以导入到unity中,可以说是一个很方便的特性。

今天,我就来讲讲Unity3D的基础操作,这可以说是一个新手必读吧,读完之后,你一定会惊叹,原来做一个游戏这么简单。

第一节 加入重力

我们先打开Unity3d,新建一个场景(Scene),新建的时候应该会有对话框要求你加入哪些Asset Package,记得选择Physics Material,因为后面我们一定要用的哦亲。

如果创建的时候没加,你可以再后来的Asset菜单里加:

之后,我们建立一个Cude,调整一下x和z的大小,我这里调成了25,让它变成一个地板,你也可以放一个texture上去,看起来更加真实,我这里从简,再创建一个sphere,在component中选择Physics中的RigidBody,前提是选中你的sphere物体,之后会看到这个Sphere的inpector中加入一个component叫做RigidBody,调整好Camera运行一下,你就会发现Sphere受到重力的影响自动掉落到地板上。

之后,通过我们之前引入的Physics Materials资源包,你还可以选择这个物体的物理性质,我这里选择Bouncy(跳跳),落下之后,这个物体就会蹦来蹦去的,呵呵

第二节 检测碰撞

下面我们通过简单的JavaScript语句来检测碰撞,这在制作游戏中是很有用的,比如说检测到子弹和敌人的碰撞之后,可以使用我们后来要讲到destory命令消灭敌人。

这次我们新建一个Terrain项目,在用Grass贴图来覆盖住它,如果你找不到贴图的话,记得在Asset菜单里找找,看看哪些资源你还没有引入进去。

然后再加入一个Cube项目,我这里叫做PlayerCube,为他加上重力,之后选择bouncy性质,然后我们再新建一个Cude,调整y和z的值让他变成一堵墙,放置好,命名为Wall,别忘了给Terrain改名为Terrain,

之后我们在Asset菜单中建立一个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(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 the wall。

第三节  检测用户输入

下面我们来讲一下如何检测用户的键盘和鼠标的操作。

就用我们上次的那个场景,这次我们给PlayerCube加上我们可以控制的动作。就是通过“wasd”或者上下左右键来控制移动。

请注意,如果要使用这里使用的方法来控制移动,那么所控制的物体不能够是一个物理世界的物体,也就是说你要把RigidBody这个component删掉,如果你想要在物理世界里移动物体的话,你就需要我们在下面会讲到的力(force)。

首先我们新建一个JavaScript文件,这里命名为InputDetect吧,输入下面的代码:

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
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
107
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("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的移动了。

第四节 使用Prefab复制和控制物体

我们可以直接把Prefab看做是个妈,她能生好多小孩,如果妈妈的DNA变了,小孩的跟着变,就是说你可以用Prefab创建物体,然后通过这个Prefab修改所有这类物体的性质,这对于批量生成的敌人或者NPC来说很有用。

首先,先创建一个Prefab,我这里命名为“Mother”,之后新建一个Sphere物体,当然你也可以建一些其他的物体,之后给这个Sphere加上你想要的性质,我加入了RigidBody和Bouncy,之后将Sphere拖到Mother上,你会发现mother变蓝了,之后你就可以随意拖一些mother物体到屏幕上去,你会发现所有的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
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){

 

mother = GameObject.Find("Mother");

 

if(theCollision.gameObject.name=="Mother"){

 

Debug.Log("Hit mother");

 

Destroy(mother);

 

}

 

}

这段代码很好懂吧,就是检验碰撞,然后销毁碰撞到的Mother物体,别忘了把Destroy的JavaScript文件拖到PlayerCube上去。运行一下,就可以看到碰撞到的物体都被消灭了。

第六节 使用Instantiate命令创造物体

我们直接在界面创造的物体都只是会在界面被初始化的时候加载,那么,如果为了节约内存或者其他什么事情,我想要在游戏过程中添加物体,那该怎么办呢?你猜对了,就是用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);

 

}

注意:这样的话,每次刷新一帧都会出现一个新的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
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控件上,你会发现我们所期待的效果。

第八节 让物体动起来

其实让物体行动的技巧,我们已经会了,不是吗?

如果你觉得不是的话,没有认真的看上面的文章哦,我就再给你讲一次吧。

请特别注意,这种方法不适合物理世界的物体,如果向移动物理世界的物体,请看下一节:

创建一个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 : GameObject;

 

function Start () {

 

}

 

function Update () {

 

myObject.gameObject.Find("Cylinder");

myObject.transform.Translate(Vector3(0,0,1));

 

}

第九节 使用物理世界的力

这里是我们讲移动物体的重点,因为大部分的物体移动都是在物理世界完成的,而如果想要在物理世界移动东西,除了position和rotation的移动之外,就是使用“力”了,在高中学过经典物理学的人都知道,要使物体用移动,木有力是不行的,那么我们就开始吧,再新建一个什么物体,我新建了一个Capsule。

之后,我会在这个物体的上方加一个力,让它用力的向下飞,触碰到地之后,通过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 () {

 

}

运行之后,会发现capsule其实是个很有幽默感的物体。

第十节 使用贴图和材质

贴图和材质能够使你的虚拟3D世界看起来更加真实,不幸的是,需要大量在PS和AI中的设计工作,最近我一想到要打开PS就有点烦···呜呜。

闲话少说,我已经做好了一个贴图,怎么使用在材质上呢?之后我们怎么才能通过材质使用到其他物体之上呢?

就像你看到的一样,我是直接拖进去的···

之后我们从新建菜单中选择Material这一项,之后选中material,将贴图拖进material的贴图选框里,之后,就可以拖动这个Material赋给任何物体了。

第十一节 使用声效和音乐

音效和音乐对于一个游戏来说是非常重要的,一个寂静无声的世界是无聊的,而且不真实,什么?你说声效和音乐是一个东西?那你就错了,声效是,比如说发射子弹的声音,什么东西爆炸的声音等等,而音乐则是背景音乐什么的,不一样的亲。

对于音乐来说,往往使用立体声音乐,而对于生效来说,我们随便使用一个简单的音乐文件就可以了。

想要在Unity3D中播放音乐,你需要两样东西,一个是监听器,一个是音乐源,监听器是Camera的一个组件,所以你不用担心,你唯一需要增加的就是音乐源。

直接将项目中的音乐拖放到Audio Source项就可以播放,但是如果我们想要在某个特定的点上 播放音乐该怎么办呢?答案就是,写一个脚本,新建一个脚本,输入如下代码:

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选项框中。

第十二节 使用关节

关节在3D游戏之中的应用非常广,主要在于物理世界的重力影响,下面我们就通过关节来制作一个钟摆。

这次我们新建一个场景,松了一口气?刚才的场景是不是太乱了?你做的时候可以整理一下嘛,呵呵

新建一个cube作为地面,之后一个cube放在上空作为摆垂,之后用几个capsule分别用component中的fixed joint连接起来,之后最上面的那个capsule与世界相连,使用Hinge Joint,这样的话,他会默认与世界相连,不用担心,看图

第十三节 使用Axes

在Edit – Project Setting – input 中可以查看各种形式的input,这些input方法在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);

 

}

在拖放脚本之后,运行这个场景,看看控制台输出了什么,你就明白了。

第十四节 使用触发器

触发器一般用于检测一个物体是否处于一个空间内,他是怎么做到的呢?

首先,他创造一个大的物体,之后将他的randerer属性去掉,他就隐形了,这样,我们再把他的isCollide属性去掉,他就不会发生碰撞了,之后,我们只需要用脚本检测物体是否与这个物体碰撞就可以了。

我们新建一个场景,做一个地板,再做一个底座,叠加起来,再在他们的上空做一个方块,设置rigidbody属性,将底座设置成为我们刚才说的那种隐形的状态,之后新建一个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
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会随着你设定的的内容而变化了。

时间: 2024-11-09 00:47:25

Unity3D游戏引擎最详尽基础教程的相关文章

Unity3D游戏引擎实战开发视频教程

Unity3D游戏引擎实战开发从入门到精通(坦克大战项目实战.NGUI开发.GameObject) 适合人群:初级 课时数量:20课时 用到技术:Unity3D.VS2008.NGUI2.61.GameObject 涉及项目:坦克大战项目实战 咨询qq:1840215592 课程内容简介 Unity3D游戏引擎实战开发从入门到精通课程由浅入深的介绍Unity3D的开发流程.从软件使用到API接口的使用,从成品到优化.介绍整个Unity3D的基本开发过程及开发中碰到的基础问题进行深入讲解.对代码重

Swift版iOS游戏框架Sprite Kit基础教程下册

Swift版iOS游戏框架Sprite Kit基础教程下册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C 介绍:本教程是国内唯一的Swift版的Spritekit教程.本教程基于Xcode 6.1+iOS 8.1开发环境,采用Swift语言,详细讲解Sprite Kit游戏开发的各种知识,帮助读者尽快iOS游戏开发的技能. 目录 第7章  音频和视频 1 7.1  背景音乐 1 7.1.1  添加背景音乐 1 7.1.2  控制背景音乐 5 7.1.3  设置音乐

iOS游戏框架Sprite Kit基础教程第1章编写第一个Sprite Kit程序

iOS游戏框架Sprite Kit基础教程第1章编写第一个Sprite Kit程序 程序是为了实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合.本章将以编写第一个Sprite Kit程序为主线,为开发者讲解什么是Sprite Kit.苹果账号的注册.Xcode的下载和安装.编写程序.调试等内容.选自iOS游戏框架Sprite Kit基础教程Swift版上册大学霸 1.1  Sprite Kit介绍 从iOS 7开始添加了Sprite Kit.本节将为开发者讲解什么是Sprite Ki

iOS游戏框架Sprite Kit基础教程——Swift版上册

iOS游戏框架Sprite Kit基础教程--Swift版上册 试读下载地址:http://pan.baidu.com/s/1qWBdV0C  介绍:本教程是国内唯一的Swift版的Spritekit教程.本教程基于Xcode 6.1+iOS 8.1开发环境,采用Swift语言,详细讲解Sprite Kit游戏开发的各种知识,帮助读者尽快iOS游戏开发的技能. 目录 目  录 第1章  编写第一个Sprite Kit程序 1 1.1  Sprite Kit介绍 1 1.1.1  什么是Sprit

swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程

swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 1.2.3  注册非免费苹果账号swift语言注册非免费苹果账号iOS游戏框架Sprite Kit基础教程 免费的苹果账号在开发应用程序时会受到了很多的限制,如真机测试等,所以需要注册一个非免费的苹果账号.以下是注册非免费的苹果账号的具体步骤本文选自iOS游戏框架Sprite Kit基础教程: (1)在Safari中输入网址(https://developer.apple.com/programs/),按下回车,如图1.

认识AndEngine选自Android 2D游戏引擎AndEngine快速入门教程

认识AndEngine什么是AndEngine 随着Android手机.平板的盛行,Android下的游戏也不断的变得火热.而对于游戏开发有兴趣的同学们,应该也想要学习开发游戏.虽说游戏开发的引擎较多,但是大多数都需要花费一些资金才可以正式使用.而我们这里要讲解的AndEngine则是一个免费并且开源的2D游戏引擎.对于它的使用,读者不仅不必担心授权问题,而且还可以获得AndEngine源码,在需要的时候对其进行修改.本章就来讲解如何在自己的计算机上搭建一个自己AndEngine开发平台.本文选

Android 2D游戏引擎AndEngine快速入门教程

Android 2D游戏引擎AndEngine快速入门教程 介绍:AndEngine是一款知名的Android 2D游戏引擎.该引擎代码开源,并且可以免费使用.本书详细讲解如何使用AndEngine引擎开发2D游戏. 试读下载地址:http://pan.baidu.com/s/1c0CODiw 前言 作为一款免费的手机操作系统,Android系统占据大半的手机系统份额.在Android众多的应用类型中,游戏应用由其娱乐性成为最大的分支.由于手机的操控特点,2D游戏成为Android游戏的主流,如

第一章-第二题Unity3D游戏引擎相关--By林培文

1) 此类软件是什么时候开始出现的, 这些软件是怎么说服你(陌生人)成为他们的用户的?  他们的目标都是盈利么?  他们的目标都是赚取用户的现金么?还是别的? 2004年,Unity3D诞生于丹麦哥本哈根,05年将总部设在了美国旧金山,并发布了Unity 1.0版本,支持MAC平台.随后几年,Unity3D陆续Windows.IOS及Android等平台,至2011构建完PS3和XBOX360,标志其全平台的构建完成.(参考<Unity诞生于发展> link:http://www.leipho

学unity3D游戏开发需要什么基础

如果你关注游戏行业,Unity3d游戏开发对你来说应该并不陌生,在游戏业发展如火如荼的情境下,很多人开始转行投身于游戏程序开发,而unity3D游戏开发则是他们必须了解和会用的游戏开发工具.在学习之前又应该了解哪些内容呢? 首先来了解一下unity3D游戏开发的概念,它是当今最炙手可热的游戏开发工具,它是轻松创建诸如三维视频游戏.建筑可视化.实时三维动画等类型互动内容的多平台的综合型游戏开发平台,是一个全面整合的专业游戏引擎.它可发布运行在Windows.Mac.Wii.iPhone.Windo