プレーヤーがすべてのウェイポイントに移動しているわけではありません。

Robotics101

敵キャラクターが3番目のウェイポイントに移動していません。ウェイポイント2に移動した後、停止してアイドルアニメーションが再生されます。キャラクターにはNavMeshAgentがあり、ウェイポイントに到達したときに宛先到達イベントがトリガーされていないようです。誰かが以前にこのような状況にあったら、私は可能な限りの情報をいただければ幸いです。私はここ数時間何が悪いのかを理解しようとしていて、それがスクリプトのどれでもないかもしれないと考え始めています。

これがウェイポイントコントローラーです

using UnityEngine;
using UnityEngine.AI; 

public class WaypointController : MonoBehaviour {

    Waypoints[] waypoints;
    public Transform target; 
    //NavMeshPath path; 
    int currentWaypointIndex = -1;
    //private NavMeshAgent agent;
    //EnemyCharacter enemy; 

    public event System.Action<Waypoints> OnWaypointChanged;

    // Use this for initialization
    void Awake () {

        waypoints = GetWaypoints();

    }

    public void SetNextWaypoint() {

        if (currentWaypointIndex != waypoints.Length)
            currentWaypointIndex++;

        if (currentWaypointIndex == waypoints.Length)
            currentWaypointIndex = 0;

        if (OnWaypointChanged != null)
            OnWaypointChanged(waypoints[currentWaypointIndex]);
        //Debug.Log("OnWaypointChanged == null: " + (OnWaypointChanged == null));
        //Debug.Log("OnWaypointChanged != null: " + (OnWaypointChanged != null));

    }
    Waypoints[] GetWaypoints()
    {
        return GetComponentsInChildren<Waypoints>();

    }
    private void OnDrawGizmos()
    {
        Gizmos.color = Color.red;

        Vector3 previousWaypoint = Vector3.zero;
        foreach (var waypoint in GetWaypoints())
        { 
            Vector3 waypointPosition = waypoint.transform.position; 
            Gizmos.DrawWireSphere(waypointPosition, .2f);
            if (previousWaypoint != Vector3.zero)
                Gizmos.DrawLine(previousWaypoint, waypointPosition);
            previousWaypoint = waypointPosition;
        }
    }
}

これがEnemyPatrolPointsスクリプトです

using UnityEngine;

[RequireComponent(typeof(AI_PathFinder))]
public class EnemyPatrolPoints : MonoBehaviour {

    [SerializeField]
    WaypointController waypointController;

    [SerializeField]
    float waitTimeMin;

    [SerializeField]
    float waitTimeMax;

    AI_PathFinder pathfinder;

    private void Start()
    {
        waypointController.SetNextWaypoint(); 
    }

    private void Awake()
    {
        pathfinder = GetComponent<AI_PathFinder>();
        pathfinder.OnDestinationReached += Pathfinder_OnDestinationReached;
        waypointController.OnWaypointChanged += WaypointController_OnWaypointChanged;
    }
    private void WaypointController_OnWaypointChanged(Waypoints waypoint)
    {
        pathfinder.SetTarget(waypoint.transform.position);
        print("waypoint changed"); 
    }
    private void Pathfinder_OnDestinationReached()
    {
        SealForce_GameManager.Instance.Timer.Add(waypointController.SetNextWaypoint, Random.Range(waitTimeMin, waitTimeMax));
        print("destination reached"); 
    }   
}

