Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 添加额外的生命心脏纹理2D_C#_Unity3d - Fatal编程技术网

C# 添加额外的生命心脏纹理2D

C# 添加额外的生命心脏纹理2D,c#,unity3d,C#,Unity3d,我正在做2D游戏 当玩家与bombprefate碰撞时,如果碰撞3次=游戏结束,则失去1颗心脏(最初的3颗心脏) 这就是代码(适用于爆炸预制): 首先,不要在更新和经常运行的函数中使用GetComponent()。最好将组件缓存在Start()方法中。使用FindGameObjectWith…()也不是很有效 我会让它不同,每个心脏作为一个单独的UI元素(切换),有两种状态活跃和不活跃。然后你的玩家应该有一个允许承受伤害和获得生命的心和方法的列表 int currentHeartsCount =

我正在做2D游戏

当玩家与
bombprefate
碰撞时,如果碰撞3次=游戏结束,则失去1颗心脏(最初的3颗心脏)

这就是代码(适用于爆炸预制):


首先,不要在更新和经常运行的函数中使用
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++;
    }
}
int currentHeartScont=3;
int-maxheartscont=3;
List hearts=新列表();
公共空间损坏(内部损坏){
更改(损坏);
} 
公共无效收益生命(int生命){
改变心(生活);
}
私人无效更改(整数金额){
currentHeartsCount+=金额;
如果(CurrentHeartScont>MaxHeartScont)
CurrentHeartScont=MaxHeartScont;

如果(CurrentHeartsCount)您可以发布
bombprefabride
的代码吗?是的,诅咒的代码已经更新。
   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);
    }
}
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++;
    }
}