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 GetSurfaceMesh() { if (_surfaceMesh is null) { _surfaceMesh = await AssetManager.Instance.LoadAssetAsync(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 GetMaterial() { if (_material is null) { if (Application.isPlaying) { _material = await AssetManager.Instance.LoadAssetAsync(materialPath); } else { #if UNITY_EDITOR _material = AssetDatabase.LoadAssetAtPath(materialPath); #endif } } return _material; } }