【发布时间】:2019-05-15 03:07:54
【问题描述】:
所以我试图创建一个系统来寻找可以攀爬的壁架。我有一个垂直视野来寻找这些壁架,到目前为止,我已经让它随着模拟摇杆的方向旋转,所以我可以找到一个壁架并移动到我的模拟指向的地方。 (向上看,找到窗台,向上移动等)。我的问题是,当视野移动到我需要它移动的地方时,它保持固定在一个轴上并且不随玩家旋转。
在图片中,圆锥体朝向它应该在的位置,并按照我的意愿围绕玩家旋转,但正如您所见,圆锥体面向 X 轴并且不会从那里移动。我希望它与播放器一起旋转。
在下面的代码中,返回的 Vector 的 y 值使圆锥指向上方。我在 x 和 z 值中尝试了各种函数,但没有任何问题。
public Vector3 DirFromAngle(float angleInDegrees, bool angleIsGlobal)
{
if(!angleIsGlobal)
{
angleInDegrees += (viewDir + 90);
}
Vector3 newValue = new Vector3(0, Mathf.Sin(angleInDegrees * Mathf.Deg2Rad), Mathf.Cos(angleInDegrees * Mathf.Deg2Rad));
return newValue;
}
viewDir 值使锥体随着我的模拟摇杆旋转,为了使锥体随着我的播放器旋转,我认为需要使用 x 或 z 值或两者来完成某些事情,但对于我的生命来说,我想不通。 感谢您在此问题上提供的任何帮助。如果我的解释不是很好,请道歉。
void OnSceneGUI()
{
LedgePointSearch lps = (LedgePointSearch)target;
Handles.color = Color.white;
Handles.DrawWireArc(lps.transform.position, lps.transform.forward * 90, Vector3.up, 360, lps.viewRadius);
Vector3 viewAngleA = lps.DirFromAngle(-lps.viewAngle / 2, false);
Vector3 viewAngleB = lps.DirFromAngle(lps.viewAngle / 2, false);
Handles.DrawLine(lps.transform.position, lps.transform.position + viewAngleA * lps.viewRadius);
Handles.DrawLine(lps.transform.position, lps.transform.position + viewAngleB * lps.viewRadius);
}
这是显示视野的编辑器脚本。
圆圈仅代表视野的半径,即向外的距离。
https://www.dropbox.com/s/k9siha2aog9vj8o/fov.mp4?dl=0
在视频中,圆圈随着播放器旋转,圆锥随着我的左侧模拟动作旋转。我希望圆锥体像圆一样,它像我的播放器一样旋转,但仍与我的模拟动作相匹配。
【问题讨论】:
-
抱歉,我无法从你的图片中看出你在说哪个锥体?
angleInDegrees是什么意思 - 是你想让圆锥指向的角度吗?大概您希望圆锥围绕X轴旋转,并且您的角度是在该方向上测量的。当您说“圆锥面向 X 轴”时,我也很困惑?这种事情很难用语言来解释,即使是手绘图也会有所帮助。 -
图片中的圆锥是玩家头顶上方的圆锥,在圆圈内。是的,angleInDegrees 是控制锥体指向的角度。当我的球员旋转时,围绕我的球员的白色圆圈的边缘保持在他的两侧,我希望圆锥体也一样
-
dropbox.com/s/z9ybypxencl35os/p1.PNG?dl=0 dropbox.com/s/wr1ktnfz8cueywq/p2.PNG?dl=0 这两张图片展示了圆是如何随着玩家旋转的,而圆锥却没有
-
目前还不清楚返回值的含义是什么。请编辑您的帖子并包含使用来自
DirFromAngle的返回值来旋转/渲染圆圈和视野的代码。 -
抱歉,我无法理解这个问题 - 圆圈是干什么用的?有问题的“圆锥”是 Unity 绘制的指向 y 轴的绿色圆锥吗?或者你的意思是形成圆段的两条线?您应该使用绘画工具来绘制您想要发生的事情。
标签: c# unity3d trigonometry fieldofview