私はすでにこれに関する他の質問を読んでおり、どれも問題を解決していません。私はプレイヤーに近づくとAIが戻ってくるゲームを作っています[レイがある距離を飛ぶならば、レイキャストはブールをトグルします]しかし、これはアップデート機能にあるので、レイはすべてのフレームを更新し、その後、AIを元に戻すためのコードを既に開始しているので、ブールをトグルします。ブールを避けるにはレイヤーマスクを使用してレイキャスティングを一時停止する方法を教えてください真であるので、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;
}
}
なぜレイアマスクを使うべきだと思いますか? 'avoid == true'のときにレイキャストしないほうが簡単ではないですか? –
これを達成するためのオプションがあります:State Machine、 "IF(false == avoid)"文などで呼び出しをカプセル化します。RayCastは非常に高価です。 – Cabrra