我正在调试这个,但到目前为止,我并没有真正到达任何地方。
我的设置:我在运行时产生了预制件;他们都带有标签" 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);
}
我不明白的是为什么我会得到这样的行为,其中所有实例化的游戏对象基本上都是处理过的。我在游戏对象上点击一次,然后光线投射显示该位置与游戏对象的位置一致;其他人远不及它。
任何建议都将受到赞赏;甚至一步一步调试;我无法看到这个问题。
答案 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();
}
}