UnityEditor.DetailPainter.Paint C# (CSharp) Méthode

Paint() public méthode

public Paint ( float xCenterNormalized, float yCenterNormalized, int detailIndex ) : void
xCenterNormalized float
yCenterNormalized float
detailIndex int
Résultat void
        public void Paint(float xCenterNormalized, float yCenterNormalized, int detailIndex)
        {
            if (detailIndex < this.terrainData.detailPrototypes.Length)
            {
                int num = Mathf.FloorToInt(xCenterNormalized * this.terrainData.detailWidth);
                int num2 = Mathf.FloorToInt(yCenterNormalized * this.terrainData.detailHeight);
                int num3 = Mathf.RoundToInt((float) this.size) / 2;
                int num4 = Mathf.RoundToInt((float) this.size) % 2;
                int xBase = Mathf.Clamp(num - num3, 0, this.terrainData.detailWidth - 1);
                int yBase = Mathf.Clamp(num2 - num3, 0, this.terrainData.detailHeight - 1);
                int num7 = Mathf.Clamp((num + num3) + num4, 0, this.terrainData.detailWidth);
                int num8 = Mathf.Clamp((num2 + num3) + num4, 0, this.terrainData.detailHeight);
                int totalWidth = num7 - xBase;
                int totalHeight = num8 - yBase;
                int[] numArray = new int[] { detailIndex };
                if ((this.targetStrength < 0f) && !this.clearSelectedOnly)
                {
                    numArray = this.terrainData.GetSupportedLayers(xBase, yBase, totalWidth, totalHeight);
                }
                for (int i = 0; i < numArray.Length; i++)
                {
                    int[,] details = this.terrainData.GetDetailLayer(xBase, yBase, totalWidth, totalHeight, numArray[i]);
                    for (int j = 0; j < totalHeight; j++)
                    {
                        for (int k = 0; k < totalWidth; k++)
                        {
                            int ix = (xBase + k) - ((num - num3) + num4);
                            int iy = (yBase + j) - ((num2 - num3) + num4);
                            float t = this.opacity * this.brush.GetStrengthInt(ix, iy);
                            float targetStrength = this.targetStrength;
                            float num18 = Mathf.Lerp((float) details[j, k], targetStrength, t);
                            details[j, k] = Mathf.RoundToInt((num18 - 0.5f) + Random.value);
                        }
                    }
                    this.terrainData.SetDetailLayer(xBase, yBase, numArray[i], details);
                }
            }
        }
    }

