码迷,mamicode.com
首页 > 编程语言 > 详细

[Unity 3d]荒岛逃生游戏制作

时间:2016-05-06 15:10:45      阅读:969      评论:0      收藏:0      [点我收藏+]

标签:

这是我和一名同学一起制作的《Memory Island》荒岛逃生小游戏。第一次使用Unity 3D实现,游戏过程和场景都不复杂,不过是一次很有启发也颇具成就的尝试!谢谢师哥辅导!

游戏内容很简单:玩家以第一人称视角根据线索找到金、银钥匙,寻找路线,打开各种门,找到小船,便可逃离荒岛。

在此我介绍制作思路,其中附上部分基础代码,最后演示游戏过程!

一、制作过程

1. 首先,我们在unity 3d中建立荒岛模型:树、草、土丘等,搜寻箱子、钥匙、木屋、石像、船等素材放置在岛中。

设置了天空盒材质:Material文件夹-mySkybox(material),选择Skybox/6 SidedWindow-lighting,来控制光照、天气状况。

2. 接着,我们加入unity自带的第一人称视角,为了使玩家能随机出生在场景中,我们创建了3个空物体,添加同一标签Spawn,移动到不同的位置,分别给出生场地SpawnPlace和玩家SpawnPlayer编写脚本。使用‘W‘‘A‘‘S‘‘D‘或者↑↓←→可以控制玩家移动。

SpawnPlace的脚本:

using UnityEngine;
using System.Collections;

public class SpawnPlace : MonoBehaviour {
	public GameObject[] playerSpawnArray;

	void Awake (){
		playerSpawnArray = GameObject.FindGameObjectsWithTag ("Spawn");
	}
	// Use this for initialization
	void Start () {	}
	
	// Update is called once per frame
	void Update () {}
	public GameObject GetRandomPlayerSpawn(int randNum){
		randNum = Random.Range (0, (playerSpawnArray.Length));
		if (playerSpawnArray.Length > 0) {
			return playerSpawnArray [randNum];
		} 
		else {
			return null;
		}
	}
}
玩家随机出现脚本控制:

using UnityEngine;
using System.Collections;

public class SpawnPlayer : MonoBehaviour {
	private GameObject player;
	private SpawnPlace spawnplace;
	private GameObject randSpawnPlace;
	void Awake(){
		player = GameObject.FindWithTag ("player");
		spawnplace = GameObject.FindGameObjectWithTag ("Birth").GetComponent<SpawnPlace> ();
	}
	// Use this for initialization
	void Start () {
		int randNum = 0;
		randSpawnPlace = spawnplace.GetRandomPlayerSpawn (randNum);
		player.transform.position = randSpawnPlace.transform.transform.position;
		Debug.Log ("You have spawned at" + randSpawnPlace.name);
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}
3. 打开Window-animation录制门、箱子等打开与关闭的动画,添加bool型条件,在animator动画控制器中将各状态连线,设置默认状态、什么条件下转到什么状态。给门、箱子、玩家编写脚本实现控制。

玩家通过碰到hit平面,控制门开关。玩家的脚本:

using UnityEngine;
using System.Collections;

public class door : MonoBehaviour {
	public static bool isSwitch;
	void Awake(){}
	// Use this for initialization
	void Start () {}
	
	// Update is called once per frame
	void Update () {}
	void OnTriggerEnter(Collider hit){
		if (hit.gameObject.tag == "Switch") {
			isSwitch=true;
			Destroy(hit.gameObject);
		}
	}
}
门的脚本:

using UnityEngine;
using System.Collections;

public class open : MonoBehaviour {
	private Animator anim;
	// Use this for initialization
	void Start () {
		anim = GetComponent<Animator> ();
	}
	
	// Update is called once per frame
	void Update () {
	
	}
	void FixedUpdate(){
		if (door.isSwitch == "true") {
			anim.SetBool("open",true);
		}
	}
}
4. 将物体属性中Mesh Collider下的Is Trigger打开,给门、箱子、钥匙等添加碰撞属性。具有碰撞属性能实现很多功能,如某物体发射的射线与钥匙碰撞,钥匙消失;与门碰撞,门打开。如果鼠标点击,则可以直接用MouseClickOn控制。

可以使用Raycast进行碰撞检测:

using UnityEngine;
using System.Collections;

public class raycast : MonoBehaviour {

	// Use this for initialization
	void Start () {}
	
	// Update is called once per frame
	void Update () {
		RaycastHit hit;
		if (Physics.Raycast (Transform.position, Transform.forward, out hit, 10)) {
			if(hit.collider.gameObject.tag=="wood"){
				Debug.Log ("You hit the"+hit.collider.gameObject.name);
			}
		}
	
	}
}
5. 为了营造神秘效果,我们添加粒子系统调节Prewarm,StartLifetime,InheritVelocity等属性,创造雾和篝火。添加蓝色的鬼火作为线索。给鬼火设置为点击即向石像移动。

当物体沿着预设方向匀速移动,脚本如下:

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
	public Transform target;
	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
		Vector3 dir = target.position - transform.position;
		transform.Translate (dir.normalized * Time.deltaTime);
	}
6. 最后我们创建GUI,设计开始、菜单页面,进行暂停、声音控制等。

通过  File-Build Settings创建场景,进行命名。

点击控制场景切换代码如下:

void OnMouseUp()
{
Application.LoadLevel (1);
}


二、游戏演示:

开始与菜单界面,可以选择退出、恢复:

技术分享

技术分享

玩家需要从3个箱子中找到钥匙,才能打开上方的门出去:

技术分享

窗外的世界诡异神秘

技术分享

点击即可掀开箱子,找到钥匙;点击钥匙,显示提示:

技术分享技术分享

有了钥匙,走进门门便会自己开。这里我们使用碰撞一个平板实现控制。外面的世界很精彩:

技术分享

前进:

技术分享

技术分享

遇到线索:“石像一直向往着出海”

技术分享

从众多箱子中寻找金钥匙,看到蓝色鬼火,决定向前寻找:

技术分享

技术分享

技术分享

跟着鬼火走:

技术分享

技术分享

石像面向左方,出口也许在那!

技术分享

向左走:

技术分享

真的看到了栅门!

技术分享

走进,点击左、右边栅栏,便可以打开门:

技术分享

我看到了救生之船!!

技术分享

技术分享

逃脱成功!!

技术分享

三、这里附上unity 3d重要类图,使大家能够心中有数!

技术分享


最后,谢谢阅读O(∩_∩)O,欢迎指点~~



[Unity 3d]荒岛逃生游戏制作

标签:

原文地址:http://blog.csdn.net/u012338625/article/details/51322956

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!