【问题标题】:Toggle between function in Unity在 Unity 中的功能之间切换
【发布时间】:2016-07-22 00:41:32
【问题描述】:

我想用鼠标左键在功能之间切换。所以基本上,我希望我的屏幕首先显示func1func1 被激活),然后当你按下鼠标左键时,func1 被停用,func2 被激活,然后当你按下鼠标左键时再次按下按钮func2 被禁用,func3 被激活,当你再次按下鼠标左键时,func3 被禁用,func1 被激活,并且一直循环。

bool tappedOnce = true;
    bool tappedTwice = false;
    bool tappedThrice = false;

    void func1() {print("func1");}
    void func2() {print ("func2");}
    void func3() {print ("func3");}
    void toggle()
    {
       if (Input.GetKeyDown(KeyCode.Mouse0)&& tappedOnce == false){tappedOnce = true; func1();}

       if (Input.GetKeyDown(KeyCode.Mouse0)&& tappedOnce && tappedTwice == false ){func2(); tappedTwice = true;}
       if (Input.GetKeyDown(KeyCode.Mouse0)&& tappedOnce && tappedTwice && tappedThrice == false){func3(); tappedOnce = false; tappedTwice = false;}

    }

在这里问这个问题是因为这个问题在 - 游戏开发堆栈交换上被标记为主题外 - 他们建议我在这里问这个问题。

【问题讨论】:

    标签: c# unityscript


    【解决方案1】:

    在两个以上不同的功能之间切换时,我建议使用整数和 switch case 语句,如下所示:

    using UnityEngine;
    using System.Collections;
    
    public class MouseTest : MonoBehaviour {
    
    //conditional
    private int clickNumber;
    
    //run code
    void Update () 
    {
        toggle();
    }
    
    //methods to run
    void func0() {Debug.Log ("func0");}
    void func1() {Debug.Log ("func1");}
    void func2() {Debug.Log ("func2");}
    void func3() {Debug.Log ("func3");}
    
    //conditional code
    void toggle()
    {
        if(Input.GetMouseButtonDown(0))
            clickNumber += 1;
    
        switch (clickNumber)
        {
        case 0:
            func0();
            break;
    
        case 1:
            func1();
            break;
    
        case 2:
            func2();
            break;
    
        case 3:
            func3();
            break;
    
        default:
            break;
        }
    
        //set clickNumber to 0 when greater than the number of methods
        if(clickNumber > 3)
            clickNumber = 0;
    }
    
    }
    

    更改最后一个 if 语句的编号以将更多函数添加到列表中。

    【讨论】:

    • 由于某种原因,它不会从函数 2 回到函数 1。
    • 它以递增的顺序循环遍历这些方法。如果你想在它们之间循环,添加类似if(Input.GetMouseButtonDown(1)){clickNumber += -1;}
    • 我的意思是功能 3* 抱歉。它不会从函数 3 回到函数 0
    • 嗯,对我来说很好用。尝试将if(clickNumber > 3) if 语句移动到switch 语句之前(就在if(Input.GetMouseButtonDown(0)) 之后)。还要确保将其保存为名为 MouseTest 的 C# 脚本,并将其附加到游戏对象。
    • 为什么答案不被接受?脚本有什么问题?
    猜你喜欢
    • 1970-01-01
    • 2015-03-27
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多