检测光线投射中的第二次点击?

时间:2015-10-29 02:16:46

标签: c# unity3d

当玩家点击开火按钮时,将实例化十字准线图像,当他们再次点击时,我希望十字准线图像的名称更改为繁荣。但是,当十字准线实例化时,名称已经繁荣。谢谢

if (Input.GetMouseButtonDown(0))
{
    if (hitInfo.transform.gameObject.tag == "fire")
    {
        if (crosshair == 1)
        {
            GameObject Aimz = Instantiate(aim, rb2D.transform.position, rb2D.transform.rotation) as GameObject;
            Aimz.name = "crosshair";

            if (Input.GetMouseButtonDown(0))
            {
                if (hitInfo.transform.gameObject.tag == "fire")
                {
                    Aimz.name = "boom";
                }

3 个答案:

答案 0 :(得分:0)

您是否尝试过Input.GetMouseButtonUp(0)?按住按钮可持续几帧。当你在代码开始时已经完成它时,也没有必要检查按钮状态,因为它是相同的。

如果您仍有问题,请提供更大范围的代码。可能你的Aimz可以设置为局部变量并检查为null而不是那么讨厌if (crosshair == 1)

答案 1 :(得分:0)

您检查第二个鼠标按钮是否在您检查第一个的相同框架中按下。 Input.GetMouseButtonDown()不会更改此帧。因此,Aimz.name总是被赋予" boom"只要单击鼠标按钮,因为if(Input ...)都将为true。

正确的解决方案是

if (Input.GetMouseButtonDown(0) && hitInfo.transform.gameObject.tag == "fire")
{
    if (Aimz.name == "") // "" = whatever your Aimz.name name is before you assign "crosshair" to it
    {
        Aimz.name = "crosshair";
        // Do your "crosshair" stuff here
    } 
    else 
    {
        Aimz.name = "boom";
        // Do your "boom" stuff here
    }
}

答案 2 :(得分:0)

您是否只需在Aimz上附上一个小脚本,您可以在其中计算点击次数?使用一种方法,在x秒后将点击次数恢复为零。所以看起来有点像这样:

public int NumberOfClicks;
private bool Invoked;

void Start(){
    Invoked = false;
}

void Update(){
    if(NumberOfClicks == 1 && !Invoked){
        gameObject.name = "crosshair";
        Invoke("RevertToZero", 2);
        Invoked = true;
    }

    if(NumberOfClicks == 2 ){
        gameObject.name = "boom";
    }
}

void RevertToZero(){
     NumberOfClicks = 0;
     Invoked = false;
}