示例#1
0
    // 创建的时候通知Mask刷新
    void Start()
    {
        MeshMask mask = GetComponentInParent <MeshMask>();

        if (mask != null)
        {
            GetComponentInParent <MeshMask>().Refresh();
        }
    }
示例#2
0
 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);
 }
示例#3
0
        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);
        }
示例#4
0
        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);
        }
示例#5
0
        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();
        }
示例#6
0
    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
    }