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

这是我和一名同学一起制作的《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,欢迎指点~~

时间: 2024-07-29 18:28:11

[Unity 3d]荒岛逃生游戏制作的相关文章

Unity 3D正在革命游戏开发市场

转自知乎 [高风险的大型游戏开发] 传统上来说,开发游戏是一件费时费力的事情,而且80%的情况下开发游戏这件事就是一个灾难.因为游戏是一个交互艺术,这个交互不仅体现在娱乐方式上,也体现在开发过程中.修修补补是开发游戏的家常便饭.但是,由于传统的游戏开发至少涉及策划.美术和程序,因此任何一点微小的调整都需要各个环节通力合作才能勉强达成.而游戏的品质如何,往往要到最后开发出来一个版本才能看到.这时,项目往往已经开发到50%以上的进度了,无论做什么调整,都意味着巨大的先期投入. 然而幸运的是.虽然开发

小白学习Unity 3D做经典游戏坦克大战日常

老师 | Trigger 学习者 |小白 出品 | Siki 学院 Hello,小伙伴们.接下来小白跟Trigger老师做一款2D游戏坦克大战.从素材.代码到场景和UI的游戏开发.小白把日常遇到的问题做一个记录贴,让各位小伙伴充分了解Untiy 3D基本游戏开发和一些小白容易疏忽的问题.Unity 3D有着非常便利的管理和编码功能.现在非常热门的MOBA游戏王者荣耀,也是用Unity 3D 开发的呢!用其他编程语言例如: java / kotlin 和 Object-C / swift 原生游戏

Unity 3D 中新建游戏物体过程中 Intantiate Transform 空物体和本体之间的关系

我们通过Unity构建场景的过程中,经常发现一个现象,就是物体在拖进场景中后,我们会发现物体是反的,通过改变物体的rotation属性后,得到了正确的方向,可物体的坐标系又变得和默认坐标系(右上角系统自带的坐标系)不一样了,这样就给后续的脚本工作(通常是控制(Transform)脚本和生成(Intantiate)脚本)带来了困扰,因为脚本写作的过程中是按照正常的坐标系来的,物体的脚本和默认的不一样了就会出现诸如按下键物体向上的现象. 其实,在游戏场景的创建过程中,不仅仅是物体的方向,一个游戏物体

Unity 3D酷跑类游戏场景循环

Unity 3D酷跑游戏场景循环 ////////////////2015/07/05///////////// ///////////////by xbw//////////////////// ///////////////环境 Unity4.6.1////// 经过一上午的学习与实验,终于实现了3D酷跑游戏的场景循环..大喜.遂分享交流,共同学习. 在场景中建两个Plane作为地面,分别命名为Plane1,Plane2: Position 分别设为0,0,50:0,0,150: Scale

Unity 3D入门简介

最近在刚开始学习Unity 3D,在这里记录一下学习心得和学习笔记,边学边写,可能会比较零散.好了,废话不多说,今天从Unity 3D入门写起,主要简要介绍一下Unity 3D的和一些学习资料.以下如果不作特别说明,均是指Windows平台的Unity 3D,版本是4.5.1f3. Unity 3D是一款游戏开发引擎,目前支持2D和3D游戏的开发,其最大的优势就是跨平台性非常好,可以很容易的将PC端制作的游戏移植到Android.IOS等移动平台,当然也可以创建网页游戏.刚开始进行Unity 3

Unity 3D之使用GameObject创建简单的可移动的对象

在Unity 3D上开发游戏,需要游戏脚本与3D建模相结合,将写好的脚本拖曳到3D对象里从而实现效果. 下面是一个小实例,使用Unity 3D实现一个可控制移动的小人,小人可以向前.向后.向左和向右移动. 1.通过 File - > New Scene 创建一个场景: 2.点击Create -> Create Empty 创建一个GameObject,它即是游戏对象: 3.在Inspector 面板里将此对象的名字改为 "hero" (记得按回车键),等一下再脚本中将通过此

【Unity 3D】学习笔记二十九:游戏实例——简单小地图制作

任何的学习,光看不练是学不好的.所以这次就总结回顾下怎么制作MMROPG类游戏中的小地图.在MMROPG类游戏里,主角在游戏世界里走动时,一般在屏幕右上角都会有一个区域来显示当前游戏场景的小地图.主角在游戏世界里走动,小地图里代表着主角的小标记也会随之移动.那怎么实现咧? 首先需要确定两个贴图,第一个是右上角的小地图背景贴图,应该是从Y轴俯视向下截取主角所在的位置大地图.第二个就是主角的位置大贴图.在本例中,因为没有学习unity地图制作,所以地图用一个面对象代替,主角用立方体代替,使用GUI来

【Unity 3D】学习笔记三十三:游戏元素——天空盒子

天空盒子 一般的3D游戏都会有着北京百年一遇的蓝天,让人惊叹不已.其实天空这个效果没有什么神秘的只需用到天空盒子这个组件就行,可以将天空设想成一个巨大的盒子,这个盒子将整个游戏视图和所有的游戏元素包含其中.在unity中制作天空盒子非常方便,只需要像设置其他组件一样设置下就行了.在制作天空盒子之前,我们需要搜集一些天空的贴图,不过,unity很方便的为开发者提供了天空盒子的资源包.首先在project视图中点击鼠标右键,然后选择import package--skyboxes即可添加天空盒子的资

【Unity 3D】学习笔记三十四:游戏元素——常用编辑器组件

常用编辑器组件 unity的特色之一就是编辑器可视化,很多常用的功能都可以在编辑器中完成.常用的编辑器可分为两种:原有组件和拓展组件.原有组件是编辑器原生的一些功能,拓展组件是编辑器智商通过脚本拓展的新功能. 摄像机 摄像机是unity最为核心组件之一,游戏界面中显示的一切内容都得需要摄像机来照射才能显示.摄像机组件的参数如下: clear flags:背景显示内容,默认的是skybox.前提是必须在render settings 中设置天空盒子材质. background:背景显示颜色,如果没