我有一個統一的二維物件腳本。該物件是一個安全攝像頭。我希望它以受控方式在 90 度拱形中從 0 到 90 和 90 到 0。在拱門的盡頭,我想讓它停四秒鐘。`
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SecurityCameraMovement : MonoBehaviour
{
public float turnspeed = 0.5f;
private float angle;
Transform camera;
private bool stop = false;
void Start()
{
camera = gameObject.GetComponent<Transform>();
}
IEnumerator movement()
{
angle = camera.eulerAngles.z;
if(angle > 90){
stop = true;
yield return new WaitForSeconds(4);
}
if(angle < 1){
stop = false;
yield return new WaitForSeconds(4);
}
if(angle > 0 && angle < 90 & stop == false){
transform.rotation = Quaternion.Euler(0,0, angle turnspeed);
yield return new WaitForSeconds(1);
}
if(stop == true){
transform.rotation = Quaternion.Euler(0,0, angle - turnspeed);
yield return new WaitForSeconds(1);
}
}
void Update()
{
StartCoroutine(movement());
}
}
`
帶鉸鏈的安全攝像頭可顯示所需的足弓
我不太確定 Inumerator 是如何作業的。目前,相機從 0 度到 90 度,反之亦然,但速度非常快,沒有間斷。我看過其他類似的問題,但找不到解決方案。我很感激任何幫助。謝謝!
uj5u.com熱心網友回復:
我相信這是因為您正在使用 Update 函式啟動協程。許多 Enumerator 實體可以同時運行。每次呼叫 StartCoroutine 函式時,都會啟動一個新的 Enumerator 實體。我假設這些多個實體在每個滴答聲中都增加了角度,使速度非常快。
一種解決方案是在 Start 函式內運行 StartCoroutine,然后在 Enumerator 中永遠回圈(使用 while 回圈或在 Enumerator 內運行 StartCoroutine)。一個例子是這樣的:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SecurityCameraMovement : MonoBehaviour
{
public float turnspeed = 0.5f;
private float angle;
Transform camera;
private bool stop = false;
void Start()
{
camera = gameObject.GetComponent<Transform>();
StartCoroutine(movement());
}
IEnumerator movement()
{
angle = camera.eulerAngles.z;
if(angle > 90){
stop = true;
yield return new WaitForSeconds(4);
}
if(angle < 1){
stop = false;
yield return new WaitForSeconds(4);
}
if(angle > 0 && angle < 90 & stop == false){
transform.rotation = Quaternion.Euler(0,0, angle turnspeed);
yield return new WaitForSeconds(1);
}
if(stop){
transform.rotation = Quaternion.Euler(0,0, angle - turnspeed);
yield return new WaitForSeconds(1);
}
StartCoroutine(movement());
}
}
注意:這不是處理像這樣的基本運動的好方法。最好只使用 Update 函式。您可以使用 Time.deltaTime 或類似函式保留計時器。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/537190.html
標籤:C#unity3d
上一篇:為什么打開和關閉選項不起作用?
