Unity学习之GUI基础

来源:互联网 发布:李华清经济学考研知乎 编辑:程序博客网 时间:2024/05/17 11:36

unity学习,希望我的博客能给喜欢unity的朋友带来帮助


今天学习了新的内容:GUI


GUI控制利用一类被称为OnGUI()的函数,只要在控制脚本激活的状态下,OnGUI函数可以在每帧调用,就像Update()函数一样。


GUI可以在unity界面中添加文本和按钮等。


下面用GUI来完善一下做过的飞机大战游戏,可以让它在游戏界面中显示我方飞机的生命值和得分。


完成如图的效果:



代码如下:


  1. using UnityEngine;
  2. using System.Collections;

  3. public class GUIText : MonoBehaviour {

  4.     public int lifeTime = 0;//我方生命值
  5.     public int score = 0;//得分
  6.     public static GUIText instance;//管理对象初始化,自身定为静态变量
  7.     public Player player;//获取我方飞机

  8.     void Start()
  9.     {
  10.         instance = this;
  11.         player = GameObject.FindGameObjectWithTag("Player").GetComponent<Player>();
  12.     }
  13.     void OnGUI()
  14.     {
  15.         lifeTime = player.i;
  16.         GUI.Label(new Rect(20, 30, 100, 20), "生命值为:" + lifeTime);
  17.         GUI.Label(new Rect(20, 70, 100, 20), "分数:" + score);
  18.     }
  19. }

然后再我方飞机和敌方飞机的脚本中调用:


//敌方飞机中的调用

  1. void OnTriggerEnter(Collider col)
  2.     {
  3.         if (col.tag == "Myrocket")
  4.         {
  5.             i--;
  6.             print(i);
  7.             if (i <= 0)
  8.             {
  9.                 GUIText.instance.score++;//调用
  10.                 Destroy(this.gameObject);
  11.             }
  12.         }
  13.     }


//我方飞机中的调用

  1. void OnTriggerEnter(Collider col)
  2.     {
  3.         if (col.tag == "EnemyRocket")
  4.         {
  5.             i--;
  6.             GUIText.instance.lifeTime = i;//调用
  7.             print(i);
  8.             if (i <= 0)
  9.             {
  10.                 Destroy(this.gameObject);
  11.             }
  12.         }
  13.     }


飞机大战中,敌方飞机不可能只有一架,还会出现跟多的飞机,下面我们就来实现敌方飞机一波一波的出现,其中用到了数组和协程的知识点。


完成如图效果:



在敌方飞机中添加代码,代码如下:


  1. using UnityEngine;
  2. using System.Collections;

  3. public class Enemy : MonoBehaviour {

  4.     //1、对象数组  2、协程
  5.     public GameObject[] enemy;//声明对象数组

  6.     int number = 5;
  7.         void Start () {
  8.         StartCoroutine("Spawn");
  9.        // StartCoroutine(Spawn());//也可以,两种写法
  10.         }       
  11.         void Update () {
  12.        
  13.         }

  14.     IEnumerator Spawn() {
  15.         yield return new WaitForSeconds(1f);//开始等待5秒
  16.         while (true)
  17.         {
  18.             while (number > 0)
  19.             {
  20.                 GameObject go = enemy[Random.Range(0, enemy.Length)];
  21.                 Vector3 pos = new Vector3(Random.Range(-4, 4), -10.98809f, -14.5748f);
  22.                 GameObject.Instantiate(go, pos, transform.rotation);

  23.                 yield return new WaitForSeconds(2f);//每隔两秒克隆1个
  24.                 number--;
  25.             }
  26.             number = 5;
  27.             yield return new WaitForSeconds(4f);//每隔4秒开始下一波
  28.         }
  29.     }
  30. }

这个代码中我们定义的是对象数组,所以在属性中不要忘了下一步:



更多精彩请点击 http://www.gopedu.com/article


0 0
原创粉丝点击