สิ่งที่อยู่ใน VDO
- การเขียน Editor สำหรับวาดรัศมีที่ Enemy จะทำการ Acitve
- วิธีการตรวจจับสิ่งกีดขวางระหว่าง Player และ Enemy
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(AIController))]
public class AIEditor : Editor
{
void OnSceneGUI()
{
AIController ai = target as AIController;
Color arcColor = Color.white;
arcColor.a = 0.1f;
Handles.color = arcColor;
Handles.DrawSolidArc(ai.transform.position, Vector3.up, Vector3.forward, 360f, ai.activeDist);
}
}
using UnityEngine;
using System.Collections.Generic;
using System.Linq;
public class AIController : MonoBehaviour
{
public Transform player;
public float activeDist;
public LayerMask targetMask;
public LayerMask obstacleMask;
private NavMeshAgent navMesh;
public List<Transform> visibleTargets = new List<Transform>();
private Transform target;
void Start()
{
navMesh = GetComponent<NavMeshAgent>();
}
void Update()
{
CheckTargetArea();
}
private void CheckTargetArea()
{
visibleTargets.Clear();
Collider[] colliders = Physics.OverlapSphere(transform.position, activeDist, targetMask);
for (int i = 0; i < colliders.Length; i++)
{
Transform targetArea = colliders[i].transform;
Vector3 dirToTarget = (targetArea.position - transform.position).normalized;
if (Vector3.Angle(transform.forward, dirToTarget) < (360*0.5f))
{
float distToTarget = Vector3.Distance(transform.position, targetArea.position);
if (!Physics.Raycast(transform.position, dirToTarget, distToTarget, obstacleMask))
{
visibleTargets.Add(targetArea);
}
}
}
if (visibleTargets.Count > 0)
{
target = visibleTargets.First();
navMesh.destination = player.position;
}
}
}
ปล. มีอะไรแนะนำได้นะครับ
NO GAME NO DREAM !!!!