如何解决为什么transform.forward 当乘以不等于0 时等于0?
我正在团结一致地为我的相机移动。我的相机的起始位置是 0,0。当我按下 W 键时,代码将获取当前位置并将其乘以移动速度并等于另一个向量 3,然后更新相机位置的位置。它工作得很好,但当我想到时我不明白为什么。
如果我的相机初始化为 0,0 那么为什么 transform.forward * movementSpeed 并不总是等于 0? 这对所有方向都是一样的,我只是以 W 为例
任何帮助将不胜感激,因为我是 unity 的新手。谢谢
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraMovement : MonoBehaviour
{
private Vector3 newPosition;
[SerializeField] private float movementSpeed;
[SerializeField] private float movementTime;
// Start is called before the first frame update
void Start()
{
newPosition = transform.position;
Debug.Log(transform.position); //prints 0.0,0.0,0.0
Debug.Log(transform.forward * movementSpeed); //prints 0.0,0.3
}
// Update is called once per frame
void Update()
{
handleKeyboardInput();
}
void handleKeyboardInput()
{
if (Input.GetKey(KeyCode.W))
{
newPosition += (transform.forward * movementSpeed);
}
if (Input.GetKey(KeyCode.A))
{
newPosition += (transform.right * -movementSpeed);
}
if (Input.GetKey(KeyCode.S))
{
newPosition += (transform.forward * -movementSpeed);
}
if (Input.GetKey(KeyCode.D))
{
newPosition += (transform.right * movementSpeed);
}
transform.position = Vector3.Lerp(transform.position,newPosition,Time.deltaTime * movementTime);
}
}
解决方法
您的代码正在乘以 transform.forward(0,1) 或 transform.right,它们都不是零向量,而是代表指定的方向。
,Vector3.forward
是 (0,1) 如果您想零使用 Vector3.zero
。
您的代码有效的原因是因为 transform.forward
和 transform.right
指的是玩家的前进方向和右侧方向。当您将 transform.forward * speed
添加到您的 newPosition
时,您将添加玩家的前进方向,但与您的速度大小(长度)相同。
如果你想尝试更好地理解它,你可以使用print(transform.forward)
或print(transform.forward * speed)
或者做Debug.drawRay(transform.position,transform.forward)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。