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

求助:World Space RectTransform鼠标坐标获取结果不准确问题

这是我的第一篇帖子,若有违反论坛规则之处,请告知我。

相关背景

  • 基于一款非世界空间UI背包教程开发
  • 正在开发第一人称视角3D游戏
  • 尝试制作可在世界空间任意位置访问的网格系统
  • 存在多个网格,可通过OnPointerEnter进行检测

问题描述

  • 当前脚本仅在相机处于0,0度角度(朝向特定方向)时有效,其他角度下获取的坐标结果不准确
  • 推测原因是原脚本并非为3D场景设计,MousePosition坐标值会出现过高/过低的情况,这是导致网格结果不准确的明显原因

相关代码

获取网格坐标的方法

public Vector2Int GetTileGridPosition (Vector2 mousePosition)
{   
    var pos = mousePosition; 
    Vector3 output = Vector2.zero;

    RectTransformUtility.ScreenPointToWorldPointInRectangle(this.rectTransform,pos,cam,out output);  
         
    positionOnTheGrid.x = (output.x - ((rectTransform.position.x ) ));
    positionOnTheGrid.y = rectTransform.position.y - output.y;  
    tileGridPosition.x = (int)Mathf.Abs((positionOnTheGrid.x/tileSizeWidth)); 
    tileGridPosition.y = (int)(positionOnTheGrid.y/tileSizeHeight); 

    return tileGridPosition;
}

方法调用示例

Debug.Log("This tha" + selectedItemGrid.GetTileGridPosition(Input.mousePosition));

检测网格的脚本示例

private void Awake()
{
    Cursor.visible = true;
    inventoryController = FindObjectOfType(typeof(InventoryController)) as InventoryController;
    itemGrid = GetComponent<ItemGrid>();
}


public void OnPointerEnter(PointerEventData eventData)
{ 
    inventoryController.selectedItemGrid = itemGrid;
}

public void OnPointerExit(PointerEventData eventData)
{
    inventoryController.selectedItemGrid = null;
} 

调用网格鼠标位置的完整脚本示例(挂载于相机)

{ 
    if (selectedItemGrid == null) { return;}
    Debug.Log("Testing position " + selectedItemGrid.GetTileGridPosition(Input.mousePosition));
    if (Input.GetMouseButtonDown(0))
    {
        Vector2Int tileGridPosition = selectedItemGrid.GetTileGridPosition(Input.mousePosition);
        
        if (itemModel == null)
        { 
            itemModel = selectedItemGrid.PickUpItem( tileGridPosition.x, tileGridPosition.y); 
        }
        else{
            
            bool complete = selectedItemGrid.PlaceItem(itemModel, tileGridPosition.x, tileGridPosition.y);
            if (complete)
            {
                itemModel = null; 
            }
        }
    }
}    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 16:22:14