Legacy Documentation: Version 2018.1 (Go to current version)
LanguageEnglish
  • C#
  • JS

Script language

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

RaycastHit.textureCoord

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Submission failed

For some reason your suggested change could not be submitted. Please <a>try again</a> in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

public var textureCoord: Vector2;
public Vector2 textureCoord;

Description

The uv texture coordinate at the collision location.

A ray is fired into the scene. The textureCoord is the location where the ray has hit a collider. RaycastHit._textureCoord is a texture coordinate when a hit occurs. A Vector2 zero is returned if no mesh collider is present in the GameObject.

Note: A textureCoord requires the collider to be a MeshCollider.

// 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.

var cam: Camera;

function Start() { cam = GetComponent.<Camera>(); }

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(cam.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 rend : Renderer = hit.transform.GetComponent.<Renderer>(); var meshCollider = hit.collider as MeshCollider;

if (rend == null || rend.sharedMaterial == null || rend.sharedMaterial.mainTexture == null || meshCollider == null) return;

// Now draw a pixel where we hit the object var tex : Texture2D = rend.material.mainTexture as Texture2D; var pixelUV : Vector2 = hit.textureCoord; pixelUV.x *= tex.width; pixelUV.y *= tex.height;

tex.SetPixel(pixelUV.x, pixelUV.y, Color.black);

tex.Apply(); }
// Write black pixels onto the GameObject that is located
// by the script. The script is attached to the camera.
// Determine where the collider hits and modify the texture at that point.
//
// Note that the MeshCollider on the GameObject must have Convex turned off. This allows
// concave GameObjects to be included in collision in this example.
//
// Also to allow the texture to be updated by mouse button clicks it must have the Read/Write
// Enabled option set to true in its Advanced import settings.

using UnityEngine; using System.Collections;

public class ExampleClass : MonoBehaviour { public Camera cam;

void Start() { cam = GetComponent<Camera>(); }

void Update() { if (!Input.GetMouseButton(0)) return;

RaycastHit hit; if (!Physics.Raycast(cam.ScreenPointToRay(Input.mousePosition), out hit)) return;

Renderer rend = hit.transform.GetComponent<Renderer>(); MeshCollider meshCollider = hit.collider as MeshCollider;

if (rend == null || rend.sharedMaterial == null || rend.sharedMaterial.mainTexture == null || meshCollider == null) return;

Texture2D tex = rend.material.mainTexture as Texture2D; Vector2 pixelUV = hit.textureCoord; pixelUV.x *= tex.width; pixelUV.y *= tex.height;

tex.SetPixel((int)pixelUV.x, (int)pixelUV.y, Color.black); tex.Apply(); } }

Did you find this page useful? Please give it a rating: