public void UpdateEnemy(ProbabilityMap pm, List <Stage> stageList, List <Wall> wallList, Vector3 playerPos) { pm.UpdateProbabilityMap(ref stageList, this.transform.forward, this.transform.position); if (GetAttack()) { if (IsReachTarget(ref stageList)) { PushTargetPosStk(playerPos); } Look(); Shoot(playerPos); } else { if (IsReachTarget(ref stageList)) { //Debug.Log("Reach Target"); SelectTarget(pm, ref stageList); } SearchPlayer(playerPos); } forward.x = to_binary(this.transform.forward.x); forward.y = to_binary(this.transform.forward.y); SelectTarget_in_Obst(forward, ref wallList); //Coloring_Target(ref targetStage, new Color(targetStage.material.color.r, 1.0f, targetStage.material.color.b, 0.0f)); Move_Target(); }
/*===================================================*/ // 更新処理 void Update() { if (startFlag == false) { return; } // 障害物にぶつかっている時間を計測 if (ObstFlag) { obstTime += Time.deltaTime; } // 障害物に一定時間ぶつかっていた場合は障害物があると判定 if (obstTime > 2.0f) { relayStagePos = Vector3.zero; obstTime = 0; ObstFlag = false; // 次の目的地を設定 targetStage = pm.Sort_Prob(GameMgr.stageList, this); // 次の目的地の座標を設定 targetStagePos = new Vector3(targetStage.obj.transform.position.x, targetStage.obj.transform.position.y + 1, targetStage.obj.transform.position.z); // ウェイポイントを初期化 wp.Initialize(); // 目的地の方向を向く前は移動しない moveFlag = false; } // 確率マップを更新 pm.UpdateProbabilityMap(ref GameMgr.stageList, this.transform.forward, this.transform.position); switch (states) { // 通常ステートの場合 case StateType.Normal: // 通常の巡回 Patrol(normalEyeSightLength, normalEyeSightRange); // 注意・警告のUIを非表示にする dangerEnemyUIFlag = false; cautionEnemyUIFlag = false; dangerUIFlag = false; break; // 注意ステートの場合 case StateType.Caution: if (trailFlag == true) { // 現在見つけている跡より一つ新しい跡を取得 if (GameMgr.trailList.Count > foundTrailInd) { Vector3 pos = GameMgr.trailList[foundTrailInd].transform.position; pos = new Vector3(pos.x, player.transform.position.y, pos.z); // プレイヤーの跡を追跡 CautionFollowTrail(cautionEyeSightLength, cautionEyeSightRange, pos); } else { trailFlag = false; } } else { // 注意ステートの巡回 CautionPatrol(cautionEyeSightLength, cautionEyeSightRange, player.transform.position); } // 注意のUIを表示する dangerEnemyUIFlag = false; cautionEnemyUIFlag = true; dangerUIFlag = false; // cautionステートの時間を計測する ctm.UpdateCautionTime(this); break; // 警告ステートの場合 case StateType.Danger: //targetStagePos = player.transform.position; // 生きているデコイを検知した場合 if (decoy != null && decoy.GetIsDeath() == false) { // その場でデコイに攻撃する moveFlag = false; DecoyAttack(decoy.transform.position); dangerUIFlag = false; } else { // デコイが死んだのを検知した場合 if (decoy != null && decoy.GetIsDeath() == true) { // 通常ステートに移行する SetStates(StateType.Normal); speed = normalSpeed; dangerUIFlag = false; //break; } // プレイヤーを検知した場合 else { // プレイヤーを検知した場合はプレイヤーを攻撃する moveFlag = true; Attack(player.transform.position); dangerUIFlag = true; } } // 警告のUIを表示する dangerEnemyUIFlag = true; cautionEnemyUIFlag = false; break; } dangerEnemyUI.SetActive(dangerEnemyUIFlag); cautionEnemyUI.SetActive(cautionEnemyUIFlag); forward.x = to_binary(this.transform.forward.x); forward.y = to_binary(this.transform.forward.y); // 障害物があった場合に回避するためのポイントを検索し設定 SelectTarget_in_Obst(forward, GameMgr.wallList); // ターゲットの方向に移動する MoveTarget(); // UIを敵と一緒に移動させるs FollowUI(cautionEnemyUI, offset); FollowUI(dangerEnemyUI, offset); // 鍵持ち持ちの場合は鍵UIを一緒に移動させる if (keyEnemyUIFlag == true) { FollowUI(keyEnemyUI, keyOffset); } }