【发布时间】:2017-09-26 22:21:50
【问题描述】:
我遇到了相机绕轴移动的问题。当相机远离它的目标时,相机在物体周围移动的速度似乎比相机靠近它的目标时慢。我知道这是由于距离较远,并且当相机靠近目标时视野较小。就像你在看一只蜘蛛跑过你的台面一样,如果你离蜘蛛更近,它看起来就像是在冲刺一样,如果你穿过厨房,蜘蛛看起来会移动得更慢,因为它的表面积更大您的视野范围。
无论与目标的距离如何,我都需要相机以恒定的速度移动。很直接的问题。由于工作原因,我必须限制我的代码。
float deltaX = mouse.X;
float deltaY = mouse.Y;
float moveSpeed = 100000f;
// These are set elsewhere and manipulated throughout the code.
Vector3 deltaMove = Vector3.Zero;
Vector3 Position = Vector3.Zero;
Vector3 Target = Vector3.Zero;
deltaMove += new Vector3(deltaX * moveSpeed / 2f, deltaY * moveSpeed / 2f, 0);
我相信这个问题可以通过包括目标位置和相机位置之间的距离来解决。任何帮助是极大的赞赏。如果您需要更多详细信息或有任何疑问,请提出。
最终结果应该是相机以相同的速度移动,无论它离目标多近或多远。
更新
我目前需要一个基本的数学表示来消除相机和目标之间距离上的“速度”差异。
【问题讨论】:
-
如果这是unity 问题,请考虑添加适当的标签。
-
这不是 Unity 问题。
-
我的直觉告诉我你的数学是错的,但我不能说到底是怎么回事。那里不应该有一个二的平方根吗?你的移动速度是长度为
moveSpeed的向量。您的运动矢量(deltaX, deltaY, 0)需要缩放,以便矢量长度 等于moveSpeed。正确的? IIRC 这被称为“向量归一化” -
所以,我认为需要做的是,用
(deltaX, deltaY, 0)制作你的向量,然后找到它的大小,我称之为L。计算moveSpeed / L以获得您的比例因子SF。最后,这对我来说是模糊的,您需要将SF粘贴到您的最终向量中以缩放其 X 和 Y 分量。不过,我不清楚这样做的正确方法。
标签: c#