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