Legacy Documentation: Version 4.5.0

Script language:

  • JS
  • C#
  • Boo
Script language

Select your preferred scripting language. All code snippets will be displayed in this language.

RaycastHit.textureCoord2

var textureCoord2: Vector2;
Vector2 textureCoord2;
textureCoord2 as Vector2

Description

The secondary uv texture coordinate at the impact point.

This can be used for 3D texture painting or drawing bullet marks. If the collider is not a mesh collider, Vector2.zero will be returned. If the mesh contains no secondary uv set, the uv of the primary uv set will be returned.

	// Attach this script to a camera and it will paint black pixels in 3D 
	// on whatever the user clicks. Make sure the mesh you want to paint 
	// on has a mesh collider attached.
	function Update () {
	    // Only when we press the mouse
	    if (!Input.GetMouseButton (0))
	        return;

// Only if we hit something, do we continue var hit : RaycastHit; if (!Physics.Raycast (camera.ScreenPointToRay(Input.mousePosition), hit)) return;

// Just in case, also make sure the collider also has a renderer // material and texture. Also we should ignore primitive colliders. var renderer : Renderer = hit.collider.renderer; var meshCollider = hit.collider as MeshCollider; if (renderer == null || renderer.sharedMaterial == null || renderer.sharedMaterial.mainTexture == null || meshCollider == null) return; // Now draw a pixel where we hit the object var tex : Texture2D = renderer.material.mainTexture; var pixelUV = hit.textureCoord2; pixelUV.x *= tex.width; pixelUV.y *= tex.height; tex.SetPixel(pixelUV.x, pixelUV.y, Color.black); tex.Apply(); }

using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour {
    void Update() {
        if (!Input.GetMouseButton(0))
            return;
        
        RaycastHit hit;
        if (!Physics.Raycast(camera.ScreenPointToRay(Input.mousePosition), out hit))
            return;
        
        Renderer renderer = hit.collider.renderer;
        MeshCollider meshCollider = hit.collider as MeshCollider;
        if (renderer == null || renderer.sharedMaterial == null || renderer.sharedMaterial.mainTexture == null || meshCollider == null)
            return;
        
        Texture2D tex = renderer.material.mainTexture;
        Vector2 pixelUV = hit.textureCoord2;
        pixelUV.x *= tex.width;
        pixelUV.y *= tex.height;
        tex.SetPixel(pixelUV.x, pixelUV.y, Color.black);
        tex.Apply();
    }
}
import UnityEngine
import System.Collections

public class ExampleClass(MonoBehaviour):

	def Update() as void:
		if not Input.GetMouseButton(0):
			return
		hit as RaycastHit
		if not Physics.Raycast(camera.ScreenPointToRay(Input.mousePosition), ):
			return
		renderer as Renderer = hit.collider.renderer
		meshCollider as MeshCollider = (hit.collider as MeshCollider)
		if (((renderer == null) or (renderer.sharedMaterial == null)) or (renderer.sharedMaterial.mainTexture == null)) or (meshCollider == null):
			return
		tex as Texture2D = renderer.material.mainTexture
		pixelUV as Vector2 = hit.textureCoord2
		pixelUV.x *= tex.width
		pixelUV.y *= tex.height
		tex.SetPixel(pixelUV.x, pixelUV.y, Color.black)
		tex.Apply()