Pindahkan Agen ke Posisi Diklik oleh Mouse
Animasi Kopling dan Navigasi

Membuat Patroli Agen Antara Set Poin

Banyak permainan fitur NPC yang patroli secara otomatis di sekitar area bermain. Sistem navigasi dapat digunakan untuk menerapkan perilaku ini tetapi sedikit lebih terlibat daripada jalur standar - hanya menggunakan jalur terpendek antara dua poin membuat rute patroli terbatas dan dapat diprediksi. Anda bisa mendapatkan pola patroli yang lebih meyakinkan dengan menjaga set poin kunci yang “menggunakan” untuk NPC untuk melewati dan mengunjunginya dalam beberapa urutan. Misalnya, dalam jagung, Anda mungkin menempatkan titik patroli kunci pada persimpangan dan sudut untuk memastikan agen memeriksa setiap koridor. Untuk bangunan kantor, poin kunci mungkin menjadi kantor individu dan kamar lainnya.

A maze with key patrol points marked
Semak dengan poin patroli kunci ditandai

Urutan ideal poin patroli akan tergantung pada cara Anda ingin NPC untuk berperilaku. Misalnya, robot mungkin hanya akan mengunjungi poin dalam urutan metodis sementara penjaga manusia mungkin mencoba menangkap pemain keluar dengan menggunakan pola yang lebih acak. Perilaku sederhana dari robot dapat diterapkan menggunakan kode yang ditunjukkan di bawah ini.

Titik patroli dipasok ke skrip menggunakan array Transforms publik. array ini dapat ditugaskan dari inspectorJendela Unity yang menampilkan informasi tentang Pengaturan GameObject yang dipilih saat ini, aset atau proyek, memungkinkan Anda untuk memeriksa dan mengedit nilai. More info
Lihat di Glossary
menggunakan GameObjectsObjek mendasar dalam adegan Unity, yang dapat mewakili karakter, props, pemandangan, kamera, waypoints, dan banyak lagi. Fungsi GameObject didefinisikan oleh Komponen yang melekat padanya. More info
Lihat di Glossary
untuk menandai posisi poin. Fungsi GotoNextPoint menetapkan titik tujuan untuk agen (yang juga mulai bergerak) dan kemudian memilih tujuan baru yang akan digunakan pada panggilan berikutnya. Seperti itu berdiri, siklus kode melalui poin dalam urutan yang terjadi di array tetapi Anda dapat dengan mudah memodifikasi ini, mengatakan dengan menggunakan Login Login untuk memilih indeks array secara acak.

Dalam fungsi Update, skrip memeriksa bagaimana menutup agen adalah dengan tujuan menggunakan properti Login Login. Ketika jarak ini sangat kecil, panggilan ke GotoNextPoint dibuat untuk memulai kaki berikutnya dari patroli.

    // Patrol.cs
    using UnityEngine;
    using UnityEngine.AI;
    using System.Collections;


    public class Patrol : MonoBehaviour {

        public Transform[] points;
        private int destPoint = 0;
        private NavMeshAgent agent;


        void Start () {
            agent = GetComponent<NavMeshAgent>();

            // Disabling auto-braking allows for continuous movement
            // between points (ie, the agent doesn't slow down as it
            // approaches a destination point).
            agent.autoBraking = false;

            GotoNextPoint();
        }


        void GotoNextPoint() {
            // Returns if no points have been set up
            if (points.Length == 0)
                return;

            // Set the agent to go to the currently selected destination.
            agent.destination = points[destPoint].position;

            // Choose the next point in the array as the destination,
            // cycling to the start if necessary.
            destPoint = (destPoint + 1) % points.Length;
        }


        void Update () {
            // Choose the next destination point when the agent gets
            // close to the current one.
            if (!agent.pathPending && agent.remainingDistance < 0.5f)
                GotoNextPoint();
        }
    }
    // Patrol.js
    var points: Transform[];
    var destPoint: int = 0;
    var agent: NavMeshAgent;


    function Start() {
        agent = GetComponent.<NavMeshAgent>();

        // Disabling auto-braking allows for continuous movement
        // between points (ie, the agent doesn't slow down as it
        // approaches a destination point).
        agent.autoBraking = false;

        GotoNextPoint();
    }


    function GotoNextPoint() {
        // Returns if no points have been set up
        if (points.Length == 0)
            return;
            
        // Set the agent to go to the currently selected destination.
        agent.destination = points[destPoint].position;

        // Choose the next point in the array as the destination,
        // cycling to the start if necessary.
        destPoint = (destPoint + 1) % points.Length;
    }


    function Update() {
        // Choose the next destination point when the agent gets
        // close to the current one.
        if (!agent.pathPending && agent.remainingDistance < 0.5f)
            GotoNextPoint();
    }
Pindahkan Agen ke Posisi Diklik oleh Mouse
Animasi Kopling dan Navigasi