我試圖讓AI代理站在實際目標的固定位置上。當AI達到目標時轉換爲固定位置
我被要求分享代碼。這是最終狀態機的一個腳本,我在網上找到。
這裏是C#中的整個狀態代碼:
public class GoToSpecificPoint : IShopperState
{
private readonly StatePatternShopper shopper;
private readonly float distanceFromShelfModifier = 1.5f;
private int nextWayPoint;
private bool enRoute = false;
private bool waitingForPlayer = false;
private float initialPlayerDistanceFromShelf = 1f;
private Transform playerTransform;
private Vector3 targetLocation;
private bool inPlayerSpace = false;
private bool alreadyPicked = false;
public GoToSpecificPoint(StatePatternShopper statePatternShopper)
{
shopper = statePatternShopper;
}
public void UpdateState()
{
if (PlayerStillAtShelf())
{
enRoute = false;
waitingForPlayer = true;
}
else if (waitingForPlayer && !PlayerStillAtShelf())
{
waitingForPlayer = false;
ToReachPointState();
}
}
private bool PlayerStillAtShelf()
{
float dist;
if ((dist = Vector3.Distance(targetLocation, playerTransform.position)) > (initialPlayerDistanceFromShelf * distanceFromShelfModifier))
{
return false;
}
return true;
}
public void SpecificPoint(Vector3 target, Transform player)
{
alreadyPicked = false;
enRoute = true;
playerTransform = player;
target = new Vector3(player.position.x, 0, player.position.z - 1);
targetLocation = target;
initialPlayerDistanceFromShelf = Vector3.Distance(targetLocation, playerTransform.position);
shopper.meshRendererFlag.material.color = Color.red;
shopper.navMeshAgent.destination = targetLocation;
shopper.navMeshAgent.Resume();
shopper.animator.SetBool("Walk", true);
}
}
我想要的「目標」,真正做到貼近玩家,讓AI站在一個固定的玩家變換。
編輯:場景是超市,目標是用戶。用戶正在接近貨架,AI正在接近用戶。所以我需要他們站在一條線上。
我不確定我是否正確理解你 - 當你真的接近它時,你想要將AI修理到某個位置? – Fiffe
您目前的代碼以何種方式失敗?它是否接近目標,但停下來?它根本不動嗎?目標是否位於導航網址上? – Serlite
@Fiffe我想你可以這麼說。我想把我的AI修正到相對於目標的位置。今天,大多數腳本都有AI去達到目標,我希望它能夠站在目標附近。 –