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, чтобы телепортировать, позицию изменять можно и у обычного трансформа игрока.