【unity 保卫星城】--- 开发笔记08(太空站篇)
·
说起来保卫星城最重要的星城还没讲,其实星城就是一个太空站,而我们的任务就是保护太空站不被敌人破坏。
保卫星城-太空站篇
一、太空站的功能
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;
}
更多推荐



所有评论(0)