我在“ LevitateMotor”类中有一个函数,该函数使我的CharacterController悬浮或游动。应该通过调用CharacterController.Move方法来设置CollisionFlags变量。但是由于某些原因,在CharacterController移动并与墙碰撞后未设置collisionFlags
。角色正在被墙停止,但没有CollisionFlag更改发生。我不知道的Move方法有一些限制吗?
完全相同的CharacterController使用不同的“ GroundMotor”类使角色在地面上行走,并且该类中的crashFlags变量会根据其碰撞的内容正确更改。
playerMotor.controller
是CharacterController,朝下面方法的底部看,以找到冲撞标记分配。
// this is the member-level declaration reference to PlayerMotor inside LevitateMotor class
public PlayerMotor playerMotor;
// PlayerMotor is initialized like this in the Start method
playerMotor = GetComponent<PlayerMotor>();
void Move(Vector3 direction, bool upOrDown = false)
{
if (playerSwimming)
{
// Do not allow player to swim up out of water, as he would immediately be pulled back in, making jerky movement and playing the splash sound repeatedly
if ((direction.y > 0) && (playerMotor.controller.transform.position.y + (50 * MeshReader.GlobalScale) - 0.93f) >=
(GameManager.Instance.PlayerEnterExit.blockWaterLevel * -1 * MeshReader.GlobalScale) &&
!playerLevitating)
direction.y = 0;
Entity.PlayerEntity player = GameManager.Instance.PlayerEntity;
float baseSpeed = speedChanger.GetBaseSpeed();
moveSpeed = speedChanger.GetSwimSpeed(baseSpeed);
}
// There's a fixed speed for up/down movement
if (upOrDown)
moveSpeed = 80f / PlayerSpeedChanger.classicToUnitySpeedUnitRatio;
collisionFlags = playerMotor.controller.Move(direction * moveSpeed * Time.deltaTime);
// Reset to levitate speed in case it has been changed by swimming
moveSpeed = 4.0f;
}
以下是GroundMotor类中的赋值语句,该赋值语句正确地分配了冲撞标志。而且CharacterController也可以正确移动。
// this is the member level CharacterController declaration
private CharacterController controller;
// Initialized in start method
controller = GetComponent<CharacterController>();
// Called to move the controller via walking
collisionFlags = controller.Move(moveDirection * Time.deltaTime);