簡體   English   中英

Unity3D - 為什么我的對象不會每秒移動每一幀

[英]Unity3D - Why my object doesnt move every frame per second

我正在努力解決非常奇怪且可能很簡單的問題,我創建了一個機器人,他的任務是向目標移動我的意思是我在無效更新中使用 Vector3.MoveTowards 函數來每幀移動我的機器人,但問題是他只在移動一次並停下來,他正在邁出一步,而不是例如 100。我正在使用 Unity3D。 這是源代碼;

public class Test01 : MonoBehaviour
{
public float speed, stopDist, rotationSpeed, moveSpeed, minSpeed, maxBackSpeed, maxFrontSpeed, turnSpeed, riseSpeed;
public Transform target;
private Rigidbody rb;
private float currentSpeed;

public bool isFinding = false;
private PlaySound signal;

void Start()
{
    signal = GameObject.FindGameObjectWithTag("Signal").GetComponent<PlaySound>();
    rb = GetComponent<Rigidbody>();
}

private void Update()
{
    // If space key button is pressed the robot's isFinding bool is becaming true and robot is starting searching for target.
    if (Input.GetKeyDown(KeyCode.Space))
    {
        isFinding = true;
        if (Vector3.Distance(transform.position, target.position) > stopDist)
        {
            transform.position = Vector3.MoveTowards(transform.position, target.position, speed * Time.deltaTime);
            signal.isAlarming = true;
            signal.Sound();
        }
        else if (Vector3.Distance(transform.position, target.position) < stopDist)
        {
            isFinding = false;
            signal.isAlarming = false;
            SoundManager.instance.StopSound();
            StopChasing();
        }
    }
}
 public void StopChasing()
{
    transform.position = this.transform.position;
}

Input.GetKeyDown是您按下鍵時的功能。

您可能希望將其更改為Input.GetKey ,這樣每次您保持空間時它都會移動。

像這樣,

private void Update()
{
    // If space key button is pressed the robot's isFinding bool is becaming true and robot is starting searching for target.
    if (Input.GetKey(KeyCode.Space))
    {
        isFinding = true;
        if (Vector3.Distance(transform.position, target.position) > stopDist)
        {
            transform.position = Vector3.MoveTowards(transform.position, target.position, speed* Time.deltaTime);
            signal.isAlarming = true;
            signal.Sound();
        }
        else if (Vector3.Distance(transform.position, target.position) < stopDist)
        {
            isFinding = false;
            signal.isAlarming = false;
            SoundManager.instance.StopSound();
            StopChasing();
        }
    }
}

如果您使用Input.GetKeyDown為機器人開始定位。 然后像這樣分割

private void Update()
{
    // If space key button is pressed the robot's isFinding bool is becaming true and robot is starting searching for target.
    if (Input.GetKeyDown(KeyCode.Space))
    {
        isFinding = true;
    }
    if (isFinding)
    {
        if (Vector3.Distance(transform.position, target.position) > stopDist)
        {
            transform.position = Vector3.MoveTowards(transform.position, target.position, speed* Time.deltaTime);
            signal.isAlarming = true;
            signal.Sound();
        }
        else if (Vector3.Distance(transform.position, target.position) < stopDist)
        {
            isFinding = false;
            signal.isAlarming = false;
            SoundManager.instance.StopSound();
            StopChasing();
        }
    }
}

畢竟,您之前所做的並沒有真正使用isFinding作為任何東西,您只需將其設置為 true 並且它不會對代碼產生任何影響。

好吧,目前您將所有內容都嵌套在GetKeyDown下,因此它只執行一次

你可以改變那樣做

if (Input.GetKeyDown(KeyCode.Space))
{
    isFinding = true;
}

if(isFinding)
{
    if (Vector3.Distance(transform.position, target.position) > stopDist)
    {
        transform.position = Vector3.MoveTowards(transform.position, target.position, speed * Time.deltaTime);
        signal.isAlarming = true;
        signal.Sound();
    }
    else
    {
        isFinding = false;
        signal.isAlarming = false;
        SoundManager.instance.StopSound();
        StopChasing();
    }
}

所以按一次Space激活isFinding模式,直到它到達Vector3.Distance(transform.position, target.position) < stopDist

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM