using System.Collections; using System.Collections.Generic; using System.Runtime.InteropServices; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.SceneManagement; using UnityEngine.UI; public class SelectedInfo { public string name; public string duty; public string scene; } public class Panel : MonoBehaviour { [Header("组件")] public Button choseJuBenSettingBtn; public Button emergencySettingBtn; public Button peoplePublishBtn; public Button materialReserveBtn; public Button dateSelectionBtn; public Button personnelmanagementBtn; public Button setName;//设置人员 public Button setDuty;//设置职责 public Button setScene;//设置场景 public Text arrangeText;//整体安排 public Button sureBtn;//确认信息按钮 public ToggleGroup scenetoggleGroup;//场景的ToggleGroup public InputField shaixuaninputField;//筛选输入框 public GraphicRaycaster raycaster; // 画布上的射线投射器 public EventSystem eventSystem; // 事件系统 [Header("物体")] public GameObject ManagerPanel;//人员管理界面 public Transform peopleCountent;//人员的窗口 public GameObject peoplePrefab;//人员的预制体 [Header("数据")] public string name, duty, scene; private List peopleList = new List(); // 存储所有已加载的人员预制体 private List filteredPeopleList = new List(); // 存储筛选后的人员列表 private GameObject selectedPerson = null; // 当前选中的角色 public SelectedInfo selectedInfo; public Dictionary> sceneDataDictionary = new Dictionary>();//不同的场景存取不同的人员数据 // Start is called before the first frame update void Start() { selectedInfo = new SelectedInfo(); DynamicLoadingPeople(); } // Update is called once per frame void Update() { GetData(); SetText(); //SetInputFile(); } //动态加载人员 public void DynamicLoadingPeople() { for (int i = 0; i < 20; i++) { GameObject item = GameObject.Instantiate(peoplePrefab, peopleCountent); peopleList.Add(item); // 将每个实例化的角色添加到列表中 } } //处理人员管理按钮 public void ClickPersonnelManagement() { Debug.Log("调用人员管理"); ManagerPanel.gameObject.SetActive(true); } //处理点击确认按钮 public void ClickSureBtn() { // 保存选中的人员信息到场景数据字典中 string sceneName = selectedInfo.scene; // 如果场景字典中没有这个场景,先创建一个空列表 if (!sceneDataDictionary.ContainsKey(sceneName)) { sceneDataDictionary[sceneName] = new List(); } else { Debug.Log("没有选场景"); } // 将当前选中的人员信息添加到对应场景的人员列表中 sceneDataDictionary[sceneName].Add(selectedInfo); // 打印当前场景人员信息 Debug.Log($"场景: {sceneName},选中的人员: {selectedInfo.name},职责: {selectedInfo.duty}"); // 可以在这里根据需求继续处理选中的数据 } //处理界面关闭按钮 public void ClickCloseBtn() { transform.gameObject.SetActive(false); } //获取鼠标点击位置的信息 public void GetData() { ManagerPanel managerPanel = new ManagerPanel(); // 当鼠标左键按下时进行检测 if (Input.GetMouseButtonDown(0)) { // 确保 raycaster 和 eventSystem 不为空 if (raycaster == null || eventSystem == null) { Debug.LogError("Raycaster 或 EventSystem 未正确分配,请在 Inspector 中进行分配。"); return; } // 创建 PointerEventData 来记录点击事件的数据 PointerEventData pointerData = new PointerEventData(eventSystem); pointerData.position = Input.mousePosition;//获取鼠标点击的位置 // 用于存储射线检测的结果 List results = new List(); // 射线检测 UI raycaster.Raycast(pointerData, results); // 遍历射线检测的结果 foreach (RaycastResult result in results) { // 检测到点击了按钮 Button clickedButton = result.gameObject.GetComponent