需要实现功能
怪物将在特定的区域
内进行 生成
知识点
Object.Instantiate(Object original, Vector3 position, Quaternion rotation, Transform parent)
克隆 original
对象并返回克隆对象。
Random.Range(float min, float max);
返回介于min
和max
之间的随机浮点数(只读)
注意max
包含在内。 Random.Range(0.0f,1.0f)可以返回1.0作为值
。
Random.Range分布是均匀的。 范围是一个随机数生成器。
Transform.TransformPoint(Vector3 position);
将 position
从本地空间变换到世界空间。
该方法会根据当前对象
的坐标
和缩放
来转换
Quaternion.identity
单位旋转(只读)。
该四元数对应于“no rotation”- 对象与世界轴或父轴完全对齐。
完整代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MonsterGenerate : MonoBehaviour
{
[Header("生成怪物的最大数量")] [SerializeField] private int monsterNumMax = 8;
[Header("当前怪物的数量")] [SerializeField] private int monsterCurrNum = 0;
[Header("加载出的怪物对象")] [SerializeField] private GameObject monsterPrefabObj;
[Header("怪物列表")] [SerializeField] private List<GameObject> monsterList = new List<GameObject>();
private void Start()
{
//加载怪物对象
monsterPrefabObj = Resources.Load<GameObject>("Prefabs/Models/Monster1");
//启用协程
StartCoroutine(GenerateMonster());
}
/// <summary>
/// 利用协程生成怪物
/// </summary>
/// <returns></returns>
private IEnumerator GenerateMonster()
{
while (true)
{
if (monsterCurrNum < monsterNumMax)
{
//随机生成一个本地坐标
var localPos = new Vector3(GetRndF(), GetRndF(), GetRndF());
//将本地坐标转为世界坐标
var pos = transform.TransformPoint(localPos);
//获取随机的方向
var rotation = Quaternion.Euler(0f, Random.Range(0f, 360f), 0f);
//实例化一个怪物对象
var monsterInstance = Instantiate(monsterPrefabObj, pos, rotation, null);
monsterList.Add(monsterInstance);
monsterCurrNum++;
yield return new WaitForSeconds(5f); //每隔五秒
}
yield return null;
}
}
/// <summary>
/// 获取随机数
/// </summary>
/// <returns></returns>
private float GetRndF()
{
return Random.Range(-0.5f, 0.5f);
}
}