衝突したUV テクスチャの座標
This can be used for 3D texture painting or drawing bullet marks. If the collider is no mesh collider, zero Vector2 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.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 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.textureCoord; 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.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.