Esempio n. 1
0
    public override void OnSceneGUI(Material[] materials)
    {
        if (materials.Length > 1)
        {
            return;
        }

        var material = materials[0];

        if (Mode == TextureVisualizeMode.None || Selection.activeGameObject == null || Selection.objects.Length != 1)
        {
            if (m_oldSelect != null)
            {
                EditorUtility.SetSelectedWireframeHidden(m_oldSelect, false);
            }

            return;
        }

        if (Serialized == null)
        {
            return;
        }

        var texture = Serialized.FindPropertyRelative(TextureProp);
        var curTex  = texture.objectReferenceValue as Texture;

        if (Mode == TextureVisualizeMode.None)
        {
            return;
        }

        var trans  = GetTextureTransformation(material);
        var uvMode = 0.0f;
        var uvName = !m_hasParentTexture ? m_shaderVarName + "UV" : m_parentTexture + "UV";

        if (material.HasProperty(uvName))
        {
            uvMode = material.GetFloat(uvName);
        }

        VisualizeMaterial.SetTexture("_MainTex", curTex);
        VisualizeMaterial.SetFloat("_Mode", (int)Mode);
        VisualizeMaterial.SetVector("_Trans", trans);
        VisualizeMaterial.SetFloat("_UV", uvMode);

        var target = Selection.activeGameObject.GetComponent <Renderer>();

        if (target != m_oldSelect && m_oldSelect != null)
        {
            EditorApplication.delayCall += SceneView.RepaintAll;
            EditorUtility.SetSelectedWireframeHidden(target, false);
            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.SetSelectedWireframeHidden(target, true);

            Graphics.DrawMesh(mesh, target.localToWorldMatrix, VisualizeMaterial, 0, SceneView.currentDrawingSceneView.camera, m_inst);
            SceneView.currentDrawingSceneView.Repaint();
        }
        else
        {
            Debug.LogError("Game object does not have a mesh source.");
        }
    }
Esempio n. 2
0
	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.");
		}
	}