using System; using System.Collections.Generic; using Cysharp.Threading.Tasks; using Main; using Stary.Evo; using TMPro; using UnityEngine; namespace Main { public class PointController : MonoBehaviour { public string pointType; public bool isTigger; public ZoneController ZoneController; private MeshCollider collider; private IUnRegister _onTriggerEnterUnRegister; public Action OnColliderEnter; public async void Init(ZoneController ZoneController, PointData pointData) { this.gameObject.SetActive(false); this.ZoneController = ZoneController; var titleMesh = this.transform.Find("Title").GetComponent(); titleMesh.text = pointData.name; var numMesh = titleMesh.transform.Find("Num").GetComponent(); numMesh.text = ConvertToCircledNumber(pointData.order); name = pointData.id; isTigger = pointData.isTigger; pointType = pointData.id; //根据数据设置zone 碰撞盒 transform.localPosition = pointData.colliderData.position; transform.localRotation = Quaternion.Euler(pointData.colliderData.rotation); transform.localScale = pointData.colliderData.scale; collider = transform.Find("collisionbox").GetComponent(); collider.transform.localPosition = pointData.colliderData.colPosition; collider.transform.localRotation = Quaternion.Euler(pointData.colliderData.colRotation); collider.transform.localScale = pointData.colliderData.colScale; if (PointCloudService.GetService().IsGizmo()) { collider.GetOrAddComponent(); } _onTriggerEnterUnRegister = collider.OnTriggerEnterEvent(OnPointTriggerEnterEvent); } public void OnPointTriggerEnterEvent(Collider collider) { if (!isTigger) return; if (PointCloudService.GetService().CurrentPointType == pointType) return; if (collider.gameObject.CompareTag("GameController")) { if (ZoneController != null) { //隐藏当前点,显示其余点 ZoneController.CurrentPointActiveHideOrShow(this, false); } else { this.gameObject.SetActive(false); } PointCloudService.GetService().OpenDomain(this.name); OnColliderEnter?.Invoke(collider); PointCloudService.GetService().CurrentPointType = pointType; Debug.Log($"【{name}】OnPointTriggerEnterEvent"); } } private static string ConvertToCircledNumber(int number) { // 检查数字是否在1-20范围内 if (number < 1 || number > 20) { return number.ToString(); // 超出范围则返回原数字 } // Unicode中①对应的编码是0x2460,依次递增 char circledChar = (char)(0x2460 + number - 1); return circledChar.ToString(); } } }