RaycastHit.textureCoord

var textureCoord : Vector2

Description

The uv texture coordinate at the impact point.

This can be used for 3D texture painting or drawing bullet marks. If the collider is no mesh collider, zero Vector2 will be returned.

JavaScript
    // 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.textureCoord;
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 example : 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.textureCoord;
pixelUV.x *= tex.width;
pixelUV.y *= tex.height;
tex.SetPixel(pixelUV.x, pixelUV.y, Color.black);
tex.Apply();
}
}

import UnityEngine
import System.Collections

class example(MonoBehaviour):

def Update():
if not Input.GetMouseButton(0):
return
hit as RaycastHit
if not Physics.Raycast(camera.ScreenPointToRay(Input.mousePosition), hit):
return
renderer as Renderer = hit.collider.renderer
meshCollider as MeshCollider = hit.collider
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.textureCoord
pixelUV.x *= tex.width
pixelUV.y *= tex.height
tex.SetPixel(pixelUV.x, pixelUV.y, Color.black)
tex.Apply()

See Also: Physics.Raycast, Physics.Linecast, Physics.RaycastAll.