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

Unity游戏商店:如何检测列表中被点击的GameObject并引用?

游戏商店物品点击检测与属性获取实现方案

核心逻辑

不管使用哪种游戏引擎,核心思路都是将显示元素与对应物品数据绑定,点击时直接读取绑定的数据属性:

  • 给每个商店物品的显示单元(UI按钮、3D模型、2D精灵等)关联对应的物品数据对象
  • 为显示单元绑定点击事件,触发时从绑定的数据中提取属性并展示到屏幕上

Unity 实现示例

1. 定义物品数据类

[System.Serializable]
public class ShopItem
{
    public string itemName;
    public int price;
    public string description;
    // 可按需扩展属性,如图标、物品类型等
}

2. 编写物品UI绑定脚本

给每个商店物品的UI项(带Button组件的节点)挂载该脚本:

using UnityEngine;
using UnityEngine.UI;

public class ShopItemUI : MonoBehaviour
{
    // 绑定对应的物品数据
    public ShopItem itemData;
    // 引用详情展示UI控件
    public Text detailNameText;
    public Text detailPriceText;
    public Text detailDescText;

    void Start()
    {
        // 初始化显示物品基础信息
        GetComponentInChildren<Text>().text = $"{itemData.itemName} - ${itemData.price}";
        // 绑定点击事件
        GetComponent<Button>().onClick.AddListener(OnItemClicked);
    }

    void OnItemClicked()
    {
        // 点击后展示完整属性
        detailNameText.text = itemData.itemName;
        detailPriceText.text = $"价格: ${itemData.price}";
        detailDescText.text = itemData.description;
    }
}

3. 列表生成与数据绑定

在商店列表的生成逻辑中,给每个实例化的UI项的itemData赋值列表中的对应元素即可。


Godot 实现示例

1. 定义物品数据类

创建ShopItem.gd脚本:

class_name ShopItem
var item_name: String
var price: int
var description: String

2. 编写物品UI按钮脚本

给每个商店物品的Button节点挂载该脚本:

extends Button

# 绑定对应的物品数据
@export var item_data: ShopItem
# 引用详情面板的控件
@onready var detail_name = $"/root/ShopUI/DetailPanel/NameLabel"
@onready var detail_price = $"/root/ShopUI/DetailPanel/PriceLabel"
@onready var detail_desc = $"/root/ShopUI/DetailPanel/DescLabel"

func _ready():
    # 初始化显示基础信息
    text = $"{item_data.item_name} - ${item_data.price}"
    # 绑定点击信号
    pressed.connect(_on_item_clicked)

func _on_item_clicked():
    # 展示物品属性
    detail_name.text = item_data.item_name
    detail_price.text = $"价格: ${item_data.price}"
    detail_desc.text = item_data.description

自定义渲染场景(非UI组件)的射线检测方案

如果商店物品是3D模型或自定义2D精灵,可通过射线检测判断点击目标:
以Unity 3D为例:

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray, out RaycastHit hit))
        {
            // 获取点击物体上的物品数据绑定脚本
            ShopItemUI itemBinder = hit.collider.GetComponent<ShopItemUI>();
            if (itemBinder != null)
            {
                ShowItemDetails(itemBinder.itemData);
            }
        }
    }
}

void ShowItemDetails(ShopItem item)
{
    // 实现详情展示逻辑,如更新UI文本、显示图标等
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:10:24