moba类游戏开发日志(六)Monster的生成与移动
monster和我们控制的主角在本质上并没有什么区别,只不过主角的移动受我们玩家的控制,而monster算是“自由”的(笑)
因此我们可以类比主角的实例化,用近似的操作去实例化monster,或者直接将预制体拖进scene中
如果是只需要一只monster这种方法没有问题,但是如果我们需要简单的控制多只monster并且在固定位置生成,这种方法显然效率低下且在游戏一开始就会占用大量资源
为了解决这个问题,我开始想,既然单个monster我们可以传进去需要的transform以及prefab,那么对于多个monster可不可以给他们指定一个parent,然后大家都从parent上面get我们需要的参数
显然这种方法是可以的,但是如何指定每隔一段时间再生成monster呢?这里便需要引入协程了,具体生成monster的实现如下
using System.Collections; using System.Collections.Generic; using UnityEngine; public class CreateSoldier : MonoBehaviour { [SerializeField] private GameObject soldierPrefab; [SerializeField] private Transform startTran; [SerializeField] private Transform soldierParent; bool isCreateSoldier = true; public int soldierCount = 2; [SerializeField] Transform[] towers; void Start() { // print(tower.position.x); // print(tower.position.y); StartCoroutine(Creat(0,1,5)); } void CreateSmartSoldier(Transform startTRan,Transform[] towers) { GameObject obj = Instantiate(soldierPrefab,startTran.position,Quaternion.identity) as GameObject; obj.transform.parent = soldierParent; SmartSoldier soldier = obj.GetComponent<SmartSoldier>(); soldier.towers = towers; // print(soldier.tower.position.x); // print(soldier.tower.position.y); } private IEnumerator Creat(float time,float delyTime,float spwanTime) { yield return new WaitForSeconds(time); while(isCreateSoldier) { for(int i = 0;i < soldierCount; i++) { CreateSmartSoldier(startTran,towers); yield return new WaitForSeconds(delyTime); } yield return new WaitForSeconds(spwanTime); } } }
生成monster之后monster的一个简单的移动其实和角色移动控制没啥区别,这里就不说了,难点在于自动寻路与寻路-攻击-再寻路这一逻辑的实现,具体下次自己实现了再写
发表评论