【发布时间】:2020-12-31 11:30:14
【问题描述】:
我正在制作一个自上而下的空间资源收集游戏,带有 3D 模型。
我正在尝试向我的鼠标位置投射光线,以检测与我游戏中的对象的碰撞, 让我的小宇宙飞船知道该往哪个方向寻找资源。 资源是玩家必须打破才能收集的小行星。
在代码中,我使用“中心”向量来找到屏幕/播放器位置的中间,因为相机会跟随播放器。所有运动都沿 X、Y 轴发生。 center.Z 设置为 15 只是为了抵消主摄像机在世界空间中的 -15Z 位置。 到目前为止,代码“工作”到可以检测到命中的程度,但射线不会沿鼠标方向传播。我必须阻止它击中它,而且很难复制到它几乎看起来随机的地步。射线可能无法理解鼠标位置吗?
万一我措辞不好,这个搜索能力并不是要破坏小行星,只是定位它。破解能力是一个单独的脚本。
代码:
public class AbilitySearch : MonoBehaviour
{
Vector3 center;
Vector3 mousePos;
Vector3 direction;
private float range = 100f;
void Update()
{
center = Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 15.0f));
mousePos = Input.mousePosition;
direction = mousePos - transform.position;
if (Input.GetMouseButton(1))
{
Search();
}
}
void Search()
{
RaycastHit hit;
if (Physics.Raycast(center, direction, out hit, range))
{
Debug.Log("You hit " + hit.transform.name);
}
}
}
提前致谢
【问题讨论】:
标签: c# unity3d vector raycasting