2014-02-02 5 views
2

Я работаю над 2D-игрой, подобной Space Shooter. Я разработал его для Web и ПК, и он отлично работает. Теперь я переношу его на Android, и у меня проблема с кодом игрока.Unity 2D Android - Ограничить объект до экрана

Игрок (космический корабль) будет находиться в нижней части экрана, и он перемещается слева направо в пределах экрана. Я написал кусок кода, который ограничивает игрока в пределах экрана и вот код:

private float screenx = Screen.width -20; 
playerPosScreen = Camera.main.WorldToScreenPoint(transform.position); 

if(Input.GetKey(KeyCode.RightArrow) && playerPosScreen.x < screenx) 
{ 
    transform.Translate(Vector3.right * speed * Time.deltaTime * 0.4f); 
} 

if (Input.GetKey(KeyCode.LeftArrow) && playerPosScreen.x > 20) 
{ 
    transform.Translate(-Vector3.right * speed * Time.deltaTime * 0.4f); 
} 

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

Мой вопрос здесь, как это сделать в Android? Я хочу, чтобы игрок оставался на экране, т. Е. Если пользователь перемещает игрока, перетаскивая его в крайнее левое положение, независимо от того, сколько раз он пытается перетащить, игрок должен оставаться в левом углу экрана, и то же самое относится к правильно. Простыми словами я хочу обнаружить левый и правый края экрана и ограничить свой объект в этих краях.

Моя игра будет в ландшафтном режиме.

Любая помощь будет очень оценена. Заранее спасибо.

ответ

2

Такого рода проблема, как правило, решается в следующей усадьбе:

if(transform.position.x < screenx) { 

    transform.position.x = screenx; 
} 

Здесь мы проверяем, чтобы увидеть, если преобразованный игрок из экранного пространства. Если это так, мы устанавливаем его на минимальное значение, которое я принимаю, - screenx.

+0

Благодарности @rhughes. Я добавил код ниже, чтобы исправить эту проблему: 'Vector3 viewPos = Camera.main.WorldToViewportPoint (transform.position); viewPos.x = Mathf.Clamp01 (viewPos.x); viewPos.y = Mathf.Clamp01 (viewPos.y); transform.position = Camera.main.ViewportToWorldPoint (viewPos); ' –

+0

@SriramKumar Молодцы! :) – rhughes

0
public Transform player; 
public float distanceFromCamera=10; 
public float offsetx=.05f; 
public float offsety=.05f; 
void Awake() 
{ 

    player.position=Camera.main.ViewportToWorldPoint(new Vector3(offsetx,offsety,distanceFromCamera)); 
} 

это будет ваш левый нижний экран boundry

Смежные вопросы