- เตรียมโปรเจ็กส์
- สร้าง Player
- สร้าง Enemy
- ใส่ Simple AI ให้ Enemy
- เพิ่มสิ่งกีดขวาง
1. เตรียมโปรเจ็กส์
สร้างโปรเจ็กส์
- สร้างโปรเจ็กส์ชื่อ SimpleAI
สร้างโฟลเดอร์
- สร้างโฟลเดอร์ชื่อ Scene
- สร้างโฟลเดอร์ชื่อ Material
- สร้างโฟลเดอร์ชื่อ Script
สร้าง Scene
- ที่โฟลเดอร์ Scene ให้สร้าง Scene ขึ้นมาชื่อ MainScene
ที่ MainScene ให้สร้าง Plane1
- Create > 3D Object > Plane
- Rename to Plane1
- Reset Transform
- Scale = 2, 1, 2
- ที่ โฟลเดอร์ Material สร้าง Material ชื่อ Plane1
- ที่ Material > Plane1 กำหนดให้ Color = 40, 130, 120
- ผูก Material > Plane1 กับ Plane1
ที่ Main Camera ให้ปรับมุมกล้อง
- ที่ Main Camera ให้
- Position = 0, 20, 0
- Rotation = 90, 0, 0
- Projection = Orthographic
- Size = 10
2. สร้าง Player
ที่ MainScene ให้สร้าง Player
- Create > 3D Object > Sphere
- Rename to Player
- Reset Transform
- Position = 0, 0.5, 0
- ใส่ Tag Player
- ใส่ Rigidbody ให้ Player
- Add Component > Physic > Rigidbody
- ที่ โฟลเดอร์ Material สร้าง Material ชื่อ Player
- ที่ Material > Player กำหนดให้ Color = 0, 140, 255
- ผูก Material > Player กับ Player
ที่ Player
- Add Component > New Script ชื่อ PlayerController
- ลาก PlayerController ไปไว้ในโฟลเดอร์ Script
- แก้ไขโค๊ด PlayerController
สคริป PlayerController
using UnityEngine; public class PlayerController : MonoBehaviour { public int speed = 10; private Rigidbody rb; void Start() { rb = GetComponent<Rigidbody>(); } private void FixedUpdate() { float moveHorizontal = Input.GetAxis("Horizontal"); float moveVertical = Input.GetAxis("Vertical"); Vector3 movement = new Vector3(moveHorizontal, 0.0f, moveVertical); //rb.AddForce(movement * speed); rb.velocity = movement * speed; } }
3. สร้าง Enemy
ที่ MainScene ให้สร้าง Enemy
- Create > 3D Object > Sphere
- Rename to Enemy
- Reset Transform
- Position = 0, 0.5, 8
- ที่ Sphere Collider เลือก Is Trigger
- ใส่ Rigidbody ให้ Enemy
- Add Component > Physic > Rigidbody
- ที่ โฟลเดอร์ Material สร้าง Material ชื่อ Enemy
- ที่ Material > Enemy กำหนดให้ Color = 255, 40, 40
- ผูก Material > Enemy กับ Enemy
ที่ Enemy
- Add Component -> New Script ชื่อ DestroyByContact
- ย้ำย DestroyByContact ไปไว้ในโฟลเดอร์ Script
- แก้ไขโค๊ด DestroyByContact
สคริป DestroyByContact
using UnityEngine; public class DestroyByContact : MonoBehaviour { private void OnTriggerEnter(Collider other) { if (other.CompareTag("Player")) { Destroy(other.gameObject); Destroy(gameObject); } } }
กำหนดพื้นที่ให้ Enemy เดิน (NAVMESH BAKING)
- ไปที่เมนู Windows > AI > Navigation
- ที่แท็บ Navigation เลือก Object
- เลือก Plane1 แล้ว Checked ที่ Navigation Static
- ที่แท็บ Navigation เลือก Bake จะเห็นค่า Default แต่เลือกปรับได้
- Agent Radius = 0.5
- Agent Height 2
- Max Slope = 45
- Step Height = 0.4
- กดปุ่ม Bake แล้วที่ Scene view จะเห็นพื้นที่สีฟ้า สำหรับให้ Agent (Enemy) เดิน
ที่ Enemy
- Add Component > Navigation > Nav Mesh Agent
- ค่า Default เลือกปรับได้
- Radius = 0.5
- Height = 1
- Speed = 3.5
- Stopping Distance = 0
4. ใส่ Simple AI ให้ Enemy
ที่ Enemy
- Add Component > New Script ชื่อ EnemyController
- ลาก EnemyControllerไปไว้ในโฟลเดอร์ Script
- แก้ไขโค๊ด EnemyController
สคริป EnemyController
using UnityEngine; using UnityEngine.AI; public class EnemyController : MonoBehaviour { Transform player; NavMeshAgent nav; private void Awake() { player = GameObject.FindGameObjectWithTag("Player").transform; nav = GetComponent<NavMeshAgent>(); } void Update() { nav.SetDestination(player.position); } }
- เมื่อรันดู Enemy จะเดินตาม Player ละ
ดูเพ่ิ่มเติม
5. เพิ่มสิ่งกีดขวาง
ที่ MainScene ให้สร้าง Obstacle
- Create > 3D Object > Cube
- Rename to Obstacle
- Reset Transform
- Position = 0, 0.5, 4
- ไปที่เมนู Windows > AI > Navigation
- ที่แท็บ Navigation เลือก Object
- เลือก Obstacle แล้ว Checked ที่ Navigation Static
- ที่แท็บ Navigation เลือก Bake
- กดปุ่ม Bake แล้วที่ Scene view จะเห็นพื้นที่สีฟ้า สำหรับให้ Agent (Enemy) เดินบน Plane1 แต่เว้นตรง Obstacle
ตอนนี้ Player และ Enemy ก็จะเดินยากขึ้นละ