在触发器退出subctract mana

时间:2016-12-04 15:57:39

标签: c# unity3d

我已经执行了ac#脚本来添加mana到滑块上的ontriggerEnter和Subtract mana on trigguerExit wen touch on Enemy object,但它似乎有些不对劲,脚本没有错误但是它触及了它的敌人对象所有的法术力,而不是我设定的价值。 我是c#scripting的新手,提前坦克你。 这是我的剧本

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class mana : MonoBehaviour {


public void addmana()
{
    manaBar.value += 300;

}

public void Takemana()
{
    manaBar.value -= 30;

}

public Slider manaBar;


// Use this for initialization
void Start () 
{

    manaBar.value = 300;
    if (manaBar != null)
    {
        manaBar.IsActive();
    }
}


void OnTriggerEnter(Collider other)
{
    // The switch statement checks what tag the other gameobject is, and reacts accordingly.
    switch (other.gameObject.tag)
    {
    case "manapickup":
        Debug.Log(other.gameObject.tag);
        Invoke("addmana", 0f);
        Destroy (other.gameObject);
        break;

    }
    // Finally, this line destroys the gameObject the player collided with.
    //Destroy(other.gameObject);
}

void OnTriggerExit(Collider other)
{
    // The switch statement checks what tag the other gameobject is, and reacts accordingly.
    switch (other.gameObject.tag)
    {
    case "Enemy":
        Debug.Log(other.gameObject.tag);
        Invoke("Takemana", 0f);
        break;

    }
    // Finally, this line destroys the gameObject the player collided with.
    //Destroy(other.gameObject);
}

1 个答案:

答案 0 :(得分:0)

查看您的代码似乎问题可能来自您的 Slider 组件:您确定其 maxValue 属性设置为正确的值吗?

(默认情况下,此值设置为 1 :您可以在检查器中更改它或以编程方式调用manaBar.maxValue = 1000.0f;

Slider help maxValue

另外,我建议您在case "Enemy": [...]方法的switch内移动脚本的OnTriggerEnter部分:我认为在OnTriggerExit内调用它没有任何好处方法(但我可能会错,取决于你的游戏逻辑)。

总结的一些附注:

  • 尽量保持代码的组织:一个常见的布局是_Attributes(属性)/ Monobehaviour方法(Start,Update,OnTriggerEnter,...)/自定义方法。这有助于其他人在尝试解决您的问题时,并且可以方便以后维护您的代码。
  • 尝试尊重一些编码标准(与组织的代码相同,这将从一个人/另一个代码到另一个代码变化很大):在C#方法名称中,通常以大写字母开头,而属性名称以小写字母开头。
  • 最后尝试坚持"规则"你已经为自己设定了:在这里,我看到你的一个标签是有资格的(Enemy),而另一个标签是manapickup)。