我正在尝试重写一个月前开发的旧游戏,但是在实现运动脚本方面遇到困难。
到目前为止,我有一个基本的运动系统,我只需在其中添加与L,R,U,D箭头键有关的速度和力即可。我这样做不是为了获得基本的水平和垂直轴,因为它们在我的下一部分代码中遇到了问题。
一切正常,直到我在脚本中添加播放器注视mousePosition
的脚本为止。我想我的播放器向着鼠标位置旋转时,其关于哪个位置向左和哪个位置向右的想法变得混乱了。
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class movement : MonoBehaviour {
private Camera mainCamera;
public float speed = 5f;
// Use this for initialization
void Start ()
{
mainCamera = FindObjectOfType<Camera>();
}
void LookAtPositionOfMouse()
{
Ray cameraRay = mainCamera.ScreenPointToRay(Input.mousePosition);
Plane groundPlane = new Plane(Vector3.up, Vector3.zero);
float raylength;
if (groundPlane.Raycast(cameraRay, out raylength))
{
Vector3 pointToLook = cameraRay.GetPoint(raylength);
Debug.DrawLine(cameraRay.origin, pointToLook, Color.blue);
transform.LookAt(new Vector3(pointToLook.x, transform.position.y, pointToLook.z));
}
}
// Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.RightArrow))
{
transform.position += Vector3.right * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.position += Vector3.left * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.UpArrow))
{
transform.position += Vector3.forward * speed * Time.deltaTime;
}
if (Input.GetKey(KeyCode.DownArrow))
{
transform.position += Vector3.back * speed * Time.deltaTime;
}
LookAtPositionOfMouse();
}
}
我知道这是一种非常原始的方式,但是在尝试解决这个问题时,我现在想使一切保持简单。
谢谢。
答案 0 :(得分:2)
问题是,当您更改变换的位置时,您并没有考虑到旋转。
您可以乘以当前的transform.rotation
。
transform.position += transform.rotation * Vector3.forward * speed * Time.deltaTime;