Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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
按钮按下时的循环功能?Unity3d C#_C#_Unity3d - Fatal编程技术网

按钮按下时的循环功能?Unity3d C#

按钮按下时的循环功能?Unity3d C#,c#,unity3d,C#,Unity3d,所以,我有一个目标。当我按下旋转按钮时,我希望它旋转。当我按下停止按钮时,我希望它停止 当它的in-void更新时,它会很好地旋转,但当它在自己的函数中旋转时,它只旋转一次。我试着使用循环,但仍然没有运气。有人能帮我吗 代码C#: 使用UnityEngine; 使用系统集合; 使用UnityEngine.UI; 公共阶层的自旋:单一行为 { 公共浮子速度=500f; 公共按钮启动器; 公共按钮塞; int测试=200; 无效开始(){ 按钮btn=starter.GetComponent();

所以,我有一个目标。当我按下旋转按钮时,我希望它旋转。当我按下停止按钮时,我希望它停止

当它的in-void更新时,它会很好地旋转,但当它在自己的函数中旋转时,它只旋转一次。我试着使用循环,但仍然没有运气。有人能帮我吗

代码C#:

使用UnityEngine;
使用系统集合;
使用UnityEngine.UI;
公共阶层的自旋:单一行为
{
公共浮子速度=500f;
公共按钮启动器;
公共按钮塞;
int测试=200;
无效开始(){
按钮btn=starter.GetComponent();
Button butn=stopper.GetComponent();
但是,onClick.AddListener(FidgetSpinnerStop);
btn.onClick.AddListener(FidgetSpinnerStart);
}
无效FidgetSpinnerStart()
{
对于(int i=0;i

提前谢谢

for循环未按预期工作,因为您没有等待帧。基本上,它会在一帧内完成所有旋转,直到最后一个旋转,你才会看到变化。等待一帧可以通过
产生返回空值,这需要一个协程函数

这最好通过协同程序来完成。您可以将布尔变量与协同程序一起使用,也可以只使用
startcroutine
stopcorroutine
。单击“开始”按钮时开始旋转对象的coorutine,然后单击“停止”按钮时停止协同路由

public float speed = 500f;
public Button starter;
public Button stopper;
bool isSpinning = false;

IEnumerator spinnerCoroutine;

void Start()
{
    //The spin function
    spinnerCoroutine = spinCOR();

    Button btn = starter.GetComponent<Button>();
    Button butn = stopper.GetComponent<Button>();

    butn.onClick.AddListener(FidgetSpinnerStop);
    btn.onClick.AddListener(FidgetSpinnerStart);
}

IEnumerator spinCOR()
{
    //Spin forever untill FidgetSpinnerStop is called 
    while (true)
    {
        transform.Rotate(Vector3.up, speed * Time.deltaTime);
        //Wait for the next frame
        yield return null;
    }
}

void FidgetSpinnerStart()
{
    //Spin only if it is not spinning
    if (!isSpinning)
    {
        isSpinning = true;
        StartCoroutine(spinnerCoroutine);
    }
}

void FidgetSpinnerStop()
{
    //Stop Spinning only if it is already spinning
    if (isSpinning)
    {
        StopCoroutine(spinnerCoroutine);
        isSpinning = false;
    }
}
公共浮动速度=500f;
公共按钮启动器;
公共按钮塞;
bool-isspining=false;
IEnumerator喷丝板协同程序;
void Start()
{
//自旋函数
spinnerCoroutine=spinCOR();
按钮btn=starter.GetComponent();
Button butn=stopper.GetComponent();
但是,onClick.AddListener(FidgetSpinnerStop);
btn.onClick.AddListener(FidgetSpinnerStart);
}
IEnumerator spinCOR()
{
//永远旋转直到调用FidgetSpinnerStop
while(true)
{
变换。旋转(矢量3.up,速度*时间。增量时间);
//等待下一帧
收益返回空;
}
}
void FidgetSpinnerStart()
{
//只有当它不旋转时才旋转
如果(!IsSpining)
{
IsSpining=true;
Start例程(spinnerCoroutine);
}
}
无效FidgetSpinnerStop()
{
//只有当它已经在旋转时才停止旋转
如果(IsSpining)
{
StopCorroutine(喷丝头Corroutine);
IsSpining=false;
}
}

下面是一个简单的类,它使用两个按钮启动和停止旋转对象,我希望它可以作为您尝试实现的起点

public class TestSpin : MonoBehaviour
{
    public float speed = 500f;
    public Button starter;
    public Button stopper;

    bool IsRotating = false;

    void Start()
    {

        Button btn = starter.GetComponent<Button>();
        Button butn = stopper.GetComponent<Button>();

        butn.onClick.AddListener(FidgetSpinnerStop);
        btn.onClick.AddListener(FidgetSpinnerStart);
    }

    void FidgetSpinnerStart()
    {
        IsRotating = true;
    }

    void FidgetSpinnerStop()
    {
        IsRotating = false;
    }

    void Update()
    {
        if (IsRotating)
            transform.Rotate(0, speed, 0);
    }
}
公共类TestSpin:MonoBehavior
{
公共浮子速度=500f;
公共按钮启动器;
公共按钮塞;
bool IsRotating=false;
void Start()
{
按钮btn=starter.GetComponent();
Button butn=stopper.GetComponent();
但是,onClick.AddListener(FidgetSpinnerStop);
btn.onClick.AddListener(FidgetSpinnerStart);
}
void FidgetSpinnerStart()
{
IsRotating=真;
}
无效FidgetSpinnerStop()
{
旋转=假;
}
无效更新()
{
如果(正在旋转)
旋转(0,速度,0);
}
}

谢谢!现在我明白了。真是个新手的错误,呵呵。再次感谢。
public class TestSpin : MonoBehaviour
{
    public float speed = 500f;
    public Button starter;
    public Button stopper;

    bool IsRotating = false;

    void Start()
    {

        Button btn = starter.GetComponent<Button>();
        Button butn = stopper.GetComponent<Button>();

        butn.onClick.AddListener(FidgetSpinnerStop);
        btn.onClick.AddListener(FidgetSpinnerStart);
    }

    void FidgetSpinnerStart()
    {
        IsRotating = true;
    }

    void FidgetSpinnerStop()
    {
        IsRotating = false;
    }

    void Update()
    {
        if (IsRotating)
            transform.Rotate(0, speed, 0);
    }
}