как повернуть GameObject в сторону джойстика

Итак, я создаю шутер с видом сверху и пытаюсь заставить игрока смотреть в сторону джойстика. это мой текущий код:

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

[RequireComponent(typeof(PlayerMotor))]
public class PlayerController : MonoBehaviour {

    Camera cam;
    PlayerMotor motor;

    void Start () {
        cam = Camera.main;
        motor = GetComponent<PlayerMotor>();
    }

    void Update () {
        //movement
        motor.MoveToPoint(new Vector3(transform.position.x + Input.GetAxis("Horizontal"), transform.position.y, transform.position.z + Input.GetAxis("Vertical")));

        //cam control
        cam.transform.position = new Vector3(transform.position.x,
        transform.position.y + 9.0f,
        transform.position.z);

        //this is the problem
        transform.Rotate(new Vector3(transform.position.x + Input.GetAxis("rightStickHorizontal"), transform.position.y, transform.position.z + Input.GetAxis("rightStickVertical")));
    }
}

по какой-то причине, когда я это делаю, он очень медленно поворачивается в направлении джойстика (кажется, на 1 градус за кадр).


person Daan Koning    schedule 07.07.2018    source источник


Ответы (1)


transform.Rotate https://docs.unity3d.com/ScriptReference/Transform.Rotate.html

принимает eulerAngles, а eulerAngles должны быть выражены в градусах. ваши параметры - это не градусы, а координаты.

вместо этого вы должны использовать

https://docs.unity3d.com/ScriptReference/Quaternion.RotateTowards.html

transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, Time.deltaTime);

ты можешь использовать

https://docs.unity3d.com/ScriptReference/Quaternion.LookRotation.html

Vector3 relativePos = target.position - transform.position;
Quaternion targetRotation = Quaternion.LookRotation(relativePos);

чтобы получить желаемое целевое вращение

person Jinjinov    schedule 09.07.2018
comment
какой цели служит ваш var rotation в этом контексте - person Daan Koning; 09.07.2018
comment
@DaanKoning я отредактировал ответ - var rotation теперь Quaternion targetRotation, который можно использовать в качестве второго параметра в Quaternion.RotateTowards - person Jinjinov; 10.07.2018
comment
и я предполагаю, что мне просто нужно заменить target.position на Vector3 того, куда я хочу пойти? (Vector3(transform.position.x + Input.GetAxis("rightStickHorizontal"), transform.position.y, transform.position.z + Input.GetAxis("rightStickVertical")) - person Daan Koning; 10.07.2018