单击鼠标时,Update()+ Raycast +标签导致错误识别gameobject

时间:2016-03-24 23:24:35

标签: c# unity3d

我正在调试这个,但到目前为止,我并没有真正到达任何地方。

我的设置:我在运行时产生了预制件;他们都带有标签" npc_entity"识别它们。 当我点击其中一个时,我想获取附加到gameobject(我的自定义实体类)的组件之一的数据。我通过更新功能中的光线投射实现了这一点,让游戏对象达到了生命值。

现在这里很奇怪:我使用raycast来点击游戏窗口中的特定实体;并阅读参数。如果只有一个实体被实例化,则一切正常;但如果有2个或更多,则会多次调用更新,这会导致每次都覆盖数据。

我有一个带有更新功能的脚本,它在预制件本身进行光线投射;这是代码:

void Update()
{
    // using this to select entities
    if (Input.GetMouseButtonDown(0) && Camera.main.name == "top_Camera")
    {
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray, out hit, raycast_length) && hit.collider.gameObject.tag == "npc_entity")
        {
            selected_target = gameObject;
            Debug.Log(selected_target.name + " " + selected_target.GetComponent<AIPlayer>().connected_player.playername);
            UpdateNPCUI();
        }
    }
}

void UpdateNPCUI()
{
    ui_manager.NPCpanel.GetComponentInChildren<CanvasGrou>().alpha = 1;
    NPC_name.text = selected_target.GetComponent<AIPlayer>().connected_player.playername);

}

我不明白的是为什么我会得到这样的行为,其中所有实例化的游戏对象基本上都是处理过的。我在游戏对象上点击一次,然后光线投射显示该位置与游戏对象的位置一致;其他人远不及它。

任何建议都将受到赞赏;甚至一步一步调试;我无法看到这个问题。

1 个答案:

答案 0 :(得分:0)

因此,每次数据都被覆盖,因为每个预制件上都有脚本。

您不需要将此脚本附加到每个实例,此代码可以在任何其他单实例游戏对象上,并且只会触发一次。将此脚本放在GameManager gameObject或只有一个。(/ p>)实例的东西上

仅获取当前游戏对象,而不是所有游戏对象:

// using this to select entities
if (Input.GetMouseButtonDown(0) && Camera.main.name == "top_Camera")
{
    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
    RaycastHit hit;

    if (Physics.Raycast(ray, out hit, raycast_length) && hit.collider.gameObject.tag == "npc_entity")
    {
        selected_target = hit.collider.gameObject;
        Debug.Log(selected_target.name + " " + selected_target.GetComponent<AIPlayer>().connected_player.playername);
        UpdateNPCUI();
    }
}