【m】11.PointCloudTools 上传
This commit is contained in:
@@ -0,0 +1,142 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using Cysharp.Threading.Tasks;
|
||||
using Stary.Evo;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Main
|
||||
{
|
||||
public class ZoneController : MonoBehaviour
|
||||
{
|
||||
public string pointType;
|
||||
|
||||
public List<PointController> pointControllerEntities;
|
||||
|
||||
/// <summary>
|
||||
/// 大区域网格碰撞
|
||||
/// </summary>
|
||||
private MeshCollider bigMeshCollider;
|
||||
|
||||
//大区域范围进入事件
|
||||
public IUnRegister _onBigMeshColliderStayUnRegister;
|
||||
public IUnRegister _onBigMeshColliderExitUnRegister;
|
||||
public IUnRegister _onBigMeshColliderEnterUnRegister;
|
||||
|
||||
public Action<Collider> OnColliderStay;
|
||||
public Action<Collider> OnColliderExit;
|
||||
public Action<Collider> OnColliderEnter;
|
||||
|
||||
public async UniTask Init(ZoneData zoneData)
|
||||
{
|
||||
name = zoneData.name;
|
||||
pointType = name;
|
||||
|
||||
//根据数据设置zone 碰撞盒
|
||||
transform.localPosition = zoneData.transformData.position;
|
||||
transform.localRotation = Quaternion.Euler(zoneData.transformData.rotation);
|
||||
transform.localScale = zoneData.transformData.scale;
|
||||
|
||||
pointControllerEntities = new List<PointController>(zoneData.pointDatas.Count);
|
||||
|
||||
await UniTask.CompletedTask;
|
||||
}
|
||||
|
||||
public void InitMeshCollider(MeshCollider bigMeshCollider)
|
||||
{
|
||||
this.bigMeshCollider = bigMeshCollider;
|
||||
|
||||
_onBigMeshColliderStayUnRegister = bigMeshCollider.OnTriggerStayEvent(OnBigMeshColliderStayEvent);
|
||||
|
||||
_onBigMeshColliderExitUnRegister = bigMeshCollider.OnTriggerExitEvent(OnBigMeshColliderExitEvent);
|
||||
|
||||
_onBigMeshColliderEnterUnRegister = bigMeshCollider.OnTriggerEnterEvent(OnBigMeshColliderEnterEvent);
|
||||
}
|
||||
|
||||
private void OnBigMeshColliderStayEvent(Collider collider)
|
||||
{
|
||||
PointCloudService.GetService<IZoneSystem>().HideBigMeshColliderStayUnRegister();
|
||||
OnBigMeshColliderEnterEvent(collider);
|
||||
OnColliderStay?.Invoke(collider);
|
||||
}
|
||||
|
||||
private void OnBigMeshColliderEnterEvent(Collider collider)
|
||||
{
|
||||
if (PointCloudService.GetService<IZoneSystem>().CurrentZoneType == pointType)
|
||||
return;
|
||||
|
||||
if (collider.gameObject.CompareTag("GameController"))
|
||||
{
|
||||
Debug.Log($"collider:【{collider.name}】 point:【{name}】 OnBigMeshColliderEnterEvent");
|
||||
|
||||
PointCloudService.GetService<IZoneSystem>().OpenNextZonePoint(this);
|
||||
|
||||
// ActiveAllPointHideOrShow(true);
|
||||
bigMeshCollider.transform.parent.Find("Arrow").gameObject.SetActive(true);
|
||||
|
||||
OnColliderEnter?.Invoke(collider);
|
||||
|
||||
PointCloudService.GetService<IZoneSystem>().CurrentZoneType = pointType;
|
||||
//this.GetSystem<IZoneSystem>().HideBigMeshColliderStayUnRegister(_onBigMeshColliderStayUnRegister);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnBigMeshColliderExitEvent(Collider collider)
|
||||
{
|
||||
if (collider.gameObject.CompareTag("GameController"))
|
||||
{
|
||||
Debug.Log($"collider:【{collider.name}】 point:【{name}】 OnBigMeshColliderExitEvent");
|
||||
bigMeshCollider.transform.parent.Find("Arrow").gameObject.SetActive(false);
|
||||
OnColliderExit?.Invoke(collider);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 打开区域的点位
|
||||
/// </summary>
|
||||
/// <param name="force">是否打开</param>
|
||||
/// <param name="isOpenCurrentDomain">是否打开当前触发点位</param>
|
||||
public void ActiveAllPointHideOrShow(bool force = true, bool isOpenCurrentDomain = true)
|
||||
{
|
||||
foreach (var controller in pointControllerEntities)
|
||||
{
|
||||
if (force == false)
|
||||
{
|
||||
controller.gameObject.SetActive(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isOpenCurrentDomain)
|
||||
{
|
||||
controller.gameObject.SetActive(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (PointCloudService.GetService<IZoneSystem>().CurrentPointType == controller.name)
|
||||
{
|
||||
controller.gameObject.SetActive(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
controller.gameObject.SetActive(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void CurrentPointActiveHideOrShow(PointController controller, bool force = true)
|
||||
{
|
||||
foreach (var controllerEntity in pointControllerEntities)
|
||||
{
|
||||
if (controllerEntity == controller)
|
||||
{
|
||||
controller.gameObject.SetActive(force);
|
||||
}
|
||||
else
|
||||
{
|
||||
controllerEntity.gameObject.SetActive(!force);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user