c# - 无论局部角度如何,在全局 XZ 平面上移动相机(Unity)
问题描述
我正在编写主摄像机在 XZ 轴上的移动脚本。当光标接近相应的屏幕边缘之一时,相机应水平移动(向前、向后、向右、向左)。左右运动完美无缺;
另一方面,在其 z 轴上向后移动相机不起作用,因为相机略微旋转。
因此,当您尝试将其水平向前移动时,它反而会更靠近对象。
if (Input.mousePosition.y >= Screen.height - brdThcknss)
{ //this line is to be replaced
//transform.Translate(Vector3.forward * Time.deltaTime * panSpeed);
}
if (Input.mousePosition.y <= brdThcknss)
{//this line is to be replaced
//transform.Translate(Vector3.back * Time.deltaTime * panSpeed);
}
if (Input.mousePosition.x >= Screen.width - brdThcknss)
{
transform.Translate(Vector3.right * Time.deltaTime * panSpeed);
}
if (Input.mousePosition.x <= brdThcknss)
{
transform.Translate(Vector3.left * Time.deltaTime * panSpeed);
}
还需要提到的是,无论相机的角度如何(相机轨道),相机都应该在世界的 XZ 平面上移动。我可以用什么替换注释行,以便相机执行所需的运动?
解决方案
AresCaelum 的评论可能是正确的,但如果您想完全避免使用 Translate 功能,您可以简单地将新 Vector3 分配给对象的位置。
就像是:
transform.position = new Vector3(newX, transform.position.y, newZ);
它也可以在 localPosition 上完成,例如
transform.localposition = new Vector3(x,y,z);
如果您想避免每次运行此代码时都创建一个新的 Vector3,您可以简单地拥有一个 Vector3 变量(我们称之为“pos”)并执行
Vector3 pos = Vector3.zero;
void Start()
{
pos.y = whateverYValueYouWant;
}
void Update()
{
pos.x = newX;
pos.z = newZ;
transform.position = pos;
}
推荐阅读
- ios - Xcode 版本 12.0.1 未打开 .workspace 文件
- javascript - 如何更改每个 select2 选项的背景?
- python - 绘制多个子图,每个子图都显示使用 Seaborn 的 pandas DataFrame 的两列之间的关系
- javascript - 如何从多选 lov 中检索选定项目并将它们与预定列表进行比较作为 oracle apex 18.2 中的动态操作?
- c# - C# AD 组计数不正确
- terraform - 有条件地将 load_balancer 添加到 terraform 中的 aws_ecs_service
- delphi - 字符串在两个字母之间,两个字母中的一个文本到Delphi
- matrix - Fortran中的稀疏矩阵向量积
- php - 联邦快递追踪 API 响应:404
- android - 在listview颤动中的textformfield中按下数字后键盘关闭