AutoCAD 3DMAX C语言 Pro/E UG JAVA编程 PHP编程 Maya动画 Matlab应用 Android
Photoshop Word Excel flash VB编程 VC编程 Coreldraw SolidWorks A Designer Unity3D
 首页 > Unity3D

【Unity C#编程】跑动游戏(6):GUI和粒子特效

51自学网 2014-05-24 http://www.51zixue.net

信息化的GUI

只要还有助力,Runner就可以在飞行过程中助力自身。实际上,有效的助力是非常有用的,我们在GUI上给它添加一个显示,显示经过的距离。

使用GUIText 组件创建一个新的对象,作为GUI的子。位置为(0.01, 0.99, 0),把Anchor设置为upper left,字体大小是20,normal字体,命名为Boosts Text。

创建另一个对象,命名为Distance Text。位置设置成(0.5, 0.99, 0),字体大小30,bold字体。Anchor为upper center。

给这两个对象在GUIManager 中添加两个变量,并指定它们。

1
public GUIText boostsText, distanceText, gameOverText, instructionsText, runnerText;
boosts distance
gui manager

Boosts和distance.

给GUIManager添加两个静态方法, 可以让Runner用来通知GUI,移动距离的改变和boost计算。由于在那些方法中管理器要用非静态变量,我们添加一个静态变量,引用它自身。那样静态代码可以获得具有GUI文本元素的组件实例。

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
private static GUIManager instance;
 
void Start () {
instance = this;
GameEventManager.GameStart += GameStart;
GameEventManager.GameOver += GameOver;
gameOverText.enabled = false;
}
 
public static void SetBoosts(int boosts){
instance.boostsText.text = boosts.ToString();
}
 
public static void SetDistance(float distance){
instance.distanceText.text = distance.ToString("f0");
}
现在要做的就是让 Runner 在boost的距离或数量改变时调用那些方法。
void Update () {
if(Input.GetButtonDown("Jump")){
if(touchingPlatform){
rigidbody.AddForce(jumpVelocity, ForceMode.VelocityChange);
touchingPlatform = false;
}
else if(boosts > 0){
rigidbody.AddForce(boostVelocity, ForceMode.VelocityChange);
boosts -= 1;
GUIManager.SetBoosts(boosts);
}
}
distanceTraveled = transform.localPosition.x;
GUIManager.SetDistance(distanceTraveled);
 
if(transform.localPosition.y < gameOverY){
GameEventManager.TriggerGameOver();
}
}
 
private void GameStart () {
boosts = 0;
GUIManager.SetBoosts(boosts);
distanceTraveled = 0f;
GUIManager.SetDistance(distanceTraveled);
transform.localPosition = startPosition;
renderer.enabled = true;
rigidbody.isKinematic = false;
enabled = true;
}
 
public static void AddBoost(){
boosts += 1;
GUIManager.SetBoosts(boosts);
}

完整的 GUI.

粒子特效

到现在为止,我们已经建立了一个功能性的游戏,但是感觉有点空。添加一些灰尘例子来填充空余的空间,加强深度感和速度感。

创 建一个新的粒子系统(GameObject / Create Other / Particle System) ,命名为 Dust Emitter。把它作为Runner的子,位置是(25, 0, 0),并且重置它的rotation,这样,它就会永远停在相机视图的右侧。

设 置Start Lifetime为常量数值6至10之间的随机值。把Start SpeedI设置成0,这样就能得到不同生命周期的静止粒子。把Simulation Space设置为world,这样粒子就不会随着Runner移动。为了增加种类,把Start Size设置为0.2到0.8之间的随机值。

把shape改为box,dimension为(1, 30, 10),这样就有了一个较大的生产区域,把Emission的Rate改为20。

激活 Velocity Over Lifetime, 设置其使用世界空间,使用两个常量之间的随机范围,向量(-1, -1, 0) 和 (-4, 1, 0)。这样粒子就有了一些独立的移动。

最后激活 Color over Lifetime,改为gradient,这样它就有100%的0透明值。这个给粒子添加一些衰减效果。

接下来,复制这个粒子系统,保持它为Runner的子,重置其位置,并命名为Trail Emitter。用这个作为Runner身后的冷凝追踪效果。

把Shape 改为Mesh 并将其设置成cube (通过点击小圆点), 停用 Velocity over Lifetime。

将Start Lifetime 减少到1和2之间,Start Size在0.2和0.4之间,让痕迹保持微妙简短。

dust trail scene

Particle systems(粒子系统)

由于我们只想在游戏过程中生成粒子,所以创建为它们创建一个管理器。在Managers文件夹添加一个新的C#脚本,命名为ParticleSystemManager。再给Managers创建一个子对象,起个合适的名字,然后给它指定管理器脚本。

ParticleSystemManager所要做的是在适当的时间打开/关闭粒子系统。用数组变量particleSystems来持有所有需要管理的发射器的引用。在这种情况下,这就是我们刚刚建立的两个粒子发射器,但是管理器可以处理任何你想创建的发射器。

通过拖拽两个粒子发射器到Particle Systems字段来指定它们。

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
using UnityEngine;
 
public class ParticleSystemManager : MonoBehaviour {
 
public ParticleSystem[] particleSystems;
 
void Start () {
GameEventManager.GameStart += GameStart;
GameEventManager.GameOver += GameOver;
GameOver();
}
 
private void GameStart () {
for(int i = 0; i < particleSystems.Length; i++){
particleSystems[i].Clear();
particleSystems[i].enableEmission = true;
}
}
 
private void GameOver () {
for(int i = 0; i < particleSystems.Length; i++){
particleSystems[i].enableEmission = false;
}
}
}
manager game

粒子实现的效果

到此游戏就完成了!游戏中可以跑动、跳跃、留下痕迹、收集能量,显示得分,还有滚动的背景。这是一个很好地原型,多加修饰和改进,你就可以把它转换成完整的游戏。

Downloads

原文:http://catlikecoding.com/unity/tutorials/runner/


建议使用电驴(eMule)下载分享的资源。

说明
:本教程来源互联网或网友分享或出版商宣传分享,仅为学习研究或媒体推广,51zixue.net不保证资料的完整性。
 
上一篇:【Unity C#编程】图表 可视化数据:3D展示  下一篇:【Unity C#编程】跑动游戏(5):游戏结束等