几周来,我一直在努力为我的播放器增加弹奏。我现在有一个有效的脚本,但是当我尝试使用鼠标旋转播放器和相机时,脚本反应异常。当播放器面向Z方向时,播放器正常行走和奔跑,但是一旦我转过身,他就会减速并超慢移动。这是代码:
void Update () {
// input
Vector2 input = new Vector2 (Input.GetAxisRaw ("Horizontal"), Input.GetAxisRaw ("Vertical"));
Vector2 inputDir = input.normalized;
bool running = Input.GetKey (KeyCode.LeftShift);
if (!Input.GetMouseButtonDown(0) || Input.GetKey(KeyCode.JoystickButton2)) {
Move (inputDir, running);
Time.timeScale = 1;
}
if (Input.GetKeyDown (KeyCode.Space) || Input.GetKeyDown (KeyCode.JoystickButton0)) {
Jump ();
}
// animator
float animationSpeedPercent = ((running) ? currentSpeed.magnitude / runSpeed : currentSpeed.magnitude / walkSpeed * .5f);
void Move(Vector2 inputDir, bool running) {
float targetRotation = cameraT.eulerAngles.y;
transform.eulerAngles = Vector3.up * Mathf.SmoothDampAngle(transform.eulerAngles.y, targetRotation, ref turnSmoothVelocity, GetModifiedSmoothTime(turnSmoothTime));
Vector2 targetSpeed = new Vector2(
((running) ? runSpeed : walkSpeed) * inputDir.normalized.x,
((running) ? runSpeed : walkSpeed) * inputDir.normalized.y);
currentSpeed = Vector2.SmoothDamp(currentSpeed, targetSpeed,
ref speedSmoothVelocity,
GetModifiedSmoothTime(speedSmoothTime));
velocityY += Time.deltaTime * gravity;
Vector3 velocity = (transform.forward * currentSpeed.y) +
(transform.right * currentSpeed.x) +
Vector3.up * velocityY;
controller.Move(velocity * Time.deltaTime);
currentSpeed = new Vector2(controller.velocity.x, controller.velocity.z);
if (controller.isGrounded)
{
velocityY = 0;
}
}
答案 0 :(得分:0)
为了允许玩家使用默认的PlayerController
进行扫射,必须进行几次编辑。我不会为您编写代码,但是这是您需要执行的步骤,它们应该相对容易实现:
首先,您需要注释掉与轮换相关的代码
然后,您不应将目标速度作为标量浮点数来获取,而应将其计算为Vector2
或作为2个独立的浮点数(最好是前者)来计算
Vector2 targetSpeed = new Vector2(
((running) ? runSpeed : walkSpeed) * inputDir.normalized.x,
((running) ? runSpeed : walkSpeed) * inputDir.normalized.y);
currentSpeed
是一个浮点数,它依赖于targetSpeed
,,但是除了~~调整时使用currentSpeed
也成为Vector2
之外,您可以计算targetSpeed.magnitude
SmoothDamp
由于在Z上下文和X上下文中都需要速度,因此应该将currentSpeed
设为Vector2
,幸运的是,已经存在Vector2.SmoothDamp
以便于重构。< / strong>
currentSpeed = Vector2.SmoothDamp(currentSpeed, targetSpeed,
ref speedSmoothVelocity,
GetModifiedSmoothTime(speedSmoothTime));
您需要在速度计算中包括X
分量。 (请记住,Vector2
的{{1}}和X
分别对应Y
上的X
和Z
)
Vector3
最后,您希望调整Vector3 velocity = (transform.forward * currentSpeed.y) +
(transform.right * currentSpeed.x) +
Vector3.up * velocityY;
以包括适当的currentSpeed
和X
速度。 这可以简单地通过基于 Z
而不是Vector3
Vector2
顺便说一句,欢迎您使用StackOverflow-将来您要确保包含minimal, verifiable, and complete example,而不仅仅是默认的未修改代码。
如果您证明自己已经做出了自己的努力,人们会更愿意提供帮助。