我正在使用 Smartfox Server2x在 Unity3d 中开展多人协作。
但我希望将其改为捉迷藏游戏。
当hider(第三人称控制器)按下“寻找我”按钮时,寻求者试图找到隐藏者。但我不知道如何确定寻找者何时看到这个隐藏者。是否可以使用 Raycasting 。如果有,怎么样?请帮帮我。
void Update () {
RaycastHit hit;
if(Physics.Raycast(transform.position,transform.forward,out hit,50))
{
if(hit.collider.gameObject.name=="Deccan Peninsula1")
{
Debug.Log("detect.................");
}
if(hit.collider.gameObject.tag =="Tree")
{
Debug.Log("detect.........cube........");
//Destroy(gameObject);
}
}
答案 0 :(得分:1)
根据具体情况,有很多方法可以实现这一目标 你需要的功能。
当某个物体在某个相机中可见时,您可以获取事件, 当它进入或离开时,使用这些功能:
OnWillRenderObject,Renderer.isVisible, Renderer.OnBecameVisible和OnBecameInvisible
或者你可以计算一个物体的边界框是否属于 相机使用这两个功能来观察视锥体:
GeometryUtility.CalculateFrustumPlanes GeometryUtility.TestPlanesAABB
如果您已经确定对象在相机内 查看视锥体,你可以将光线从相机投射到物体中 问题,看是否有任何对象阻止其视图。 Physics.Raycast
答案 1 :(得分:1)
你可以做很多事情来找出寻找者是否找到了这个隐藏者。我将建议如何做到这一点,我将尽力使想法/代码尽可能高效。
每个GameObject通过变换组件知道它的位置。您可以通过创建比率并比较它们彼此之间的距离来检查一个对象与另一个对象的接近程度。两个物体彼此靠近的那一刻,你进入一个新的状态。在此状态下,只有当导引头的方向/视角发生变化时,才会触发RayCast。所以想一想,你的寻求者正在环顾四周,当他正在旋转时,他正在解雇RayCast。主要的想法是不要一直射击太多的RayCasts会阻碍性能。确保您的RayCast忽略除您要查找的人之外的所有内容。
如果你遇到困难,你可以提出一个更具体的问题,可能是关于RayCast以及如何让他们忽视墙壁或不通过墙壁射击,或者你可能自己发现这个解决方案。
祝你好运!