// 创建的时候通知Mask刷新 void Start() { MeshMask mask = GetComponentInParent <MeshMask>(); if (mask != null) { GetComponentInParent <MeshMask>().Refresh(); } }
protected RenderingModule(bool renderPixelLights, float farClipPlane, bool msaa, bool hdr, int sortingLayerID, int sortingOrder, MeshMaskParameters meshMaskParameters) { _renderPixelLights = renderPixelLights; _farClipPlane = farClipPlane; _allowMSAA = msaa; _allowHDR = hdr; _sortingLayerID = sortingLayerID; _sortingOrder = sortingOrder; _meshMask = new MeshMask(meshMaskParameters); }
internal void Validate(WaterfallRenderingModuleParameters parameters) { Refraction.Validate(parameters.RefractionParameters); RenderPixelLights = parameters.RenderPixelLights; FarClipPlane = parameters.FarClipPlane; AllowMSAA = parameters.AllowMSAA; AllowHDR = parameters.AllowHDR; SortingLayerID = parameters.SortingLayerID; SortingOrder = parameters.SortingOrder; MeshMask.Validate(parameters.MeshMaskParameters); }
internal void Validate(WaterRenderingModuleParameters parameters) { Refraction.Validate(parameters.RefractionParameters); RefractionPartiallySubmergedObjects.Validate(parameters.RefractionPartiallySubmergedObjectsParameters); Reflection.Validate(parameters.ReflectionParameters); ReflectionPartiallySubmergedObjects.Validate(parameters.ReflectionPartiallySubmergedObjectsParameters); RenderPixelLights = parameters.RenderPixelLights; FarClipPlane = parameters.FarClipPlane; AllowMSAA = parameters.AllowMSAA; AllowHDR = parameters.AllowHDR; SortingLayerID = parameters.SortingLayerID; SortingOrder = parameters.SortingOrder; ReflectionZOffset = parameters.ReflectionZOffset; ReflectionYOffset = parameters.ReflectionYOffset; MeshMask.Validate(parameters.MeshMaskParameters); }
internal void Initialize() { _mainModule = _waterObject.MainModule; _materialModule = _waterObject.MaterialModule; _meshMask = _waterObject.RenderingModule.MeshMask; _hasAnimatorAttached = _mainModule.Transform.GetComponent <Animator>() != null; SetupBuoyancyEffector(); SetupBoxCollider(); SetupPolygonCollider(); SetupEdgeCollider(); _materialModule.OnSurfaceThicknessOrSubmergeLevelChanged += UpdateBoxColliderSizeAndOffset; _materialModule.OnSurfaceThicknessOrSubmergeLevelChanged += UpdateBuoyancySurfaceLevel; _cachedWaterSize = _mainModule.WaterSize; _cachedWaterPosition = _mainModule.Position; _cachedWaterScale = _mainModule.Scale; ApplyChanges(); }
private void CreateMeshMaskByImage() { #if UNITY_EDITOR GameObject o = Selection.activeGameObject; if (o != null && o.GetComponent <Image>() != null) { Image img = o.GetComponent <Image>(); string path = AssetDatabase.GetAssetPath(img.mainTexture); if (!string.IsNullOrEmpty(path)) { TextureImporter textureImporter = AssetImporter.GetAtPath(path) as TextureImporter; TextureImporterSettings cacheSettings = new TextureImporterSettings(); textureImporter.ReadTextureSettings(cacheSettings); //将Texture临时设置为可读写 TextureImporterSettings tmp = new TextureImporterSettings(); textureImporter.ReadTextureSettings(tmp); tmp.readable = true; textureImporter.SetTextureSettings(tmp); AssetDatabase.ImportAsset(path); SobelEdgeDetection sobel = new SobelEdgeDetection(); Texture2D targetT2d = sobel.Detect(img.mainTexture as Texture2D); List <Vector2> vertices = EdgeUtil.GetPoints(targetT2d); for (int i = 0; i < vertices.Count; i++) { Vector3 vec = vertices[i]; vec.x -= targetT2d.width * 0.5f; vec.y -= targetT2d.height * 0.5f; vertices[i] = vec; } //恢复Texture设置 textureImporter.SetTextureSettings(cacheSettings); AssetDatabase.ImportAsset(path); MeshMask mm = o.GetComponent <MeshMask>(); PolygonCollider2D polygon2d = o.GetComponent <PolygonCollider2D>(); if (mm == null) { mm = o.AddComponent <MeshMask>(); } if (polygon2d == null) { polygon2d = o.AddComponent <PolygonCollider2D>(); } vertices = vertices.Select(p => { return(new Vector2(p.x / img.mainTexture.width * image.rectTransform.rect.width, p.y / img.mainTexture.height * image.rectTransform.rect.height)); }).ToList(); polygon2d.SetPath(0, vertices.ToArray()); mm.vertices = polygon2d.GetPath(0).ToList(); if (mm.vertices[0] == mm.vertices[vertices.Count - 1]) { mm.vertices.RemoveAt(mm.vertices.Count - 1); } Stopwatch sw = new Stopwatch(); sw.Start(); Triangulator tr = new Triangulator(mm.vertices.ToArray()); mm.triangles = tr.Triangulate().ToList(); sw.Stop(); Debug.Log("三角化耗时:" + sw.ElapsedMilliseconds + "ms"); AssetDatabase.Refresh(); } else { Debug.LogError("Image组件还没设置图片"); } } else { Debug.LogError("选中物体没有Image组件,请添加"); } #endif }