[C#脚本]-荒岛逃生游戏制作
来源:互联网 发布:linux 禅道 怎么启动 编辑:程序博客网 时间:2024/04/29 12:49
这是我和一名同学制作的《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 initializationvoid Start () {}// Update is called once per framevoid 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 initializationvoid 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 framevoid 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 initializationvoid Start () {}// Update is called once per framevoid 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 initializationvoid Start () {anim = GetComponent<Animator> ();}// Update is called once per framevoid 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 initializationvoid Start () {}// Update is called once per framevoid 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 initializationvoid Start () {}// Update is called once per framevoid 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,欢迎指点~~
- [C#脚本]-荒岛逃生游戏制作
- 游戏自动按键脚本3:沼泽逃生
- 贝尔实验室之荒岛逃生观后感
- Python逃生游戏
- 无领导小组讨论面试真题解析(七)—— 荒岛逃生记
- 逃生
- 逃生
- 逃生
- 逃生
- 逃生
- 逃生
- C#简单游戏外挂制作(二)
- C#制作无边框纸牌游戏
- 基于C#制作的狼人游戏介绍
- C#脚本实践(三): 集成到游戏
- C#脚本实践(三): 集成到游戏
- [unity3d]通过C#脚本操作游戏对象
- 使用C# + Managed DIrectX 制作 2D 游戏使用C# + Managed DIrectX 制作 2D 游戏
- iphone阅读器,如果要读取一个文本文件,请问你是如何处理编码问题的?另外像pdf格式的文件,你如何读取。?
- 重新部署shop++项目重复安装去除。
- js实现四则运算
- 动画,场景,声音
- 访问数据库
- [C#脚本]-荒岛逃生游戏制作
- awk NF
- windows下的 c++ socket编程
- javascript var和typeof用法理解
- 银行卡合法性校验
- 部署shop++,启动eclipse遇到内存溢出。
- objective-c 获取UIview 界面宽度语句
- iOS 对象转换成字典
- 子类与父类之间的方法重载、隐藏、重写与虚方法调用