说起来保卫星城最重要的星城还没讲,其实星城就是一个太空站,而我们的任务就是保护太空站不被敌人破坏。

保卫星城-太空站篇

一、太空站的功能

1.太空站在太空肯定是旋转的,所以首先它要有自转旋转的功能。
2.太空站由八个小的小太空站区域组成,因此把小太空站区域做成预制体,拼成大太空站。
3.每个小的太空站区域:又要会被敌人攻击,第一次被攻击 防护罩毁坏,第二次直接游戏结束。
4.游戏商店里可以对防护罩毁坏的,太空区域进行修复功能。

二、功能的实现

1.太空站自转

using UnityEngine;

namespace ns
{
    ///<summary>
    ///太空站自转
    ///</summary>
	public class SpaceStationRotate : MonoBehaviour
    {
        public float speed = 30f;

        void Update()
        {
            transform.Rotate(Vector3.forward * speed * Time.deltaTime, Space.World);
        }
    }

}

2.小太空站预制体
为它添加上 collider2D 和 Rigidbody2D,在添加上一个新脚本,做成预制体。
在这里插入图片描述
3.太空站防护罩毁坏 和 太空站毁坏

using UnityEngine;

namespace ns
{
    ///<summary>
    ///空间站
    ///1.护盾的功能
    ///2.修复的功能
    ///</summary>
	public class SpaceStation : MonoBehaviour
    {
        private bool isBreaked = false;
        private Animator anim;
        private AnimatorStateInfo animatorInfo;

        private void Start()
        {
            anim = this.GetComponentInChildren<Animator>();
            anim.gameObject.SetActive(false);
        }

        private void Update()
        {
            if (isBreaked && anim.gameObject.activeSelf)
            {
                animatorInfo = anim.GetCurrentAnimatorStateInfo(0);
                if(animatorInfo.normalizedTime >= 1)
                {
                    SpriteRenderer spriteRender = this.gameObject.GetComponent<SpriteRenderer>();
                    string name = Random.Range(1, 4).ToString();
                    spriteRender.sprite = ResourcesManager.GetInstance().Load<Sprite>(name);
                    anim.gameObject.SetActive(false);
                }
            }
               
        }

        private void OnTriggerEnter2D(Collider2D collision)
        {
            if (collision.gameObject.tag != "Enemy")
                return;

            if (anim.gameObject.activeSelf)
                return;

            if (isBreaked == false)
            {
                isBreaked = true;

                anim.gameObject.SetActive(true);

                if (collision.gameObject.tag == "Enemy")
                {
                    Enemy_1 scr = collision.gameObject.GetComponent<Enemy_1>();

                    scr.ChangeHp(99999);
                }
            }
            else
            {
                Debug.Log("游戏结束");
                Time.timeScale = 0;
            }
            
        }

        public void RepairSpaceStation()
        {
            SpriteRenderer spriteRender = this.gameObject.GetComponent<SpriteRenderer>();
            spriteRender.sprite = ResourcesManager.GetInstance().Load<Sprite>("0");
            isBreaked = false; 
        }
    }

}

4.护盾修复
这个功能放在脚本里做为一个可被外部调用的方法,到时候只用在商店调用就行了。

  public void RepairSpaceStation()
        {
            SpriteRenderer spriteRender = this.gameObject.GetComponent<SpriteRenderer>();
            spriteRender.sprite = ResourcesManager.GetInstance().Load<Sprite>("0");
            isBreaked = false; 
        }

更多推荐