unity3d 随机范围内生成怪物

本文介绍了一个使用Unity实现的BarrackManager类,该类能够周期性地在指定范围内随机生成预设单位。通过调用InvokeRepeating方法,每隔一段时间在随机位置实例化一个预制物体。文中还详细介绍了如何计算生成范围。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using UnityEngine;
using System.Collections;


public class BarrackManager : MonoBehaviour {
	public Transform[] address;
	public GameObject[] prefabs;


	// Use this for initialization
	void Start () {
		InvokeRepeating ("setBarrack",1,3f);
	}
	
	// Update is called once per frame
	void Update () {
		
	}




	void setBarrack(){
		Transform tf = address [Random.Range (0, address.Length)];
		Bound bound = getBound (tf);
		Vector3 pos = new Vector3 (bound.getRandomX(),bound.y,bound.getRandomZ());
		Instantiate (prefabs[0],pos,Quaternion.identity);
	}


	Bound getBound(Transform tf){
		Vector3 center = tf.collider.bounds.center;
		Vector3 extents = tf.collider.bounds.extents;
		Vector3 dL = new Vector3 (center.x - extents.x,center.y,center.z - extents.z);
		Vector3 dR = new Vector3 (center.x + extents.x,center.y,center.z - extents.z);
		Vector3 sR = new Vector3 (center.x + extents.x,center.y,center.z + extents.z);
		Vector3 sL = new Vector3 (center.x - extents.x,center.y,center.z + extents.z);
		Bound bound = new Bound (dL,dR,sR,sL,center.y);


		return bound;
	}


	class Bound{
		public Vector3 dL;
		public Vector3 dR;
		public Vector3 sR;
		public Vector3 sL;
		public float y;


		public Bound(Vector3 dL,Vector3 dR, Vector3 sR, Vector3 sL,float y){
			this.dL = dL;
			this.dR = dR;
			this.sR = sR;
			this.sL = sL;
			this.y = y;
		}




		public float getRandomX(){
			float num = Random.Range (dL.x,dR.x);
			return num;
		}


		public float getRandomZ(){
			float num = Random.Range (dL.z,sL.z);
			return num;
		}






	}
	
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值