Unity 3D: Как можно сделать так чтобы при движении мыши по оси Y, объект изменил свою позицию по оси Z. (движение объекта мышкой.)

На данный момент объект изменяет свою позицию только по X и Y, хочу сделать так чтобы вместо движении по Y, объект двигался по Z.

public class ClickDetector : MonoBehaviour
{

    public GameObject player;
    private Rigidbody rbPlayer;
    private Vector3 offset;
    private Vector3 newPos;

    void Start()
    {
        rbPlayer = player.GetComponent<Rigidbody>();
    }
    private void OnMouseDown()
    {
        offset = rbPlayer.position - Camera.main.ScreenToViewportPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Input.mousePosition.z));  
    }

    private void OnMouseDrag()
    {
        newPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y);
        rbPlayer.position = Camera.main.ScreenToViewportPoint(newPos) + offset;
    }

    
}

Ответы (1 шт):

Автор решения: KOTlK

Не знаю что ты там пытаешься делать, когда вычисляешь оффсет, наверное костыль какой-то, чтобы объект не улетал в нулевые координаты. Все гораздо проще.

public class Movement: MonoBehaviour
{
    [SerializeField] private float _speed = 10f;

    private void OnMouseDrag()
    {
        var x = Input.GetAxis("Mouse X");
        var y = Input.GetAxis("Mouse Y");

        var position = transform.position;

        position.x += x * _speed * Time.deltaTime;
        position.z += y * _speed * Time.deltaTime;

        transform.position = position;
    }

}

Смещение мыши прибавляешь к позиции. Всё. Не нужен никакой оффсет.

Зачем тебе Rigidbody игрока тоже непонятно, если ты просто его позицию меняешь. Если уж берешь Rigidbody, то используй метод MovePosition, чтобы телепортировать, позицию изменять можно и у обычного трансформа игрока.

→ Ссылка