2015-06-25 2 views
0

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

Я создаю маленькую игру, и я почти завершаю, я использовал настройки сборки Unity для создания игры, но затем столкнулся с проблемой. игра была разработана в соотношении сторон 16:10, так как она подходит моему монитору, но в любое время, когда я создаю игру на меньшем разрешении, части игры обрезаются с экрана. Я намеревался выпустить эту игру для Android и, очевидно, нужно что-то, что позволяет игре поместиться на любом экране или планшете.

GUI масштабируется в соответствии с возможностью сделать масштаб холста с размером экрана «im ищет то же самое для всего остального в игре».

Дополнительная информация:

У меня есть ортогональной Camera

мне сказали, на других форумах, что мне нужно Camera.main.aspect = ScreenWidth/ScreenHeight;

но в моем скрипте это ничего не делает.

Я включил мой сценарий камеры, а также:


общественного класса CameraScript: MonoBehaviour {

public Transform PlayerTarget; 

public float YaXis; 
public float XaXis; 
public float moveDown; 
public float moveUp; 

public Vector2 
    margin, 
    Smoothing; 

private Vector3 
    _min, 
    _max, 
    PlayerPosition; 


public bool IsFollowing; 

public BoxCollider2D CamBounds; 

public void Start() 
{ 


    //float worldScreenHeight = Camera.main.orthographicSize * 2f; 
    //float worldScreenWidth = worldScreenHeight/Screen.height * Screen.width; 

    //Camera.main.aspect = worldScreenWidth/worldScreenHeight; 

    _min = CamBounds.bounds.min; 
    _max = CamBounds.bounds.max; 
    IsFollowing = true; 

} 

public void Update() 
{ 
    var x = transform.position.x; 
    var y = transform.position.y; 

    if (IsFollowing) 
    { 
     if (Mathf.Abs(x - PlayerTarget.position.x)> margin.x) 
      x = Mathf.Lerp (x, PlayerTarget.position.x, Smoothing.x * Time.deltaTime); 

     if (Mathf.Abs(y - PlayerTarget.position.y)> margin.y) 
      y = Mathf.Lerp (y, PlayerTarget.position.y, Smoothing.y * Time.deltaTime); 
    } 



    var CameraHalfWidth = GetComponent<Camera>().orthographicSize * ((float)Screen.width/Screen.height); 

    x = Mathf.Clamp (x, _min.x + CameraHalfWidth, _max.x - CameraHalfWidth); 
    y = Mathf.Clamp (y, _min.y + GetComponent<Camera>().orthographicSize, _max.y - GetComponent<Camera>().orthographicSize); 


    if (Input.GetKey(KeyCode.DownArrow)){ 
     transform.position = new Vector3 ((x - XaXis) , (y + YaXis) - moveDown, transform.position.z); 
    }else if (Input.GetKey(KeyCode.UpArrow)){ 
     transform.position = new Vector3 ((x - XaXis) , (y + YaXis) + moveUp, transform.position.z); 
    }else 
    transform.position = new Vector3 ((x - XaXis) , (y + YaXis), transform.position.z); 

} 

}

+0

эй кто натыкается на этой странице, было бы здорово, если бы вы знать ответ и поделиться своими знаниями со мной и всеми остальными. << thats not означало, чтобы звучать как im, являющийся членом, я только перечитал его, и это может наткнуться немного «dickheadish». это не тот случай, я просто хочу закончить свою игру, и я застрял, нетерпелив и застрял, что ужасно. снова ... не будучи членом ... но, пожалуйста, ответь :) Уступ! –

ответ

1

Может быть, вы могли бы попробовать с этим.

public class AspectRatioScript : MonoBehaviour { 

float wantedAspectRatio = 16f/10f; 

void Awake() 
{ 
    GetComponent<Camera>().rect = new Rect(0f, (1.0f - Camera.main.aspect/wantedAspectRatio)/2, 1f, Camera.main.aspect/wantedAspectRatio); 
}} 

Вы прикрепляете его к основной камере, и он будет регулировать пропорции вашей камеры до 16:10. Я просто протестировал его. Надеюсь, это вам поможет.

+0

Прошу прощения, если ответ немного расплывчатый. Camera.rect устанавливает прямоугольник вашей камеры, где 0 - начало координат, а 1 - конец. Остальное - просто математика. – RJD

0

Основываясь на вашем вопросе 16: 10, я предполагаю, что ваша игра - экран с плоским экраном?
попробуйте этот код и прикрепить его к каждому геймобжекты (включают в себя основную камеру и фона) в сцене

public class gameresize : MonoBehaviour { 
float currentCameraAspect; 
Camera kamera; 
float minAspect,percentAspect; 
// 5 : 3 Aspect Ratio 
float standartAspect = 1.665557f; 
float objectScaleSize; 
float newX, newY; 
Vector3 objectSize; 

// Use this for initialization 
void Start() { 
    kamera = GameObject.FindObjectOfType(typeof(Camera)) as Camera; 
    //resize game object depending on device aspect ratio; 
    ResizeObject(); 
} 

void Update() { 

} 

void ResizeObject() 
{ 
    currentCameraAspect = kamera.aspect; 


    if (currentCameraAspect < standartAspect) { 
     //left it blank 

    } else if (currentCameraAspect > standartAspect) { 

     minAspect = currentCameraAspect - standartAspect; 
     percentAspect = (100 * minAspect)/currentCameraAspect; 


     objectSize = transform.localScale; 
     newX = ((percentAspect * objectSize.x)/100) + objectSize.x; 
     newY = ((percentAspect * objectSize.y) /100) + objectSize.y; 

     transform.localScale = new Vector3 (newX , newY ,1f); 

    } else { 
     //left it blank 
    } 

    } 
} 

надеюсь, что это может решить

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