0
我已經閱讀了其他問題,並沒有解決我的問題。我正在製作一個AI,如果AI靠近玩家就會退回[如果光線擊中某個距離,光線會轉換爲布爾值],但是因爲這是更新函數,所以光線會更新每一幀,並且然後當我不需要它時切換布爾值,因爲我已經啓動了使AI返回的代碼,請有人告訴我如何使用圖層蒙版臨時停止射線投射,當'avoid'布爾是當AI向後移動時,光線投射被忽略,代碼;統一使用圖層蒙版臨時忽略光線投射
void Update()
{
//raycasting
RaycastHit hit;
Ray ray = new Ray(transform.position, Vector3.forward);
//check if raycast hit player
if (Physics.Raycast(ray, out hit, 2))
{
if (hit.collider.tag == "PlayerFront")
{
avoid = true;
movementSpeed = 0;
}
}
else
{
movementSpeed = 2f;
avoid = false;
}
if (avoid == true)
{
startPos = enemy.transform.position;
endPos = enemy.transform.position + Vector3.back * distance;
currentLerpTime += Time.deltaTime;
if (currentLerpTime >= lerpTime)
{
currentLerpTime = lerpTime;
}
float perc = currentLerpTime/lerpTime;
enemy.transform.position = Vector3.Lerp(startPos, endPos, perc);
avoidCount+=1;
avoid = false;
}
else if (avoid == false)
{
transform.LookAt(target);
transform.Translate(Vector3.forward * Time.deltaTime * movementSpeed);
currentLerpTime = 0;
}
}
你爲什麼認爲你應該使用圖層遮罩? 「避免==真實」時,僅僅不進行光線投射並不容易? –
您可以選擇完成此操作:狀態機,使用「IF(false == avoid)」語句等封裝調用... RayCast是相當昂貴的操作。 – Cabrra