NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/GameWrapper/Scene/SceneSurfaceData.cs

68 lines
1.7 KiB
C#

using System;
using Cysharp.Threading.Tasks;
using PhxhSDK;
using UnityEditor;
using UnityEngine;
[Serializable]
public class SceneSurfaceData
{
public bool valid;
public const string SURFACE_MESH_PATH = "Assets/Art/Scene/SceneBrush/SurfaceMesh.mesh";
private static Mesh _surfaceMesh;
public static async UniTask<Mesh> GetSurfaceMesh()
{
if (_surfaceMesh == null)
{
_surfaceMesh = await AssetManager.Instance.LoadAssetAsync<Mesh>(SURFACE_MESH_PATH);
}
return _surfaceMesh;
}
public SceneObjectRenderInfo renderInfo;
public string materialPath;
//面片对应的旋转值,只有旋转相同的gameObject才可以开启面片模式
public Vector3 eulerAngleID;
//从三维坐标转换到正确的二维坐标的offset
public Vector3 cachedOffset;
public Vector3 cachedRotation;
public Vector3 cachedScale;
private Material _material;
public bool IsGameObjectValid(GameObject instance)
{
var transform = instance.transform;
var localScale = transform.localScale;
return transform.localEulerAngles == eulerAngleID && localScale.x.Equals(localScale.y) &&
localScale.x.Equals(localScale.z);
}
public async UniTask<Material> GetMaterial()
{
if (_material == null)
{
if (Application.isPlaying)
{
_material = await AssetManager.Instance.LoadAssetAsync<Material>(materialPath);
}
else
{
#if UNITY_EDITOR
_material = AssetDatabase.LoadAssetAtPath<Material>(materialPath);
#endif
}
}
return _material;
}
}