Пример #1
0
 public virtual void OnSceneGUI(AlloyFieldBasedEditor editor, Material[] materials)
 {
 }
Пример #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.");
		}
	}