1

ここが質問するのに適切な場所かどうかわかりません。これはゲーム開発関連の質問だからです。この質問をここ (gamedev.stackexchange.com - https://gamedev.stackexchange.com/questions/109190/navmashagent-not-moving ) に投稿しましたが、まだ応答がありません。また、Unity フォーラム ( http://answers.unity3d.com/questions/1075904/navmashagent-not-moving-in-unity3d-5.html ) にも投稿してください。私を助けるためにここにいる人は誰でも。

ここにもう一度質問を投稿します

Cube を CheckPoints に移動しようとしています。FindClosestTarget() メソッドは、最も近いチェックポイントを提供します。Cube が CheckPoint にヒットすると、ChackPoint は Inactive として設定されます。衝突が発生すると、FindClosestTarget() を再度呼び出して、新しい最も近い CheckPoint を取得します。動かないキューブです。一番近いチェックポイントを見ても動かない。

using UnityEngine;
using System.Collections;

public class EnimyAI03N : MonoBehaviour {

    NavMeshAgent agent;
    Transform Target;
    private float rotationSpeed=15.0f;

    void Start () {
        agent = GetComponent<NavMeshAgent>();
        Target = FindClosestTarget ().transform;
    }

    void Update () 
    {
        LookAt (Target);
        MoveTo (Target);

    }

    // Turn to face the player.
    void  LookAt (Transform T){
        // Rotate to look at player.
        Quaternion rotation= Quaternion.LookRotation(T.position - transform.position);

        transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime*rotationSpeed);
        //transform.LookAt(Target); alternate way to track player replaces both lines above.

    }

    void  MoveTo (Transform T){
        agent.SetDestination(T.position); 
    }

    void OnCollisionEnter (Collision col)
    {

        if(col.gameObject.name.Contains("CheckPoint"))
        {
            Target = FindClosestTarget ().transform;
        }
    }

    GameObject FindClosestTarget() {
        GameObject[] gos;
        gos = GameObject.FindGameObjectsWithTag("CheckPoint");

        GameObject closest=null;
        float distance = Mathf.Infinity;
        Vector3 position = transform.position;
        foreach (GameObject go in gos) {
            Vector3 diff = go.transform.position - position;
            float curDistance = diff.sqrMagnitude;

            if (curDistance < distance) {
                closest = go;
                distance = curDistance;
            }
        }
        return closest;
    }

}
4

1 に答える 1

0

新しいターゲットを検索する前に、両方の行を同じ領域に配置するだけで、これが行われてSetActive(false);いることを確認してください。

void OnCollisionEnter (Collision col)
{
    if(col.gameObject.name.Contains("CheckPoint"))
    {
        col.gameObject.SetActive(false);
        Target = FindClosestTarget ().transform;
    }
}
于 2015-10-05T13:46:02.620 に答える