Select your preferred scripting language. All code snippets will be displayed in this language.
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()