添加额外的生命HEART纹理2D

时间:2016-04-21 02:37:43

标签: c# unity3d

我正在开发2D游戏。

当玩家与 while ($row=mysqli_fetch_array($result)){ echo "Name: $row[fname] $row[lname] <br>"; echo "Email: $row[email] <br>"; echo "Phone Number: $row[phone] <br>"; echo "Selling: $row[sell] <br>"; echo "Price: $row[price]<br>"; } 发生碰撞时失去1颗心(最初3颗心脏),如果碰撞3次= GameOver。

这就是代码(适用于BombPrefab):

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; } } } ,我想检查玩家何时发生碰撞...如果我有3颗心无所事事,如果有1或2颗心加上额外的心脏。

BombPrefab Scrip:

HeartPrefab

1 个答案:

答案 0 :(得分:0)

首先,请不要在更新和经常运行的函数中使用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++;
    }
}

这是一个简化的解决方案,可以为您提供一个想法。它比你的更健壮,因为你可以很容易地改变开始的心脏数量,并做出像心脏过度充电的事情。只需添加基础心脏,将最大值设置为所需值,现在您可以创建一些特殊的功率增加,使心脏超过初始限制。