[英]Rigidbody Mobs fall through ground while walking
我有一個很奇怪的問題,我為我的游戲統一創建了自定義MOB AI(它具有程序生成的體素世界,因此代理不能很好地工作)。 我在移動的小怪上使用剛體。
但是我有一個問題,就是小生物在移動時會進入地板內(站立時不會發生),站立時會向后移動! 這不是動畫,我禁用了動畫,但它仍然會發生。
這是我如何移動它們:
private void WalkToTarget()
{
if (goal != Vector3.zero)
{
if (goal.y <= 5)
{
currentstatus = MOBSTATUS.STANDING;
return;
}
var distance = Vector3.Distance(VoxelPlayPlayer.instance.transform.position, gameObject.transform.position);
if (distance < 15)
{
goal = VoxelPlayPlayer.instance.transform.position;
goal.y = VoxelPlayEnvironment.instance.GetHeight(goal);
}
if (distance < 5)
{
this.currentstatus = MOBSTATUS.ATTACKING;
}
//MOVEMENT HAPPENS HERE
Vector3 direction = (goal - mobcontroller.transform.position).normalized*2f;
if(mobcontroller.collisionFlags!=CollisionFlags.CollidedBelow)
direction+= Vector3.down;
mobcontroller.Move(direction * Time.fixedDeltaTime);
RotateTowards(direction);
}
}
編輯:
所有代碼: https : //pastebin.com/khCmfKGi
問題的一部分是您使用的CollisionFlags
錯誤。
代替這個:
if(mobcontroller.collisionFlags!=CollisionFlags.CollidedBelow)
你需要這樣做
if(mobcontroller.collisionFlags & CollisionFlags.CollidedBelow)
因為您正在嘗試檢查暴徒是否至少在下面碰撞,所以不是要檢查暴徒是否僅在下面碰撞。
即使這樣, CharacterController.Move
也不應該使您自己通過碰撞器。
我懷疑在某些情況下RotateTowards(direction)可能會在地面上旋轉暴民對撞機的邊界。 為避免這種情況,我建議創建一個lookDirection,使您在執行RotateTowards時保持字符旋轉平緩:
Vector3 direction = (goal - mobcontroller.transform.position).normalized*2f;
if(mobcontroller.collisionFlags & CollisionFlags.CollidedBelow)
direction+= Vector3.down;
mobcontroller.Move(direction * Time.fixedDeltaTime);
Vector3 lookDirection = (goal - mobController.transform.position);
lookDirection.y = mobController.transform.y;
RotateTowards(lookDirection);
在暴民上使用Rigidbody
和CharacterController
時發生此問題。 從暴民Rigidbody
移除Rigidbody
就解決了這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.