Usage Example

 public void OnSceneGUI()
 {
   this.Initialize();
   if (!(bool) ((UnityEngine.Object) this.m_Terrain.terrainData))
     return;
   Event current = Event.current;
   this.CheckKeys();
   int controlId = GUIUtility.GetControlID(TerrainInspector.s_TerrainEditorHash, FocusType.Passive);
   switch (current.GetTypeForControl(controlId))
   {
     case EventType.MouseDown:
     case EventType.MouseDrag:
       if (GUIUtility.hotControl != 0 && GUIUtility.hotControl != controlId || current.GetTypeForControl(controlId) == EventType.MouseDrag && GUIUtility.hotControl != controlId || (Event.current.alt || current.button != 0 || (!this.IsModificationToolActive() || HandleUtility.nearestControl != controlId)))
         break;
       if (current.type == EventType.MouseDown)
         GUIUtility.hotControl = controlId;
       Vector2 uv;
       Vector3 pos;
       if (!this.Raycast(out uv, out pos))
         break;
       if (this.selectedTool == TerrainTool.SetHeight && Event.current.shift)
       {
         this.m_TargetHeight.value = this.m_Terrain.terrainData.GetInterpolatedHeight(uv.x, uv.y) / this.m_Terrain.terrainData.size.y;
         InspectorWindow.RepaintAllInspectors();
       }
       else if (this.selectedTool == TerrainTool.PlaceTree)
       {
         if (current.type == EventType.MouseDown)
           Undo.RegisterCompleteObjectUndo((UnityEngine.Object) this.m_Terrain.terrainData, "Place Tree");
         if (!Event.current.shift && !Event.current.control)
           TreePainter.PlaceTrees(this.m_Terrain, uv.x, uv.y);
         else
           TreePainter.RemoveTrees(this.m_Terrain, uv.x, uv.y, Event.current.control);
       }
       else if (this.selectedTool == TerrainTool.PaintTexture)
       {
         if (current.type == EventType.MouseDown)
         {
           List<UnityEngine.Object> objectList = new List<UnityEngine.Object>();
           objectList.Add((UnityEngine.Object) this.m_Terrain.terrainData);
           objectList.AddRange((IEnumerable<UnityEngine.Object>) this.m_Terrain.terrainData.alphamapTextures);
           Undo.RegisterCompleteObjectUndo(objectList.ToArray(), "Detail Edit");
         }
         SplatPainter splatPainter = new SplatPainter();
         splatPainter.size = (int) this.m_Size;
         splatPainter.strength = (float) this.m_Strength;
         splatPainter.terrainData = this.m_Terrain.terrainData;
         splatPainter.brush = this.GetActiveBrush(splatPainter.size);
         splatPainter.target = (float) this.m_SplatAlpha;
         splatPainter.tool = this.selectedTool;
         this.m_Terrain.editorRenderFlags = TerrainRenderFlags.heightmap;
         splatPainter.Paint(uv.x, uv.y, this.m_SelectedSplat);
         this.m_Terrain.terrainData.SetBasemapDirty(false);
       }
       else if (this.selectedTool == TerrainTool.PaintDetail)
       {
         if (current.type == EventType.MouseDown)
           Undo.RegisterCompleteObjectUndo((UnityEngine.Object) this.m_Terrain.terrainData, "Detail Edit");
         DetailPainter detailPainter = new DetailPainter();
         detailPainter.size = (int) this.m_Size;
         detailPainter.targetStrength = (float) this.m_DetailStrength * 16f;
         detailPainter.opacity = (float) this.m_DetailOpacity;
         if (Event.current.shift || Event.current.control)
           detailPainter.targetStrength *= -1f;
         detailPainter.clearSelectedOnly = Event.current.control;
         detailPainter.terrainData = this.m_Terrain.terrainData;
         detailPainter.brush = this.GetActiveBrush(detailPainter.size);
         detailPainter.tool = this.selectedTool;
         detailPainter.randomizeDetails = true;
         detailPainter.Paint(uv.x, uv.y, this.m_SelectedDetail);
       }
       else
       {
         if (current.type == EventType.MouseDown)
           Undo.RegisterCompleteObjectUndo((UnityEngine.Object) this.m_Terrain.terrainData, "Heightmap Edit");
         HeightmapPainter heightmapPainter = new HeightmapPainter();
         heightmapPainter.size = (int) this.m_Size;
         heightmapPainter.strength = (float) this.m_Strength * 0.01f;
         if (this.selectedTool == TerrainTool.SmoothHeight)
           heightmapPainter.strength = (float) this.m_Strength;
         heightmapPainter.terrainData = this.m_Terrain.terrainData;
         heightmapPainter.brush = this.GetActiveBrush((int) this.m_Size);
         heightmapPainter.targetHeight = (float) this.m_TargetHeight;
         heightmapPainter.tool = this.selectedTool;
         this.m_Terrain.editorRenderFlags = TerrainRenderFlags.heightmap;
         if (this.selectedTool == TerrainTool.PaintHeight && Event.current.shift)
           heightmapPainter.strength = -heightmapPainter.strength;
         heightmapPainter.PaintHeight(uv.x, uv.y);
       }
       current.Use();
       break;
     case EventType.MouseUp:
       if (GUIUtility.hotControl != controlId)
         break;
       GUIUtility.hotControl = 0;
       if (!this.IsModificationToolActive())
         break;
       if (this.selectedTool == TerrainTool.PaintTexture)
         this.m_Terrain.terrainData.SetBasemapDirty(true);
       this.m_Terrain.editorRenderFlags = TerrainRenderFlags.all;
       this.m_Terrain.ApplyDelayedHeightmapModification();
       current.Use();
       break;
     case EventType.MouseMove:
       if (!this.IsBrushPreviewVisible())
         break;
       HandleUtility.Repaint();
       break;
     case EventType.Repaint:
       this.DisableProjector();
       break;
     case EventType.Layout:
       if (!this.IsModificationToolActive())
         break;
       HandleUtility.AddDefaultControl(controlId);
       break;
   }
 }
All Usage Examples Of UnityEditor.DetailPainter::Paint
DetailPainter