如何在Unity中实现指定半径范围内随机生成物体?
实现方案
前置修复
先修改原有代码的变量命名问题:你原来定义的Time变量和Unity内置的Time类重名,这很可能是导致飞船运动异常的原因,先将该变量重命名为spawnInterval,同时调整协程里的调用参数。
1. 指定半径范围内生成小行星
通过极坐标转直角坐标的方式实现圆形范围生成,无需复杂对数公式,使用Unity内置API即可完成,修改后的完整deployAsteroids代码如下:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class deployAsteroids : MonoBehaviour { public GameObject asteroidPrefab; public float spawnInterval = 1.0f; // 生成范围的中心坐标,可根据需求设为飞船位置或者固定区域坐标 public Vector2 spawnCenter = Vector2.zero; // 指定的生成半径 public float spawnRadius = 10f; private Vector2 screenBounds; void Start () { screenBounds = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, Camera.main.transform.position.z)); // 如果需要生成在屏幕左侧外的区域,可在这里修改spawnCenter // spawnCenter = new Vector2(-screenBounds.x - 2, 0); StartCoroutine(asteroidWave()); } private void spawnAsteroid() { GameObject a = Instantiate(asteroidPrefab) as GameObject; // Random.insideUnitCircle会返回半径为1的圆内的随机点,乘以半径后加上中心坐标,即得到指定范围内的随机点 a.transform.position = Random.insideUnitCircle * spawnRadius + spawnCenter; } IEnumerator asteroidWave() { while(true) { yield return new WaitForSeconds(spawnInterval); spawnAsteroid(); } } }
你可以直接在Inspector面板调整spawnCenter和spawnRadius参数,控制生成的范围,不会影响飞船的运动逻辑。
2. 小行星移出屏幕自动销毁实现
给小行星预制体挂载单独的生命周期脚本即可,脚本逻辑如下,新建AsteroidAutoDestroy.cs文件,将代码写入后挂载到小行星预制体上:
using UnityEngine; public class AsteroidAutoDestroy : MonoBehaviour { private Vector2 screenBounds; // 销毁缓冲值,避免小行星刚生成在屏幕边缘就被销毁 private float destroyBuffer = 1f; void Start() { screenBounds = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, Camera.main.transform.position.z)); } void Update() { // 判断小行星是否完全移出屏幕范围 if(transform.position.x < -screenBounds.x - destroyBuffer || transform.position.x > screenBounds.x + destroyBuffer || transform.position.y < -screenBounds.y - destroyBuffer || transform.position.y > screenBounds.y + destroyBuffer) { Destroy(gameObject); } } }
如果担心多个小行星的Update造成性能损耗,也可以在deployAsteroids脚本里用List存储所有生成的小行星,统一在LateUpdate里检测位置后销毁,逻辑是一致的。
内容的提问来源于stack exchange,提问作者user16708923
相关产品推荐
相关产品推荐

