[英]Add extra life HEART texture 2D
我正在開發 2D 游戲。
當玩家與BOMBPrefab
碰撞時失去 1 顆心(初始 3 顆心),如果碰撞 3 次 = GameOver。
這就是代碼(適用於 BombPrefab):
using UnityEngine;
using System.Collections;
public class Heart : MonoBehaviour {
public Texture2D[] initialHeart;
private int heart;
private int many;
// Use this for initialization
void Start () {
GetComponent<GUITexture>().texture = initialHeart[0];
heart = initialHeart.Length;
}
// Update is called once per frame
void Update () {}
public bool TakeHeart()
{
if (heart < 0) {
return false;
}
if (many < (heart - 1)) {
many += 1;
GetComponent<GUITexture> ().texture = initialHeart [many];
return true;
} else {
return false;
}
}
}
我有第二個HeartPrefab
,我想檢查玩家何時發生碰撞......如果我有 3 顆心什么也不做,如果有 1 或 2 顆心 添加額外的心。
炸彈預制腳本:
using UnityEngine;
using System.Collections;
public class Bomb : MonoBehaviour
{
public AudioClip clipBomba;
private Heart heart;
private Gerenciador gerenciador;
void Awake ()
{
}
// Use this for initialization
void Start ()
{
gerenciador = FindObjectOfType (typeof(Gerenciador)) as Gerenciador;
}
// Update is called once per frame
void Update ()
{
}
void OnCollisionEnter2D (Collision2D colisor)
{
if (colisor.gameObject.tag == "floor") {
Destroy (gameObject, 2f);
} else {
if (colisor.gameObject.tag == "Bee") {
Som();
heart= GameObject.FindGameObjectWithTag ("Heart").GetComponent<Vidas> () as Vidas;
if (heart.TakeHeart ()) {
Destroy (gameObject);
} else {
gerenciador.GameOver ("GameOver");
}
}
}
}
void Som()
{
GetComponent<AudioSource> ().clip = clipBomb;
AudioSource.PlayClipAtPoint (clipBomb, transform.position);
}
}
首先盡量不要在更新和經常運行的函數中使用GetComponent<>()
。 最好在Start()
方法中緩存組件。 使用FindGameObjectWith...()
也不是很有效。
我會用不同的方式,每個心臟作為一個單獨的 UI 元素(切換),有兩個狀態活動和非活動。 然后你的玩家應該有一個列表,列出那些允許受到傷害並獲得生命的心臟和方法。
int currentHeartsCount = 3;
int maxHeartsCount = 3;
List<Heart> hearts = new List<Heart>();
public void TakeDamage(int damage) {
ChangeHearts(-damage);
}
public void GainLife(int life) {
ChangeHearts(life);
}
private void ChangeHearts(int amount) {
currentHeartsCount += amount;
if(currentHeartsCount> maxHeartsCount)
currentHeartsCount = maxHeartsCount;
if(currentHeartsCount<=0) {
// call player dead code
}
int i = 1;
foreach(Heart heart in hearts) {
heart.SetHeartActive(i<=currentHeartsCount);
i++;
}
}
這是一個簡化的解決方案,可以給您一個想法。 它比你的更強大,因為你可以很容易地改變開始的心數,並使像心“過度充電”這樣的東西。 只需添加基礎心,將最大值設置為所需值,現在您可以創建一些特殊的能量提升,增加心超過初始限制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.