ตัวโค้ดค่อนข้างยาวเลยขอแปะรูปไว้ให้อ่านกันง่ายๆนะครับ
สำหรับวิธีการใช้งาน
(ตอนก้อบโค้ดไปวางอย่าลืมเปลี่ยนชื่อไฟล์นะ)
using System.Collections;
using System.Collections.Generic;
public class botVision : MonoBehaviour
{
public float range = 5;
public float angleRange = 45;
public int resolution = 10;
public List<GameObject> seeingObj = new List<GameObject>();
float angle = 0;
void Update ()
{
seeingObj.Clear();
for (int ct1 = 0; ct1 < resolution; ct1++)
{
for (int ct2 = -1; ct2 <= 1; ct2 += 2)
{
int oldListLen = seeingObj.Count;
bool[] existListHash = new bool[oldListLen];
angle = angleRange / resolution * ct1 * ct2;
Ray ray = new Ray(transform.position,new Vector3(Mathf.Sin((angle + transform.eulerAngles.y) * Mathf.Deg2Rad), 0, Mathf.Cos((angle + transform.eulerAngles.y) * Mathf.Deg2Rad)));
RaycastHit hitData;
if (Physics.Raycast(ray,out hitData,range))
{
if (hitData.collider.gameObject != gameObject)
if(seeingObj.Contains(hitData.collider.gameObject) == false)
seeingObj.Add(hitData.collider.gameObject);
}
}
}
}
//DEBUGGING ZONE//
void OnDrawGizmos()
{
for (int ct1 = 0; ct1 < resolution; ct1++)
{
for (int ct2 = -1; ct2 <= 1; ct2 += 2)
{
angle = angleRange / resolution * ct1 * ct2;
Gizmos.color = Color.yellow;
Gizmos.DrawRay(transform.position, range * new Vector3(Mathf.Sin((angle + transform.eulerAngles.y) * Mathf.Deg2Rad), 0, Mathf.Cos((angle + transform.eulerAngles.y) * Mathf.Deg2Rad)));
}
}
}
}
#6 สารบัญแชร์โค้ด