【个人Unity笔记】{基础} 2D小游戏一个简单的自动刷怪脚本
2016-10-28 14:19
781 查看
效果如图,小游戏的话效果还可以
脚本使用DOTween做了顿帧
在场景中新建一个空物体GameController
创建一个C#脚本GameController.cs
把下面的复制进去
分数的加减是写在怪物自己的脚本里面的
这是type01怪物死亡时,加一分,场上怪物减一,同种类怪物减一
此脚本只负责刷怪,脚本里面public GameObject很多,在其他脚本中直接GameObject.Find就可以获取到,比如怪物的死亡,死亡动画我是另外做了一个Prefab,死亡的Prefab自动播放死亡动画,播完销毁,所以怪物死亡的时候在原地实例化死亡的Prefab,随后销毁自己。这个死亡的Prefab我就放在这个脚本里,其他脚本直接就能获取到,因为GameController始终存在与场景中。
脚本使用DOTween做了顿帧
在场景中新建一个空物体GameController
创建一个C#脚本GameController.cs
把下面的复制进去
using UnityEngine; using System.Collections; using DG.Tweening; public class GameController :MonoBehaviour { [Header("第一种敌人")] public GameObject type01;// 存放敌人prefab public GameObject type01Death;// 存放敌人死亡prefab public int type01Count;// type01每一波敌人的个数 public float type01spawnTime;// 每一波中生成下一个敌人的时间间隔 public int type01MaxNum;//场上最大怪物数量 public int type01EnemyNum;//场上的怪物数量 [Header("第二种敌人")] public GameObject type02; public GameObject type02Missile; public GameObject type02Death;// 存放敌人死亡prefab public int type02ShowScore;//type02多少分以后才会生成 public int type02Count;// type02每一波敌人的个数 public float type02spawnTime;// 每一波中生成下一个敌人的时间间隔 public int type02MaxNum;//场上最大怪物数量 public int type02EnemyNum;//场上的怪物数量 [Header("第三种敌人")] public GameObject type03; public GameObject type03Death;// 存放敌人死亡prefab public int type03ShowScore;//type03多少分以后才会生成 public int type03Count; public float type03spawnTime;// 每一波中生成下一个敌人的时间间隔 public int type03MaxNum;//场上最大怪物数量 public int type03EnemyNum;//场上的怪物数量 [Header("开始游戏后玩家的准备时间")] public float startWait;// 开始游戏后玩家的准备时间 [Header("生成下一波敌人的等待时间")] public float waveWait;// 生成下一波敌人的等待时间 [Header("场上最大怪物总数量")] public int MaxEnemyNum;//场上最大怪物数量 [System.NonSerialized] public float HitEndTime;//打击感 [System.NonSerialized] public int ScoreLate=1; //[System.NonSerialized] public int Score;//分数 //[System.NonSerialized] public int EnemyNum;//场上的怪物数量 void Start() { StartCoroutine(spawnWaves()); } void Update() { //击中敌人顿帧 if(HitEndTime < Time.realtimeSinceStartup) Time.timeScale = 1f; if(Score>= ScoreLate) { ScoreLate = Score + 1; DOTween.Goto("MainCamShake",0f,true); Time.timeScale = 0.5f; HitEndTime = Time.realtimeSinceStartup + 0.1f; } } // 协同函数 IEnumerator spawnWaves() { // 开始游戏后,不会立即有敌人,需要给玩家一些准备时间waitTime yield return new WaitForSeconds(startWait); // 循环生成一波一波的敌人 while(EnemyNum<= MaxEnemyNum) { Quaternion spawnRotation = Quaternion.identity; //生成type01 for(int i = 0 ; i < type01Count ; ++i) { if(type01EnemyNum< type01MaxNum) { Vector3 spawnPosition = new Vector3(Random.Range(-8f, 8f), -3f, 0f);//这里刷怪位置可以修改成你要的位置 Instantiate(type01, spawnPosition, spawnRotation); type01EnemyNum++; EnemyNum++; } // 每个敌人生成有时间间隔 yield return new WaitForSeconds(type01spawnTime); } //生成type02 for(int i = 0 ; i < type02Count ; ++i) { if(Score >= type02ShowScore & type02EnemyNum < type02MaxNum) { float[] enemy0002spawn = { -7f, 7f, 7f };//enemy0002刷新位置X坐标 Instantiate(type02, new Vector3(enemy0002spawn[Random.Range(0, 2)], -3f, 0f), spawnRotation); type02EnemyNum++; EnemyNum++; } // 每个敌人生成有时间间隔 yield return new WaitForSeconds(type02spawnTime); } //生成type03 for(int i = 0 ; i < type03Count ; ++i) { //加入type03 } yield return new WaitForSeconds(waveWait); } } }
分数的加减是写在怪物自己的脚本里面的
这是type01怪物死亡时,加一分,场上怪物减一,同种类怪物减一
void OnTriggerEnter(Collider coll) { if(coll.gameObject.name == "Weapon") { GameControll.GetComponent<GameController>().Score += 1; GameControll.GetComponent<GameController>().type01EnemyNum -= 1; GameControll.GetComponent<GameController>().EnemyNum -= 1; Instantiate(GameControll.GetComponent<GameController>().type01Death, gameObject.transform.position, gameObject.transform.localRotation); Destroy(gameObject); } }
此脚本只负责刷怪,脚本里面public GameObject很多,在其他脚本中直接GameObject.Find就可以获取到,比如怪物的死亡,死亡动画我是另外做了一个Prefab,死亡的Prefab自动播放死亡动画,播完销毁,所以怪物死亡的时候在原地实例化死亡的Prefab,随后销毁自己。这个死亡的Prefab我就放在这个脚本里,其他脚本直接就能获取到,因为GameController始终存在与场景中。
相关文章推荐
- 【个人UNITY笔记】{基础} 2D游戏中使用Shader或Camera解决Sprite前后遮挡关系
- shell脚本学习笔记--一个简单的脚本
- shell学习笔记(2) 一个简单的shell脚本程序
- ioS开发之UI基础--UITableView简单了解(个人笔记)
- 简单算法一个(有N个人,依照顺序报123,数到3的人自动出局,问最后剩下的那个人在原来的队列中排第几)
- 【Unity3D游戏开发学习笔记】(五)灵魂降临—Unity脚本的简单运用
- 一个简单自动监控nginx 504错误的php脚本
- Unity3D个人笔记-5.脚本开发基础-8常用的方法函数
- [Unity基础]一个简单的状态机
- 用Unity做的一个小游戏,仿照一个例子写的,个人觉得文章写的不错,哈哈
- 循序渐进学java基础笔记(3)——一个简单的示例
- 一个简单的自动重启脚本
- Linu Shell 编程基础--一个简单的Shell脚本
- 一个简单的自动创建Shell脚本的脚本
- (Java2D 学习笔记系列) (一)一个简单的图像填充实例及其分析理解
- unity 场景NPC触发漫游和间隔时间自动显示对话在人物上方的简单脚本!
- 转载一个简单的lua展示【COCOS2DX-LUA 脚本开发之一】LUA语言基础在Cocos2dX游戏中使用Lua脚本进行游戏开发(基础篇)并介绍脚本在游戏中详细用途!
- Linux平台自动部署脚本的一个简单例子
- 一个简单的RMAN自动备份脚本
- Directshow学习笔记五-----一个简单的视频播放程序(个人学习总结,仅供参考)