Отскок от экрана Unity 2D - PullRequest
1 голос
/ 11 марта 2019

Я пытаюсь сделать 2D-игру, в которой мяч отскакивает от края камеры в Unity.Теперь, если я правильно понимаю, Unity - это больше, вы создаете и окружение, а затем настраиваете камеру, а не настраиваете окружение, чтобы соответствовать камере, верно?

Я мог бы получить положение мяча, а затемпосмотрите, превышает ли оно определенное значение, а затем примените силу, что я и делал, но на разных устройствах соотношение экрана меняется, так что это не работает.Есть ли способ определить, попал ли он в край камеры / вида или какую-то процентную единицу, которую я мог бы использовать?В этой игре камера движется вверх и вниз с мячом, так что только левая и правая стороны должны быть «упругими».

Когда я посмотрел вверх, некоторые люди предложили использовать установленный барьеркрай камеры.Со всеми изменениями пропорций масштабирования и соотношения, я думаю, было бы легче просто определить край, будь то с помощью какого-либо метода для получения ширины экрана в пикселях или каким-либо другим способом.

Извините, если этопростой вопрос, это моя первая игра в Unity, так что я все еще изучаю веревки.

Ответы [ 2 ]

0 голосов
/ 11 марта 2019

Один из подходов состоит в том, чтобы преобразовать положение мяча в положение экрана, а затем проверить, уходит ли оно за пределы экрана (если позиция имеет значение x или y ниже 0 или x больше, чем ширина экрана или y больше, чем высота экрана ).

Vector2 screenPosition = Camera.main.WorldToScreenPoint(this.transform.position);
if((screenPosition.y > Screen.height) || (screenPosition.y < 0f) || (screenPosition.x > Screen.width) || (screenPosition.x <0f))
{   
    screenPosition.x = Mathf.Clamp(screenPosition.x, 0f, Screen.width);
    screenPosition.y = Mathf.Clamp(screenPosition.y, 0f, Screen.height);
    Vector3 newWorldPosition = Camera.main.ScreenToWorldPoint(screenPosition);
    this.transform.position = new Vector2(newWorldPosition.x, newWorldPosition.y);
    Move();
}
private void Move()
{
    velocity *= -1f;
    rigidBody.velocity = velocity;
}

В этом примере сценарий проверит, выходит ли шарик из экрана, и, если это произойдет, зажмет положение между краями экрана и изменит скорость, чтобы шарик отскочил в противоположном направлении.Обратите внимание на GIF ниже, что если я изменю соотношение сторон, шар все еще отскакивает, касаясь краев.

0 голосов
/ 11 марта 2019
var dist = (this.transform.position 
- Camera.main.transform.position).z;

var leftBorder = 
Camera.main.ViewportToWorldPoint(new 
Vector3(0,0,dist)).x;
var rightBorder = 
Camera.main.ViewportToWorldPoint(new 
Vector3(1,0,dist)).x;
var topBorder = 
Camera.main.ViewportToWorldPoint(new 
Vector3(0,0,dist)).y;
var bottomBorder = 
Camera.main.ViewportToWorldPoint(new 
Vector3(0,1,dist)).y;

Vector3 playerSize = 


this.gameObject. 
renderer.bounds.size;

this.transform.position = new 
Vector3 (

Mathf.Clamp(this. 
transform.position.x, 
leftBorder + playerSize.x/2, 
rightBorder - playerSize.x/2),
Mathf.Clamp 
(this.transform.position.y, 
topBorder + playerSize.y/2, 
bottomBorder - playerSize.y/2),
this.transform.position.z

Это то, что я использую. Это был ответ на единый ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...