gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 13:54:15 26 4
gpt4 key购买 nike

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

它在 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com