[Unity]Transform.Translate não move a distância esperada.

この記事は約4分で読めます。
スポンサーリンク

Coisas que eu quero fazer

No Unity, o Transform.Translate não traduziu a distância esperada.

Vamos investigar o que está acontecendo e propor soluções.

Esta seção discute a quantidade de movimento por chamada. Para comportamentos inesperados ao chamar Update ou FixedUpdate repetidamente, consulte o seguinte (Time.deltaTime deve ser levado em consideração).

Transform-Translate - Unity スクリプトリファレンス
translation の方向と距離に移動します

Exemplo específico

Tentei o seguinte código.

Debug.Log("Before Local:" + obj.localPosition.x);
obj.Translate(-70f, 0f, 0f);
Debug.Log("After Local:" + obj.localPosition.x );

Resultado:

Antes do Local: 755.3287
Após Local:580.3287

O resultado esperado após o teste era 750,3287 – 70 = 680,3287, mas não foi isso que aconteceu.

スポンサーリンク

Por que os resultados foram diferentes do esperado?

Em seguida, tente o seguinte código.

Debug.Log("Before Local:" + obj.localPosition.x);
Debug.Log("Before World:" + obj.position.x );
obj.Translate(-70f, 0f, 0f);
Debug.Log("After Local:" + obj.localPosition.x );
Debug.Log("After World:" + obj.position.x );

Resultado:

Antes do Local: 755.3287
Antes do Mundo: 716.1315
Após Local:580.3287
Após o mundo: 646,1315

Conforme demonstrado nos resultados acima, a coordenada x das coordenadas mundiais é subtraída por 70.

Em outras palavras, a direção da função Translate pode ser especificada pelo segundo argumento, sendo o valor padrão o sistema de coordenadas local, mas a distância é calculada no sistema de coordenadas mundial.

Portanto, tentar especificar a distância do movimento usando o sistema de coordenadas local não resultará no comportamento esperado.

スポンサーリンク

Solução

Existem várias soluções, mas eu criei a seguinte função. (Como foi criada para jogos 2D, o valor de z é opcional.)

void MoveTransfrom(Transform obj, float x, float y, float z = 0) {
    obj.localPosition = new Vector3(obj.localPosition.x + x, obj.localPosition.y + y, obj.localPosition.z + z);
}

コメント

タイトルとURLをコピーしました