public virtual void OnSceneGUI(AlloyFieldBasedEditor editor, Material[] materials) { }
public override void OnSceneGUI(AlloyFieldBasedEditor editor, Material[] materials) { if (materials.Length > 1 || Mode == TextureVisualizeMode.None || Selection.activeGameObject == null || Selection.objects.Length != 1) { if (m_oldSelect != null) { EditorUtility.SetSelectedRenderState(m_oldSelect, EditorSelectedRenderState.Highlight); } return; } var curTex = Property.textureValue; var propForUv = HasParentTexture ? editor.GetMaterialProperty(ParentTexture) : Property; Vector4 scaleAndOffset = propForUv.textureScaleAndOffset; var uvName = propForUv.name + "UV"; float uvMode = 0.0f; var material = materials[0]; if (material.HasProperty(uvName)) { uvMode = material.GetFloat(uvName); } VisualizeMaterial.SetTexture("_MainTex", curTex); VisualizeMaterial.SetFloat("_Mode", (int) Mode); VisualizeMaterial.SetVector("_Trans", scaleAndOffset); VisualizeMaterial.SetFloat("_UV", uvMode); var target = Selection.activeGameObject.GetComponent<Renderer>(); if (target != m_oldSelect && m_oldSelect != null) { EditorApplication.delayCall += SceneView.RepaintAll; EditorUtility.SetSelectedRenderState(target, EditorSelectedRenderState.Highlight); return; } m_oldSelect = target; Mesh mesh = null; var meshFilter = target.GetComponent<MeshFilter>(); var meshRenderer = target.GetComponent<MeshRenderer>(); if (meshFilter != null && meshRenderer != null) { mesh = meshFilter.sharedMesh; } if (mesh == null) { var skinnedMeshRenderer = target.GetComponent<SkinnedMeshRenderer>(); if (skinnedMeshRenderer != null) { mesh = skinnedMeshRenderer.sharedMesh; } } if (mesh != null) { EditorUtility.SetSelectedRenderState(target, EditorSelectedRenderState.Hidden); Graphics.DrawMesh(mesh, target.localToWorldMatrix, VisualizeMaterial, 0, SceneView.currentDrawingSceneView.camera, TexInst); SceneView.currentDrawingSceneView.Repaint(); } else { Debug.LogError("Game object does not have a mesh source."); } }