您的位置:首页 > 移动开发 > Unity3D

Unity学习之GUI基础

2014-12-29 20:38 337 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息