unity学习,希望我的博客能给喜欢unity的朋友带来帮助
今天学习了新的内容:GUI。
GUI控制利用一类被称为OnGUI()的函数,只要在控制脚本激活的状态下,OnGUI函数可以在每帧调用,就像Update()函数一样。
GUI可以在unity界面中添加文本和按钮等。
下面用GUI来完善一下做过的飞机大战游戏,可以让它在游戏界面中显示我方飞机的生命值和得分。
完成如图的效果:
代码如下:
- using UnityEngine;
- using System.Collections;
- public class GUIText : MonoBehaviour {
- public int lifeTime = 0;//我方生命值
- public int score = 0;//得分
- public static GUIText instance;//管理对象初始化,自身定为静态变量
- public Player player;//获取我方飞机
- void Start()
- {
- instance = this;
- player = GameObject.FindGameObjectWithTag("Player").GetComponent<Player>();
- }
- void OnGUI()
- {
- lifeTime = player.i;
- GUI.Label(new Rect(20, 30, 100, 20), "生命值为:" + lifeTime);
- GUI.Label(new Rect(20, 70, 100, 20), "分数:" + score);
- }
- }
然后再我方飞机和敌方飞机的脚本中调用:
//敌方飞机中的调用
- void OnTriggerEnter(Collider col)
- {
- if (col.tag == "Myrocket")
- {
- i--;
- print(i);
- if (i <= 0)
- {
- GUIText.instance.score++;//调用
- Destroy(this.gameObject);
- }
- }
- }
//我方飞机中的调用
- void OnTriggerEnter(Collider col)
- {
- if (col.tag == "EnemyRocket")
- {
- i--;
- GUIText.instance.lifeTime = i;//调用
- print(i);
- if (i <= 0)
- {
- Destroy(this.gameObject);
- }
- }
- }
飞机大战中,敌方飞机不可能只有一架,还会出现跟多的飞机,下面我们就来实现敌方飞机一波一波的出现,其中用到了数组和协程的知识点。
完成如图效果:
在敌方飞机中添加代码,代码如下:
- using UnityEngine;
- using System.Collections;
- public class Enemy : MonoBehaviour {
- //1、对象数组 2、协程
- public GameObject[] enemy;//声明对象数组
- int number = 5;
- void Start () {
- StartCoroutine("Spawn");
- // StartCoroutine(Spawn());//也可以,两种写法
- }
- void Update () {
-
- }
- IEnumerator Spawn() {
- yield return new WaitForSeconds(1f);//开始等待5秒
- while (true)
- {
- while (number > 0)
- {
- GameObject go = enemy[Random.Range(0, enemy.Length)];
- Vector3 pos = new Vector3(Random.Range(-4, 4), -10.98809f, -14.5748f);
- GameObject.Instantiate(go, pos, transform.rotation);
- yield return new WaitForSeconds(2f);//每隔两秒克隆1个
- number--;
- }
- number = 5;
- yield return new WaitForSeconds(4f);//每隔4秒开始下一波
- }
- }
- }
这个代码中我们定义的是对象数组,所以在属性中不要忘了下一步:
更多精彩请点击 http://www.gopedu.com/article