Описание
Координата UV-текстуры в месте столкновения.
В сцену попадает луч. textureCoord
— это место, где луч попал в коллайдер. RaycastHit._textureCoord
— координата текстуры при попадании. Если в GameObject
нет коллайдера сетки, возвращается ноль Vector2.
Примечание. Для textureCoord требуется, чтобы коллайдер был MeshCollider.
// Записываем черные пиксели в GameObject, расположенный
// по сценарию. Скрипт прикреплен к камере.
// Определяем, куда попадает коллайдер, и изменяем текстуру в этой точке.
//
// Обратите внимание, что для MeshCollider в GameObject выпуклость должна быть отключена. Это позволяет
// вогнутые игровые объекты, которые будут включены в коллизию в этом примере.
//
// Также, чтобы текстура могла обновляться щелчком кнопки мыши, она должна иметь чтение/запись
// Для параметра Enabled установлено значение true в его дополнительных настройках импорта.
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();
}
}
Смотрите так же: Physics.Raycast, Physics.Linecast, Physics.RaycastAll.