2015-09-24 1 views
0

В моей игре у меня есть этот 2048x2048 большой фон с космическим кораблем, идущим вверх и вниз, назад и вперед, как в старых играх, где вы сталкиваетесь с врагами, идущими справа, и у вас есть экран, уверенный и сражающийся с ними.Как я могу ограничить камеру палкой в ​​фоновом режиме?

Но как ограничить камеру статическим фоном? Вид меньше фона. Получить границы фона легко:

 Transform backgroundTransform = GameObject.Find("Background").transform; 
     float minX = backgroundTransform.position.x - backgroundTransform.GetComponent<Renderer>().bounds.size.x/2; 
     float maxX = backgroundTransform.position.x + backgroundTransform.GetComponent<Renderer>().bounds.size.x/2; 
     float minY = backgroundTransform.position.y - backgroundTransform.GetComponent<Renderer>().bounds.size.y/2; 
     float maxY = backgroundTransform.position.y + backgroundTransform.GetComponent<Renderer>().bounds.size.y/2; 

Но камера не имеет «рендеринга» :) Любые идеи?

+0

это камера после космического корабля? – user3071284

+0

Вы найдете метод 'Mathf.Clamp()' полезным: http://docs.unity3d.com/ScriptReference/Mathf.Clamp.html – Eraph

ответ

0
Transform backgroundTransform = GameObject.Find("Background").transform; 
float minX = backgroundTransform.position.x - backgroundTransform.GetComponent<Renderer>().bounds.size.x/2; 
float maxX = backgroundTransform.position.x + backgroundTransform.GetComponent<Renderer>().bounds.size.x/2; 
float minY = backgroundTransform.position.y - backgroundTransform.GetComponent<Renderer>().bounds.size.y/2; 
float maxY = backgroundTransform.position.y + backgroundTransform.GetComponent<Renderer>().bounds.size.y/2; 

буквально может быть заменен только:

Bounds backBounds = GameObject.Find("Background").GetComponent<MeshFilter>().mesh.bounds; 
float minX = backBounds.min.x; 
float maxX = backBounds.max.x; 
float minY = backBounds.min.y; 
float maxY = backBounds.max.y; 

Во всяком случае, вот некоторые псевдо-код (не тестировалось)

Bounds backBounds = GameObject.Find("Background").GetComponent<MeshFilter>().mesh.bounds; 
Camera cam; 
float minX; 
float maxX; 
float minY; 
float maxY; 

if(cam.orthographic) 
{ 
    minX = backBounds.min.x + (cam.orthographicSize * cam.aspect); 
    maxX = backBounds.max.x - (cam.orthographicSize * cam.aspect); 
    minY = backBounds.min.y + cam.orthographicSize; 
    maxY = backBounds.max.y - cam.orthographicSize; 
} 
else 
{ 
    float dist = Mathf.Abs(backBounds.center.z - cam.transform.position.z); 
    float halfFrustumHeight = dist * Mathf.Tan(cam.fieldOfView * 0.5f * Mathf.Deg2Rad); 
    float halfFrustumWidth = frustumHeight * cam.aspect; 

    minX = backBounds.min.x + halfFrustumWidth; 
    maxX = backBounds.max.x - halfFrustumWidth; 
    minY = backBounds.min.y + halfFrustumHeight; 
    maxY = backBounds.max.y - halfFrustumHeight; 
} 
Смежные вопросы