【发布时间】:2020-07-26 07:14:58
【问题描述】:
我有一个项目,用户可以控制相机,就像在 Unity 的场景编辑器中控制相机一样。我正在使用光线投射来防止相机穿过墙壁、地板和天花板。它的工作方式是我在一定范围内发送光线投射,如果没有命中,则转换将正常发生,但在检测到命中时不会发生。我正在使用这种方法来左右平移,它非常适合阻止玩家穿过墙壁。我也使用同样的方法进行鼠标滚轮缩放,它也很完美。当用户使用垂直平移时,当我使用此方法阻止用户穿过天花板或地板时,就会出现问题。用户有时会卡在天花板或地板上,我不知道为什么。我尝试了很多不同的方法来解决这个问题,但没有成功。如果有人知道为什么会发生这种情况以及可能的解决方法,我将不胜感激。这是我使用光线投射进行垂直平移的代码。
//if the user moves the camera veritcally
if (verticalTranslation.isActivated())
{
float translateY = Input.GetAxis(mouseVerticalAxisName) * verticalTranslation.sensitivity;
RaycastHit hit;
//sends raycast up veritcally
if (translateY > 0)
{
//if raycast hit detected do nothing, else transform position
if (Physics.Raycast(transform.position, Vector3.up, out hit, maxDistance))
{
Debug.LogWarning("stop movement");
Debug.LogWarning(hit.distance);
}
else
{
transform.Translate(0, translateY, 0);
}
}
//sends raycast down veritcally
if (translateY < 0)
{
if (Physics.Raycast(transform.position, -Vector3.up, out hit, maxDistance))
{
Debug.LogWarning("stop movement");
Debug.LogWarning(hit.distance);
}
else
{
transform.Translate(0, translateY, 0);
}
}
}
【问题讨论】:
-
我只是在想你是否对 translateY == 0 的情况感兴趣。
-
这实际上是一个很好的观点,我真的很高兴你提出了这一点
标签: c# unity3d raycasting