答案 0 :(得分:1)
一种简单的方法可能是将玩家沿着轴的位置设置回每个刻度线上的固定值。由于你想将他锁定到X轴,你需要确保他的棋子不会沿着Y轴移动。
如果您使用的是自定义PlayerController:
class MyPlayerController extends PlayerController;
simulated event Tick (float deltaTime)
{
local vector snappedLocation;
Super.Tick(deltaTime);
if (Pawn != none)
{
snappedLocation = Pawn.Location;
snappedLocation.Y = 0.0;
Pawn.SetLocation(snappedLocation);
}
}
或者如果你想要的不仅仅是玩家的棋子锁定在X轴上(比如说你想让敌人锁定在X轴上),你可以在Pawn的一个或多个子类中实现它:
class MyPawn extends Pawn;
simulated event Tick (float deltaTime)
{
local vector snappedLocation;
Super.Tick(deltaTime);
snappedLocation = Location;
snappedLocation.Y = 0.0;
SetLocation(snappedLocation);
}
根据您尝试做的事情,您可能会遇到这种方法的问题,因为玩家仍然可以转身,他的Velocity
和Acceleration
向量可能不会严格指向X轴。您可以尝试通过扩展PlayerInput
类来禁用转弯,并始终在aTurn
事件中将PlayerInput
设置为零。一个更强大的解决方案可能是在PlayerController中自己做一些数学运算,并确保pawn的速度和加速度只能沿着X轴指向;查看PlayerController中PlayerMove
状态的PlayerWalking
函数,了解如何使用PlayerController通过改变其加速度来控制Pawn的运动。