首先:抱歉我的英语不好,我是荷兰人。
我正在尝试创建一个可以向前和向后行走的玩家对象(使用向上和向下键),并使用右键和左键旋转播放器。但是当我按下左或右键时,播放器的位置会发生变化,看起来它会绕某一点旋转。但它应该旋转并保持在同一个地方,就像我转身时一样。
我有一些其他小程序,具有相同的'移动脚本'和相同的inputmanager设置。它工作得很好,所以我不知道为什么它这次不起作用。
这是我的移动脚本,但此脚本适用于其他程序:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveScript : MonoBehaviour
{
public float speed = 3f;
public float rotate = 50f;
private Rigidbody rb;
// Update is called once per frame
private void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
if (Input.GetButton("Up"))
transform.Translate(Vector3.forward * speed * Time.deltaTime);
if (Input.GetButton("Down"))
transform.Translate(-Vector3.forward * speed * Time.deltaTime);
if (Input.GetButton("Right"))
transform.Rotate(Vector3.up, rotate * Time.deltaTime);
if (Input.GetButton("Left"))
transform.Rotate(-Vector3.up, rotate * Time.deltaTime);
if (gameObject.GetComponent<Rigidbody>().velocity.y < 0.01)
{
if (Input.GetButtonDown("Jump"))
rb.AddForce(0, 225, 0);
}
}
}
InputManager设置(也与其工作正常的其他程序相同):
如果有人想要我的程序的其他内容的屏幕截图,您当然可以随时询问它。我不知道问题是什么,如果它不在脚本或输入管理器中。
答案 0 :(得分:0)
根据OP中的评论,解决方案应该是:
if (Input.GetButton("Right"))
transform.localEulerAngles = transform.localEulerAngles + new Vector3(xRotation, 0, 0) * Time.deltaTime;
if (Input.GetButton("Left"))
transform.localEulerAngles = transform.localEulerAngles - new Vector3(xRotation, 0, 0) * Time.deltaTime;
其中xRotation
是一个浮点数,当其中一个旋转键关闭时,您希望每秒旋转一次。
(PS:现在不要打开统一,所以+
和-
可能会被颠倒,但应该是这样的。)