Files
plugin-library/Assets/Domain/Main/HotUpdate/PointController.cs
2025-07-02 10:05:26 +08:00

80 lines
2.7 KiB
C#

using System;
using System.Collections.Generic;
using Cysharp.Threading.Tasks;
using Main;
using Stary.Evo;
using Stary.Evo.AudioCore;
using UnityEngine;
using YooAsset;
namespace Main
{
public class PointController : MonoBehaviour, IController
{
public ZoneController ZoneController;
private SphereCollider sphereCollider;
private TextMesh textMesh;
private IUnRegister _onTriggerEnterUnRegister;
private IUnRegister _onTriggerExitUnRegister;
public void Init(ZoneController ZoneController, PointData pointData)
{
this.ZoneController = ZoneController;
textMesh = this.transform.GetComponentInChildren<TextMesh>();
textMesh.text = pointData.desc;
name = pointData.name;
//根据数据设置zone 碰撞盒
transform.localPosition = pointData.position;
transform.localRotation = Quaternion.Euler(pointData.rotation);
transform.localScale = pointData.scale;
sphereCollider = this.transform.GetOrAddComponent<SphereCollider>();
_onTriggerEnterUnRegister = sphereCollider.OnTriggerEnterEvent(OnPointTriggerEnterEvent);
this.gameObject.SetActive(false);
}
public async void OnPointTriggerEnterEvent(Collider collider)
{
if (collider.gameObject.CompareTag("MainCamera"))
{
ZoneController.OpenPoint(this);
var package=YooAssets.TryGetPackage("Main");
var handle=package.LoadAssetAsync<AudioClip>(R.Res.Main.audios.au_effect_element_pop_mp3);
await handle.WithCancellation(this.GetCancellationTokenOnDestroy());
AudioCoreManager.PlaySFX(new AudioData()
{
clip = handle.GetAssetObject<AudioClip>()
});
HybridClREntrance entrance= FindObjectOfType<HybridClREntrance>();
if (entrance != null)
{
entrance.OpenDomain(this.name,OpenDomainType.DEFAULT);
}
else
{
Debug.LogError("UnityEvo:HybridClREntrance is null");
}
ZoneController.BoundingEvent(false);
Debug.Log($"【{name}】OnPointTriggerEnterEvent");
}
}
public IArchitecture GetArchitecture()
{
return MainArchitecture.Interface;
}
}
public class PointColliderEntity
{
public string Name { get; set; }
public bool IsTrigger { get; set; }
public SphereCollider PointCollider { get; set; }
public Func<Collider> EntorComplete { get; set; }
}
}