追跡機能のついた敵をランダム出現させたい
解決済
回答 1
投稿
- 評価
- クリップ 1
- VIEW 1,733
問題事項
NavMeshagentを使ってPlayerを追いかける敵キャラを作ることができました.次にこれをランダム出現させたいと思って,プレハブを作って,ランダム出現のGeneratorスクリプトを空のオブジェクトにアタッチしたところ,出現はするけどPlayerを追跡しなくなってしまいました.
よくみると敵キャラにアタッチされてたControlerスクリプトに設定していたagent(追跡対象)が,プレハブだと設定できなくなっていて,それが原因かと思い,Generatorスクリプトをアタッチした空のオブジェクトにNavMeshAgentの機能をつけて,Generatorスクリプトを以下のように変更してみました.そしたらagentにPlayerを設定することができたのでこれで大丈夫だろう,と思ったのですがそれでも追跡はしてくれませんでした...
何がいけないのでしょうか?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class ZombiGenerator : MonoBehaviour {
public GameObject zonbi1Prefab;
public GameObject zonbi2Prefab;
public GameObject zonbi3Prefab;
float span = 1.0f;
float delta = 0;
public Transform player;
public GameObject target;
NavMeshAgent agent;
// Use this for initialization
void Start () {
agent = GetComponent<NavMeshAgent> ();
}
// Update is called once per frame
void Update () {
this.delta += Time.deltaTime;
if (this.delta > this.span) {
this.delta = 0;
GameObject item;
int dice = Random.Range (1, 11);
if (dice == 1) {
item = Instantiate (zonbi3Prefab) as GameObject;
}else if((dice >= 2) && (dice<4)) {
item = Instantiate (zonbi2Prefab) as GameObject;
}else {
item = Instantiate (zonbi1Prefab) as GameObject;
}
float x = Random.Range (-10, 11);
float z = Random.Range (-5, 34);
item.transform.position = new Vector3 (x, player.position.y, z);
}
agent.destination = target.transform.position;
}
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
質問のスクリプトをみてみると以下のようになっているようです。
- ゾンビを生成する
- 自分自身(空のゲームオブジェクト)に付けられたNavMeshAgentにdestination(行き先)をセットする ← ここがおかしい
ゾンビのNavMeshAgentに行き先をセットするには、item.transform.position = new Vector3 (x, player.position.y, z);
の次の行(同じif文の中)に
item.GetComponent<NavMeshAgent>().destination = target.transform.position;
のように追記してみてはいかがでしょうか。
(おそらくZombiGeneratorのオブジェクトにはNavMeshAgentは不要でしょう)
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.35%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2019/01/14 18:23
ZombiGeneratorオブジェクトのNavMeshAgentをはずし,コードは以下のうように変更しました.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class ZombiGenerator : MonoBehaviour {
public GameObject zonbi1Prefab;
public GameObject zonbi2Prefab;
public GameObject zonbi3Prefab;
float span = 1.0f;
float delta = 0;
public Transform player;
public GameObject target;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
this.delta += Time.deltaTime;
if (this.delta > this.span) {
this.delta = 0;
GameObject item;
int dice = Random.Range (1, 11);
if (dice == 1) {
item = Instantiate (zonbi3Prefab) as GameObject;
} else if ((dice >= 2) && (dice < 4)) {
item = Instantiate (zonbi2Prefab) as GameObject;
} else {
item = Instantiate (zonbi1Prefab) as GameObject;
}
float x = Random.Range (-10, 11);
float z = Random.Range (-5, 34);
item.transform.position = new Vector3 (x, player.position.y, z);
item.GetComponent<NavMeshAgent>().destination = target.transform.position;
}
}
}