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

标签 c# unity3d

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

它在 void Update 时运行良好,但在它自己的函数中时,它只执行一次。我尝试使用循环但仍然没有运气。谁能帮帮我?

C# 代码:

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

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

    int testing = 200;

    void Start () {

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

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

    void FidgetSpinnerStart ()
    {
        for (int i = 0; i < testing; i++) {
            transform.Rotate (Vector3.up, speed * Time.deltaTime);
            Debug.Log ("Test: " + i);
        }
    }

    void FidgetSpinnerStop ()
    {
        transform.Rotate (Vector3.up, Time.deltaTime);
    }
}

提前致谢!

最佳答案

for 循环没有按预期工作,因为您没有在等待帧。基本上,它会在一帧内完成所有的旋转,直到最后一次旋转你才会看到变化。等待一个帧可以用 yield return null; 完成,这需要协程函数。

这最好用协程来完成。您可以将 bool 变量与协程一起使用,也可以只使用 StartCoroutineStopCoroutine。单击开始按钮时启动旋转对象的协程,然后在单击停止按钮时停止协程。

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;
    }
}

关于c# - 按下按钮时的循环功能? Unity3d C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44791489/

相关文章:

c# - 如何在 View 中单击按钮时保留文本框的值,asp.net mvc

c++ - Unity 的 HLSL/Cg 预处理器工作方式不对?

unity3d - 团结 | mesh.colors 不会为我的自定义网格对象着色

C# WPF 窗口在 foreach 循环中不更新

C# Visual Unity 独立 .exe 调试符号加载问题

c# - 配置管理器类。锁定时无法编辑 ConfigurationSection 属性

c# - 在 ARCore unity 中禁用/切换跟踪平面的可视化

c# - 桌面应用程序的推送通知?

c# - 我可以使用 Input.GetAxis ("Horizontal") 来检测 Unity 中的水平滑动吗?

c# - 从 unity3d c# 调用 delphi .dll 时出错