如何让相机宽度统一

时间:2017-12-25 14:16:50

标签: c# unity5

问题

我有一个用c#编写的spawn管理器,它生成我的游戏对象,我使用screen.width来设置最大屏幕和-screen.width来设置产生的最小屏幕宽度,但是我的游戏对象会产生方式离开屏幕。

我使用2:3的人像相机而不是自由的方面作为我的相机视图,因为我希望我的游戏处于纵向模式

如何让我的游戏对象在相机宽度(最大和最小)内生成?

我的代码

public class SpawnManager : MonoBehaviour {

    public int maxBalloons = 100;
    public GameObject balloon;
    public float horizontalMin = -Screen.width;
    public float horizontalMax = Screen.width;
    public float verticalMin = -5.0f;
    public float verticalMax = 1.0f;


    private Vector2 originPosition;


    void Start () {

        originPosition = transform.position;
        Spawn ();

    }

    void Spawn()
    {
        for (int i = 0; i < maxBalloons; i++)
        {
            Vector2 randomPosition = originPosition + new Vector2 (Random.Range(horizontalMin, horizontalMax), Random.Range (verticalMin, verticalMax));

            Instantiate(balloon, randomPosition, Quaternion.identity);
            originPosition = randomPosition;
        }
    }

}

修改 我改变了

Vector2 randomPosition = originPosition + new Vector2 (Random.Range(horizontalMin, horizontalMax), Random.Range (verticalMin, verticalMax));

Vector2 randomPosition =Camera.ScreenToWorldPoint (originPosition + new Vector2 (Random.Range(horizontalMin, horizontalMax), Random.Range (verticalMin, verticalMax)));

仍然无法正常工作

1 个答案:

答案 0 :(得分:0)

屏幕上X小于0的位置将始终位于屏幕之外。屏幕的左下角是坐标的原点(x:0,y:0)

但在这里我认为你混在一起两种姿势。屏幕上的位置与场景的世界空间中的位置不同。这取决于相机渲染的位置。 屏幕左下角的位置在世界空间中不是x:0 y:0。

要实现您的目标,您需要将相机左侧和右侧的位置转换为世界空间位置。

使用Camera.ScreenToWorldPoint实现:https://docs.unity3d.com/ScriptReference/Camera.ScreenToWorldPoint.html