Files
plugin-library/Assets/11.PointCloudTools/Runtime/Script/PointSystem/PointController.cs

92 lines
3.3 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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<Collider> OnColliderEnter;
public async void Init(ZoneController ZoneController, PointData pointData)
{
this.gameObject.SetActive(false);
this.ZoneController = ZoneController;
var titleMesh = this.transform.Find("Title").GetComponent<TextMeshPro>();
titleMesh.text = pointData.name;
var numMesh = titleMesh.transform.Find("Num").GetComponent<TextMeshPro>();
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<MeshCollider>();
collider.transform.localPosition = pointData.colliderData.colPosition;
collider.transform.localRotation = Quaternion.Euler(pointData.colliderData.colRotation);
collider.transform.localScale = pointData.colliderData.colScale;
if (PointCloudService.GetService<IZoneData>().IsGizmo())
{
collider.GetOrAddComponent<MeshColliderGizmo>();
}
_onTriggerEnterUnRegister = collider.OnTriggerEnterEvent(OnPointTriggerEnterEvent);
}
public void OnPointTriggerEnterEvent(Collider collider)
{
if (!isTigger)
return;
if (PointCloudService.GetService<IZoneSystem>().CurrentPointType == pointType)
return;
if (collider.gameObject.CompareTag("GameController"))
{
if (ZoneController != null)
{
//隐藏当前点,显示其余点
ZoneController.CurrentPointActiveHideOrShow(this, false);
}
else
{
this.gameObject.SetActive(false);
}
PointCloudService.GetService<IZoneSystem>().OpenDomain(this.name);
OnColliderEnter?.Invoke(collider);
PointCloudService.GetService<IZoneSystem>().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();
}
}
}