基本上,我尝试做的是按Z键 - 它执行旋转功能,X - 它执行停止旋转的功能。之前,我有完美的UI按钮,现在我尝试按钮按钮但没有任何反应。
另外,如果您可以建议如何让它开始旋转并停止旋转,只需按下" Space"按钮,那很棒。
到目前为止我的代码:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class spin : MonoBehaviour
{
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);
if (Input.GetKey(KeyCode.Z)) {
FidgetSpinnerStart();
}
if (Input.GetKey(KeyCode.X)) {
FidgetSpinnerStop();
}
}
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;
}
}
}
感谢。
答案 0 :(得分:1)
执行array
时,您的输入逻辑仅执行一次。
将它放在Start()
方法中以检查每一帧。
在这种情况下,删除协同程序并将其逻辑(不带Update()
- 循环)放入while
方法中。
Update()
答案 1 :(得分:1)
您的代码中只有两个问题:
1 。检查Start()
功能中的按键。
Start()
将被调用一次,而Update()
函数将在每帧调用。
您需要使用Update()
函数每帧不断轮询输入。
2 。使用Input.GetKey()
函数检查按键。
Input.GetKey()
函数可以在多个帧上多次返回true。虽然您现在可能没有看到任何问题,但这是因为isSpinning
变量可以防止出现问题,但如果您想在if (Input.GetKey(KeyCode.Z))
代码中直接添加更多代码,则会遇到问题代码将在一帧中多次执行。
您需要使用Input.GetKeyDown()
功能。
public class spin : MonoBehaviour
{
public float speed = 500f;
public Button starter;
public Button stopper;
bool isSpinning = false;
IEnumerator spinnerCoroutine;
void Start()
{
spinnerCoroutine = spinCOR();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Z)) {
FidgetSpinnerStart();
}
if (Input.GetKeyDown(KeyCode.X)) {
FidgetSpinnerStop();
}
}
IEnumerator spinCOR()
{
//Spin forever until 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;
}
}
}
另外,如果您可以建议如何让它开始旋转和停止 只按#&#34; Space&#34;按钮,那很棒
您可以使用KeyCode.Space
执行此操作。检查是否按下了Space键,然后在开始/停止协程之前检查isSpinning
变量。
只需将上面的Update
函数替换为下面的函数:
void Update()
{
//Start if Space-key is pressed AND is not Spinning
if (Input.GetKeyDown(KeyCode.Space) && !isSpinning)
{
FidgetSpinnerStart();
}
//Stop if Space-key is pressed AND is already Spinning
else if (Input.GetKeyDown(KeyCode.Space) && isSpinning)
{
FidgetSpinnerStop();
}
}