【发布时间】:2018-10-19 05:21:44
【问题描述】:
我有一个非常奇怪的问题,我为我的游戏创建了统一的自定义 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);
}
}
编辑:
【问题讨论】:
-
你的地面上有碰撞器吗?
-
@Ruzihm 是的。似乎有时 if 语句在移动时是正确的,这使得它降低了 Y 值。 if 语句是检查玩家是否接地,如果不添加重力,但由于某种原因,有时当它接地并运行时它也不会检测到地面,并且它随机发生,有时会,有时不会。我也尝试过正常地形和同样的问题