You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在准星脚本中实现Camera.ScreenToWorldPoint()?

解决准星限制在相机可视范围内的问题

嘿,我完全理解你的困扰——想用Camera.ScreenToWorldPoint()把准星牢牢锁在相机能看到的区域里,但试了半天没效果,加上英文文档看得头疼,太闹心了!我来一步步帮你把代码改对,把逻辑讲明白。

原代码的问题

你的当前代码是基于anchor的位置做偏移,完全没和相机的可视区域挂钩,所以准星很容易跑到屏幕外面去。我们需要把鼠标位置和相机的屏幕范围绑定,再转成世界坐标来控制准星。

修改后的完整代码

public Transform anchor; 
public float maxMoveRadius; 
public float sensitivity = 1f; 
public Camera mainCamera; // 可在Inspector面板拖入主相机,或者让代码自动获取

void Start () {
    // 如果没手动指定相机,自动查找场景中的主相机(需确保相机Tag设为MainCamera)
    if (mainCamera == null)
        mainCamera = Camera.main;
}

void Update () {
    // 1. 获取当前鼠标的屏幕位置
    Vector2 mouseScreenPos = Input.mousePosition;

    // 2. 把鼠标位置限制在屏幕范围内(避免超出相机可视区)
    // 屏幕坐标系:左下角是(0,0),右上角是(Screen.width, Screen.height)
    float clampedX = Mathf.Clamp(mouseScreenPos.x, 0f, Screen.width);
    float clampedY = Mathf.Clamp(mouseScreenPos.y, 0f, Screen.height);
    Vector2 clampedScreenPos = new Vector2(clampedX, clampedY);

    // 3. 将限制后的屏幕坐标转换为世界坐标
    // Z值设为锚点到相机的深度,保证准星和锚点在同一平面
    float cameraToAnchorDistance = Vector3.Dot(anchor.position - mainCamera.transform.position, mainCamera.transform.forward);
    Vector3 targetWorldPos = mainCamera.ScreenToWorldPoint(new Vector3(clampedScreenPos.x, clampedScreenPos.y, cameraToAnchorDistance));

    // 4. 保留原有的「锚点最大移动半径」限制(如果不需要可以删掉这两步)
    Vector3 directionToTarget = targetWorldPos - anchor.position;
    directionToTarget = Vector3.ClampMagnitude(directionToTarget, maxMoveRadius);

    // 5. 最终设置准星位置
    transform.position = anchor.position + directionToTarget;
}

关键逻辑解释

  • 屏幕坐标先限制:先把鼠标位置用Mathf.Clamp()锁在(0,0)到(Screen.width, Screen.height)之间,这样转成世界坐标后,准星绝对不会超出相机可视范围。
  • Z值的坑:ScreenToWorldPoint()必须要合理的Z值——这个值代表距离相机的远近。我们用锚点到相机的深度,保证准星和锚点在同一平面上,不会出现透视偏移或者飘到相机前后的问题。
  • 兼容两种相机:不管你用的是透视相机还是正交相机,这段代码都能正常工作,不用额外修改。

小提示

  • 如果不需要「准星只能在锚点周围maxMoveRadius范围内移动」的限制,直接删掉第4步,把准星位置设为targetWorldPos即可。
  • 确保你的主相机的Tag是MainCamera,这样代码才能自动找到它;或者手动把相机拖到Inspector的mainCamera字段里更靠谱。

内容的提问来源于stack exchange,提问作者Necro9896

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:39:51