以下程式碼先以DrawLin方式呈現射線大概位置
再處理射線部分。
若是成功會呈現出以下圖片:
-----------------------------------
------------------------------------------
再處理射線部分。
若是成功會呈現出以下圖片:
-----------------------------------
static public void LookAround(Transform targets)
{
float viewRadius = 10f; // 視野距離
float viewAngleStep = 20; // 射線數量
// 射線從左邊開始,角度為-45;
Vector3 forwardLeft = Quaternion.Euler(0, -45, 0) * targets.forward * viewRadius;
for(int i =0; i <= viewAngleStep; i++){
// 射線由forwardLeft基礎點偏轉
Vector3 vector = Quaternion.Euler(0, (90 / viewAngleStep)* i, 0) * forwardLeft;
// targets位置 + vector = 射線最終位置
Vector3 pos = targets.position + vector;
Debug.DrawLine(targets.position, pos, Color.red);
}
}
以下是透過射線,以DrawLin方式呈現
如果成功會呈現以下圖:
static public void LookAround(Transform targets)
{
float viewRadius = 10f; // 視野距離
float viewAngleStep = 20; // 射線數量
// 射線從左邊開始,角度為-45;
Vector3 forwardLeft = Quaternion.Euler(0, -45, 0) * targets.forward * viewRadius;
for(int i =0; i <= viewAngleStep; i++){
// 射線由forwardLeft基礎點偏轉
Vector3 vector = Quaternion.Euler(0, (90 / viewAngleStep)* i, 0) * forwardLeft;
// 建立射線
Ray ray = new Ray(targets.position, vector);
RaycastHit hits = new RaycastHit();
// Layer 碰撞偵測
int mask = LayerMask.GetMask("Point");
Physics.Raycast(ray, out hits, mask);
// targets位置 + vector = 射線最終位置
Vector3 pos = targets.position + vector;
Debug.DrawLine(targets.position, pos, Color.red);
// 射線碰撞到,就當碰撞點
if(hits.transform != null)
pos = hits.point;
Debug.DrawLine(targets.position, pos, Color.red);
// 碰到敵人在處理
if(hits.transform != null && hits.transform.gameObject.layer.Equals(LayerMask.NameToLayer("Point")))
{
// 射線長度
Vector3 dis = targets.position - hits.collider.transform.position;
float value = dis.sqrMagnitude;
Debug.Log(hits.collider.gameObject + "距離: " + value);
}
}
}
沒有留言:
張貼留言