Perguntas e respostas do Unity sobre como executar atualizações normais de frames usando chamadas agendadas e atualização

Insira a descrição da imagem aqui

Confundir

Ou seja, quando definimos uma função InvokeRepeating na função Start e depois definimos uma operação básica em Update, o que devemos fazer quando queremos controlar conjuntamente o movimento de ida e volta de um objeto?
Em outras palavras, como o sistema é compilado?

análise de código

Aqui forneço dois códigos. Vamos dar uma olhada na diferença.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SimpleLogic : MonoBehaviour
{
    public float speed = 1f;

    // Start is called before the first frame update
    void Start()
    {
        InvokeRepeating("DoSomesing", 2,2);
    }

    // Update is called once per frame
    void Update()
    {
        Debug.Log("***this is Update ***" + Time.time);

        transform.Translate(0, speed * Time.deltaTime, 0, Space.Self);
    }
    void DoSomesing()
    {
        Debug.Log("***use Dosing ***"+ Time.time);
        //transform.Translate(0, -1*speed * Time.deltaTime, 0, Space.Self);
        speed = 0 - speed;
    }
}


另一个代码和它非常像

usando System.Collections;
usando System.Collections.Generic;
usando UnityEngine;

classe pública SimpleLogic: MonoBehaviour
{ velocidade de flutuação pública = 1f;

// Start is called before the first frame update
void Start()
{
    InvokeRepeating("DoSomesing", 2,2);
}

// Update is called once per frame
void Update()
{
    Debug.Log("***this is Update ***" + Time.time);

    transform.Translate(0, speed * Time.deltaTime, 0, Space.Self);
}
void DoSomesing()
{
    Debug.Log("***use Dosing ***"+ Time.time);
    transform.Translate(0, -1*speed * Time.deltaTime, 0, Space.Self);
    //speed = 0 - speed;
}

}

A diferença entre esses dois códigos é apenas uma linha, então você sabe qual deles pode realmente alcançar o movimento de ida e volta?

Na verdade, o primeiro código está correto

explicação específica

Insira a descrição da imagem aqui

Ou seja, nosso Update executa cada frame, e InvokeRepeating só roda em um horário específico, então só podemos colocar os pontos-chave para controlar a operação do objeto em 速度InvokeRepeating, e o código que controla o progresso deve ser colocado em Update ., afinal, temos que avançar a cada quadro!

Acho que você gosta

Origin blog.csdn.net/weixin_74850661/article/details/132773501
Recomendado
Clasificación