Я пытаюсь ограничить движение игрового объекта только видом камеры. Мне удалось переместить родительский игровой объект с помощью: Vector3 motion = new Vector3 (inputX, inputY, 0); движение * = (Time.deltaTime ...

1
Hakeem Thomas 20 Дек 2020 в 00:10

1 ответ

Лучший ответ

Проблема здесь в том, что когда вы вызываете WorldToViewportPoint(), вы должны передать ему мировую позицию. Однако вы передаете Vector3(inputX, inputY ...), а постоянные inputX и inputY не являются мировыми координатами.

Vector3 movement = new Vector3(inputX, inputY, 0);
movement *= (Time.deltaTime * speed * smoothTime);

// Calculate the 'to-be' final position
Vector3 position = transform.position + movement;

// Clamp that position
Vector3 screenCoordinates = Camera.main.WorldToViewportPoint(position);
screenCoordinates.x = Mathf.Clamp01(screenCoordinates.x);
screenCoordinates.y = Mathf.Clamp01(screenCoordinates.y);

position = Camera.main.ViewportToWorldPoint(screenCoordinates);

// then finally set it
gameObject.GetComponent<Rigidbody>().MovePosition(position);

Наконец, вы, вероятно, захотите кэшировать свои Camera.main и GetComponent<Rigidbody>, поскольку это дорогостоящие вызовы для выполнения каждого кадра.

4
Narek Daduryan 19 Дек 2020 в 21:22