//怪物出厂设置 void ResetMonster(MonsterData monsterData, Vector3 monsterSource, MonsterSource callback) { //所有的Monster应该在刷怪处 //修改位置属性 //在塔防为中心的矩形范围内随机生成终点 monsterData.gameObject.transform.SetParent(sceneController.SmartSurface.gameObject.transform); monsterData.gameObject.transform.position = monsterSource; monsterData.isDie = false; monsterData.isInTower = false; monsterData.hp = 3; monsterData.sourceCallback = callback; //对动画机进行设置 monsterData.gameObject.GetComponent <Animator>().SetBool("Attack", false); }
public void MonsterTest() { var o = new Ontology(nameof(MonsterTest)); foreach (var decl in MonsterSource.Replace("\r", "").Split(new [] { '\n' }, StringSplitOptions.RemoveEmptyEntries)) { o.ParseAndExecute(decl); } var g = o.CommonNoun("monster").MakeGenerator(20); for (var n = 0; n < 100; n++) { g.Generate(); } Console.WriteLine(g.Problem.PerformanceStatistics); Console.WriteLine($"Average flips per solve: {g.Problem.SolveFlips.Average}"); }
//生产怪物 //生产怪物需要两个参数: //1. 怪物的生产点 //2. 怪物的类型 public void GetMonster(Vector3 monsterSource, MonsterSource callback, int type) { List <MonsterData> usingMonster; List <MonsterData> unusedMonster; //检查词典链表是否为空,并进行初始化 if (usingMonster_.ContainsKey(type) == false) { usingMonster_.Add(type, new List <MonsterData>()); } if (unusedMonster_.ContainsKey(type) == false) { unusedMonster_.Add(type, new List <MonsterData>()); } //获取对相应武器类型的链表引用 usingMonster = usingMonster_[type]; unusedMonster = unusedMonster_[type]; MonsterData monsterData = null; if (unusedMonster.Count != 0) { //取出怪物复用 monsterData = unusedMonster[0]; monsterData.gameObject.SetActive(true); unusedMonster.RemoveAt(0); } else { GameObject newMonster = null; //根据怪物类型进行实例化 switch (type) { case 1: newMonster = Instantiate(monster); break; case 2: newMonster = Instantiate(remote_monster); break; } if (newMonster != null) { monsterData = newMonster.GetComponent <MonsterData>(); //对怪物名字进行修改 newMonster.gameObject.name = "Monster" + type + "_" + usingMonster.Count; } } //创建不为空 if (monsterData != null) { //对怪物信息进行初始化 ResetMonster(monsterData, monsterSource, callback); //Vector3.forward * 0.3f; usingMonster.Add(monsterData); //近战怪物需要添加动作 //远战怪物通过动画帧事件来进行发射攻击 switch (type) { case 1: //获取终点 Vector3 destination = sceneController.mainTower.transform.position; destination.x += Random.Range(-0.5f, 0.5f); destination.z += Random.Range(-0.5f, 0.5f); //记录运动终点 monsterData.destination = destination; //对怪物添加动作 sceneController.actionManager.Play(monsterData.gameObject, new Vector3(destination.x, 0, destination.z)); break; case 2: //令怪物朝向主角方向 monsterData.gameObject.transform.LookAt(new Vector3(sceneController.player.transform.position.x, monsterData.gameObject.transform.position.y, sceneController.player.transform.position.z)); //修改怪物的动画状态 monsterData.gameObject.GetComponent <Animator>().SetBool("Attack", true); break; } } }