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 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.textureCoord2;
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.textureCoord2
pixelUV.x *= tex.width
pixelUV.y *= tex.height
tex.SetPixel(pixelUV.x, pixelUV.y, Color.black)
tex.Apply()