gpt4 book ai didi

c# - 单击鼠标将播放器旋转 90 度

转载 作者:太空宇宙 更新时间:2023-11-03 12:39:11 26 4
gpt4 key购买 nike

我正在制作一个简单的运行游戏,我正在努力做到当您单击鼠标时它会将玩家旋转 90 度,然后他会朝那个方向奔跑。因此,如果您直线奔跑,请单击您现在正在向左奔跑的鼠标。等等 播放器运行,当我单击鼠标按钮时他转动,但是第一次是 90 度,第二次更像是 60 度,然后第三次回到 90,最后第四次是 60 度(大致) 再次。我的问题是;从这段代码来看,为什么有两次点击输出的是90度,而另外两次则不是?即使每次点击都基于相同的代码。另外,如果我可以优化我的代码,我将不胜感激。这是我第一次尝试制作这样的系统。注意:

controller.Move (moveVector * Time.deltaTime);// Move the player
transform.Translate (moveVector * (speed) * Time.deltaTime); // Move on player axis instead of world axis.

两者都被使用,因为只有 Controller 。移动我的播放器只能直线运行并且只有 transform.Translate 我的播放器永远掉在地上。这是我到目前为止的代码:

using UnityEngine;
using System.Collections;
public class PlayerMotor : MonoBehaviour
{
private CharacterController controller;
private Vector3 moveVector;
private float speed = 2.0f;
private float verticalVelocity = 0.0f;
private float gravity = 12.0f;
void Start()
{
controller = GetComponent<CharacterController> ();
}
void Update()
{
if (Input.GetMouseButtonDown(0))
{
transform.Rotate(new Vector3(0, -90, 0));
}
moveVector = Vector3.forward;
if (controller.isGrounded)
{
verticalVelocity = -0.5f;
}
else
{
verticalVelocity -= gravity * Time.deltaTime;
}
moveVector.x = Input.GetAxisRaw ("Horizontal") * speed;
moveVector.y = verticalVelocity;
moveVector.z = speed;
controller.Move (moveVector * Time.deltaTime);
transform.Translate (moveVector * (speed) * Time.deltaTime);
}
}

最佳答案

玩家的旋转与玩家的移动方式无关。实际的移动路径仅由玩家的位置和 moveVector 决定。

With just controller.Move my player only runs straight.

那是因为 moveVector 总是 (0.0, -0.5, 2.0)。

如果我没记错的话,你想让玩家朝着它面向的方向移动,对吧?您可以使用如下所示的 moveVector 来实现。

    moveVector.x = transform.forward.x * speed;
moveVector.y = verticalVelocity;
moveVector.z = transform.forward.z * speed;

删除 transform.Translate 行。

关于c# - 单击鼠标将播放器旋转 90 度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39682598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com