【m】11.PointCloudTools 上传
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user