C# 用播放器旋转视野

C# 用播放器旋转视野,c#,unity3d,trigonometry,fieldofview,C#,Unity3d,Trigonometry,Fieldofview,所以我试图创建一个系统,寻找一个可以攀爬的平台。我有一个垂直的视野来寻找这些壁架,到目前为止,我已经让它随着模拟棒的方向旋转,所以我可以找到一个壁架并移动到我的模拟物指向的地方。(向上看、找到窗台、向上移动等)。我的问题是,当视场在我需要移动的地方移动时,它固定在一个轴上,不随播放器旋转 在图片中,圆锥体朝向它应该所在的位置,并按照我的要求围绕播放器旋转,但正如您所看到的,圆锥体朝向X轴,并且不会从那里移动。我想让它和球员一起旋转 在下面的代码中,返回向量的y值使圆锥体指向上方。我已经尝试了x

所以我试图创建一个系统,寻找一个可以攀爬的平台。我有一个垂直的视野来寻找这些壁架,到目前为止,我已经让它随着模拟棒的方向旋转,所以我可以找到一个壁架并移动到我的模拟物指向的地方。(向上看、找到窗台、向上移动等)。我的问题是,当视场在我需要移动的地方移动时,它固定在一个轴上,不随播放器旋转

在图片中,圆锥体朝向它应该所在的位置,并按照我的要求围绕播放器旋转,但正如您所看到的,圆锥体朝向X轴,并且不会从那里移动。我想让它和球员一起旋转

在下面的代码中,返回向量的y值使圆锥体指向上方。我已经尝试了x和z值中的所有函数,但是没有任何东西是固定的

public Vector3 DirFromAngle(浮动角度基准,布尔角度为全局)
{
如果(!angleIsGlobal)
{
角度指数+=(viewDir+90);
}
Vector3 newValue=新矢量3(0,数学Sin(angleInDegrees*Mathf.Deg2Rad),数学Cos(angleInDegrees*Mathf.Deg2Rad));
返回新值;
}
viewDir值使圆锥体与我的模拟杆一起旋转,为了使圆锥体与我的播放器一起旋转,我假设需要使用x或z值,或者两者都使用,但就我而言,我无法解决这个问题。 谢谢你在这个问题上的帮助。如果我的解释不太好,我道歉

void OnSceneGUI()
{
LedgePointSearch lps=(LedgePointSearch)目标;
Handles.color=color.white;
手柄.拉线弧(lps.transform.position,lps.transform.forward*90,Vector3.up,360,lps.viewRadius);
Vector3视角A=lps.DirFromAngle(-lps.viewAngle/2,false);
Vector3视角b=lps.DirFromAngle(lps.viewAngle/2,false);
手柄.抽绳(lps.transform.position,lps.transform.position+viewAngleA*lps.viewRadius);
手柄.抽绳(lps.transform.position,lps.transform.position+viewAngleB*lps.viewRadius);
}
这是显示视野的编辑器脚本

圆圈只是表示视野的半径,即视野向外延伸的距离


在视频中,圆圈随播放器旋转,圆锥体随我的左侧模拟动作旋转。我希望圆锥体像圆圈一样旋转,但仍与我的模拟运动相匹配。

一种方法是找到播放器的Y旋转,并在返回之前将其应用于
新值

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));

    // get Y rotation of player
    yRotationAngle = player.transform.rotation.eulerAngles.y;

    // convert to Quaternion using only the Y rotation
    Quaternion yRotation = Quaternion.Euler(0f, yRotationAngle + 90f, 0f);

    // Apply yRotation
    newValue = yRotation * newValue;

    return newValue;
}    

一种方法是找到播放器的Y轴旋转,并在返回之前将其应用于
newValue

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));

    // get Y rotation of player
    yRotationAngle = player.transform.rotation.eulerAngles.y;

    // convert to Quaternion using only the Y rotation
    Quaternion yRotation = Quaternion.Euler(0f, yRotationAngle + 90f, 0f);

    // Apply yRotation
    newValue = yRotation * newValue;

    return newValue;
}    

对不起,我看不出你在说哪个蛋卷?
angleInDegrees
的含义是什么-是您希望圆锥体指向的角度吗?假设您希望圆锥体绕
X
轴旋转,并且在该方向上测量角度。当你说“圆锥体面向X轴”时,我也很困惑?这类事情很难用语言来解释,即使是手绘的图表也会有所帮助。图像中的圆锥体是玩家头部上方的圆锥体,在圆圈内。是的,angleInDegrees是控制圆锥体指向何处的角度。当我的玩家旋转时,他周围的白色圆圈的边缘保持在他的两侧,我希望圆锥体的边缘相同。这两幅图像显示了圆圈如何随玩家旋转,但圆锥体没有。返回值的含义仍然不清楚。请编辑您的帖子,并包含使用
DirFromAngle
返回值旋转/渲染圆和视野的代码。很抱歉,我无法理解这一点-圆是用来做什么的?问题中的“圆锥体”是由Unity绘制的指向y轴的绿色圆锥体吗?或者你是说构成圆段的两条线?你应该用画图工具画出你想画的东西。对不起,我看不出你说的是哪个圆锥体?
angleInDegrees
的含义是什么-是您希望圆锥体指向的角度吗?假设您希望圆锥体绕
X
轴旋转,并且在该方向上测量角度。当你说“圆锥体面向X轴”时,我也很困惑?这类事情很难用语言来解释,即使是手绘的图表也会有所帮助。图像中的圆锥体是玩家头部上方的圆锥体,在圆圈内。是的,angleInDegrees是控制圆锥体指向何处的角度。当我的玩家旋转时,他周围的白色圆圈的边缘保持在他的两侧,我希望圆锥体的边缘相同。这两幅图像显示了圆圈如何随玩家旋转,但圆锥体没有。返回值的含义仍然不清楚。请编辑您的帖子,并包含使用
DirFromAngle
返回值旋转/渲染圆和视野的代码。很抱歉,我无法理解这一点-圆是用来做什么的?问题中的“圆锥体”是由Unity绘制的指向y轴的绿色圆锥体吗?或者你是说构成圆段的两条线?你应该使用绘画工具来描绘你想要发生的事情。不幸的是,它不起作用。它只是延长了圆锥线。但是,我认为你在正确的轨道上。我需要对我的球员的旋转做些什么,这样圆锥体才能知道旋转的方向。谢谢您的尝试。@MatthewMcginley我的代码不会/不应该更改
newValue
的长度。你能编辑你的帖子并包括你尝试过的内容吗?我想可能是打字错误。确保将调用
Quaternion.Euler
得到的
newValue
乘以
Quaternion
。抱歉,我弄错了。你是个救生员。这件事我已经坚持了三天了。我真的很感谢你的帮助