これがAIパスファインダースクリプトです `

using UnityEngine;
using UnityEngine.AI;

[RequireComponent(typeof(NavMeshAgent))]
public class AI_PathFinder : MonoBehaviour
{

    [HideInInspector]
    public NavMeshAgent agent;
    public EnemyPatrolPoints enemyPatrolPoints;

    [SerializeField] float distanceRemainingThreshold;

    bool m_destinationReached;
    bool destinationReached
    {
        get
        { return m_destinationReached; }

        set
        {
            m_destinationReached = value;

            if (m_destinationReached)
            {
                if (OnDestinationReached != null)
                    OnDestinationReached();
            }
        }
    }

    public event System.Action OnDestinationReached;

    void Start()
    {
        agent = GetComponent<NavMeshAgent>();
        //enemyPatrolPoints = GetComponent<EnemyPatrolPoints>();
    }
    public void SetTarget(Vector3 target)
    {
        agent.SetDestination(target);
    }

    void Update()
    {
        if (destinationReached)
            return;

        if (agent.remainingDistance < distanceRemainingThreshold)
            destinationReached = true;


    }
}
derHugo

台詞

if (agent.remainingDistance < distanceRemainingThreshold)
    destinationReached = true;

限りとして到達されることはありませんdestinationReachedですtrueのために

if (destinationReached)
    return;

true最初のウェイポイントに到達した後にに設定し、リセットしfalseないでくださいUpdate。これにより、今後は常にスキップされます。

あなたはそれを例えばに追加する必要があります

public void SetTarget(Vector3 target)
{
    agent.SetDestination(target);
    destinationReached = false;
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

サンプルタイムアウトはすべてのサンプラーでサポートされているわけではありません

分類Dev

レイヤーリストのすべてのアイテムが表示されているわけではありません

分類Dev

drcパッケージの用量反応曲線プロットはすべてのポイントを示しているわけではありません

分類Dev

すべてのd3ポイントがリーフレットマップの正しい位置に表示されているわけではありません

分類Dev

オンラインアカウントにすべてのGoogleカレンダーが表示されるわけではありません

分類Dev

Graphview折れ線グラフにすべてのデータポイントが表示されているわけではありません

分類Dev

FirebaseがAngular4プロジェクトのすべてのウェブページをホストしているわけではありません

分類Dev

Pythonの美しいスープetsyスクレーパーがすべてのアイテムを集めているわけではありません

分類Dev

ループはすべてのラウンドを出力しているわけではありません

分類Dev

SQLServerのOPENROWSETを使用してすべての行がExcelファイルからインポートされるわけではありません

分類Dev

Angularコンポーネントリファレンスにすべてのプロパティがあるわけではありません

分類Dev

Galaxy S5Lollipop-AndroidStudioデバッガーですべてのブレークポイントが実行を停止するわけではありません

分類Dev

すべてのポイントがScikit-Optimizeのスペースエラーの範囲内にあるわけではありません

分類Dev

Cheerioにはすべてのセレクターが付属しているわけではありません

分類Dev

Cheerioにはすべてのセレクターが付属しているわけではありません

分類Dev

すべてのアップデートをインストールできるわけではありません(パッケージがありません)

分類Dev

pthreads_cond_broadcastは、待機しているすべてのスレッドをウェイクアップするわけではありません

分類Dev

13.10起動時に自動マウントされたNTFSパーティション:アプリケーションがすべてのファイルにアクセスできるわけではありません。手動マウントは正常に機能しますか?

分類Dev

リクエストにウェブサイトコードのすべての要素が表示されるわけではありません

分類Dev

NPM Installは、以前のようにすべてのファイルをインストールしているわけではありません

分類Dev

レストレット:Cookieはドメイン/アプリのすべてのページに送信されるわけではありません

分類Dev

XSLテンプレートがすべてに一致するわけではありません

分類Dev

glDrawElementsはすべてのポイントをレンダリングするわけではありません

分類Dev

すべてのデータポイントがMicrosoftチャートに表示されるわけではありません

分類Dev

Firebaseホストにデプロイされたウェブページは、ページをロードするデバイスによっては、行われたすべての変更を反映しているわけではありません。フラッターウェブ

分類Dev

新しく作成されたすべてのプロジェクトにシミュレーターが表示されるわけではありません

分類Dev

ASP.NetWebサイト-公開してもすべてのファイルが移動するわけではありません

分類Dev

ASP.NetWebサイト-公開してもすべてのファイルが移動するわけではありません

分類Dev

Kafkasprintプラグインがすべてのパーティションを配布しているわけではありません

Related 関連記事

  1. 1

    サンプルタイムアウトはすべてのサンプラーでサポートされているわけではありません

  2. 2

    レイヤーリストのすべてのアイテムが表示されているわけではありません

  3. 3

    drcパッケージの用量反応曲線プロットはすべてのポイントを示しているわけではありません

  4. 4

    すべてのd3ポイントがリーフレットマップの正しい位置に表示されているわけではありません

  5. 5

    オンラインアカウントにすべてのGoogleカレンダーが表示されるわけではありません

  6. 6

    Graphview折れ線グラフにすべてのデータポイントが表示されているわけではありません

  7. 7

    FirebaseがAngular4プロジェクトのすべてのウェブページをホストしているわけではありません

  8. 8

    Pythonの美しいスープetsyスクレーパーがすべてのアイテムを集めているわけではありません

  9. 9

    ループはすべてのラウンドを出力しているわけではありません

  10. 10

    SQLServerのOPENROWSETを使用してすべての行がExcelファイルからインポートされるわけではありません

  11. 11

    Angularコンポーネントリファレンスにすべてのプロパティがあるわけではありません

  12. 12

    Galaxy S5Lollipop-AndroidStudioデバッガーですべてのブレークポイントが実行を停止するわけではありません

  13. 13

    すべてのポイントがScikit-Optimizeのスペースエラーの範囲内にあるわけではありません

  14. 14

    Cheerioにはすべてのセレクターが付属しているわけではありません

  15. 15

    Cheerioにはすべてのセレクターが付属しているわけではありません

  16. 16

    すべてのアップデートをインストールできるわけではありません(パッケージがありません)

  17. 17

    pthreads_cond_broadcastは、待機しているすべてのスレッドをウェイクアップするわけではありません

  18. 18

    13.10起動時に自動マウントされたNTFSパーティション:アプリケーションがすべてのファイルにアクセスできるわけではありません。手動マウントは正常に機能しますか?

  19. 19

    リクエストにウェブサイトコードのすべての要素が表示されるわけではありません

  20. 20

    NPM Installは、以前のようにすべてのファイルをインストールしているわけではありません

  21. 21

    レストレット:Cookieはドメイン/アプリのすべてのページに送信されるわけではありません

  22. 22

    XSLテンプレートがすべてに一致するわけではありません

  23. 23

    glDrawElementsはすべてのポイントをレンダリングするわけではありません

  24. 24

    すべてのデータポイントがMicrosoftチャートに表示されるわけではありません

  25. 25

    Firebaseホストにデプロイされたウェブページは、ページをロードするデバイスによっては、行われたすべての変更を反映しているわけではありません。フラッターウェブ

  26. 26

    新しく作成されたすべてのプロジェクトにシミュレーターが表示されるわけではありません

  27. 27

    ASP.NetWebサイト-公開してもすべてのファイルが移動するわけではありません

  28. 28

    ASP.NetWebサイト-公開してもすべてのファイルが移動するわけではありません

  29. 29

    Kafkasprintプラグインがすべてのパーティションを配布しているわけではありません

ホットタグ

アーカイブ