2025年[C脚本]-荒岛逃生游戏制作

[C脚本]-荒岛逃生游戏制作这是我和一名同学制作的 Memory Island 荒岛逃生小游戏 使用 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); }

二、游戏演示:

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


讯享网



窗外的世界诡异神秘


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


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


前进:



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


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




跟着鬼火走:



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


向左走:


真的看到了栅门!


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


我看到了救生之船!!



逃脱成功!!


三、这里附上unity 3d重要类图,可以感受其中的逻辑。


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

小讯
上一篇 2025-04-02 20:50
下一篇 2025-02-20 12:08

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/128014.html