首页 > 解决方案 > 在相机视图之外生成对象

问题描述

我正在开发一些小型 2D 游戏,但我无法弄清楚这一点。基本上我希望物体产生 - 但仅限于相机视图之外。相机是固定的,我可以使用硬编码值,但我不想这样做。

我尝试使用 Camera.main.orthographicSize 和 Camera.main.ViewportToWorldPoint 中的屏幕宽度和高度,但我只设法在包括相机视图内部在内的所有地方生成对象。

当前代码(评论是我正在尝试的随机方法)


public class Spawner : MonoBehaviour
{
    public GameObject asteroidPrefab;
    public Vector2 secondsBetweenSpawnsMinMax;
    public Vector2 asteroidSizeMinMax;


    private float nextSpawnTime = 0;
    private Vector2 screenHalfSizeWorldUnits;
    private float asteroidSpawnAngleMax;
    private float screenHeight;
    private float screenWidth;

    void Start()
    {
        screenHalfSizeWorldUnits = new Vector2(Camera.main.aspect * Camera.main.orthographicSize, Camera.main.orthographicSize);

    }

    void Update()
    {
     if(Time.time > nextSpawnTime)
        {
            screenHeight = Camera.main.orthographicSize + 1;
            screenWidth = Camera.main.orthographicSize * Camera.main.aspect + 1;

            float secondsBetweenSpawns = Random.Range(secondsBetweenSpawnsMinMax.x, secondsBetweenSpawnsMinMax.y);
            nextSpawnTime = Time.time + secondsBetweenSpawns;
            float asteroidSize = Random.Range(asteroidSizeMinMax.x, asteroidSizeMinMax.y);
            float asteroidSpawnAngle = Random.Range(-asteroidSpawnAngleMax, asteroidSpawnAngleMax);

            Vector3[] arrayOfZones = new Vector3[3];
            List<Vector3> listOfZones = new List<Vector3>();

            Vector3 leftSpawnZone = Camera.main.ViewportToWorldPoint(Vector3.left);
            Vector3 rightSpawnZone = Camera.main.ViewportToWorldPoint(Vector3.right);

            Vector3 topSpawnZone = Camera.main.ViewportToWorldPoint(Vector3.up);
            Vector3 downSpawnZone = Camera.main.ViewportToWorldPoint(Vector3.down);


            Vector3 spawnPosition = Camera.main.ViewportToWorldPoint(new Vector3(1.1f, 0.5f, 0f));
            //Vector2 spawnPosition = new Vector2(screenWidth + Random.Range(-90,30), screenHeight + Random.Range(-60,30));
            //Vector2 spawnPosition = new Vector2(Random.Range(-screenWidth, screenWidth), Random.Range(screenHeight, -screenHeight) + asteroidSize);
            GameObject newAsteroid = (GameObject)Instantiate(asteroidPrefab, spawnPosition, Quaternion.Euler(Vector3.forward * asteroidSpawnAngle));
            newAsteroid.transform.localScale = Vector2.one * asteroidSize;
                    }   
    }
    /*

}

标签: c#unity3d

解决方案


将对象(生成位置)放置在相机视图之外并将它们设置为生成点。

例子:

在此处输入图像描述


推荐阅读