版本:Unity 6 (6000.0)
语言英语
  • C#

RaycastHit.textureCoord2

建议变更

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们会阅读来自我们用户的每个建议变更,并在适用时进行更新。

关闭

提交失败

由于某种原因,无法提交您建议的变更。请在几分钟后<a>重试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

public Vector2 textureCoord2;

描述

碰撞点处的次要 uv 纹理坐标。

它可用于 3D 纹理绘制或绘制弹痕。如果碰撞体不是网格碰撞体,则将返回 Vector2.zero。如果网格不包含次要 uv 集,则将返回主 uv 集的 uv。此属性可以在主线程外访问。

注意:要使用 textureCoord2,要求碰撞体为 MeshCollider

using UnityEngine;

public class Example : MonoBehaviour { // 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.

Camera cam;

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

void Update() { // Only when we press the mouse if (!Input.GetMouseButton(0)) { return; }

// Only if we hit something, do we continue RaycastHit hit; if (!Physics.Raycast(cam.ScreenPointToRay(Input.mousePosition), out hit)) { return; }

// Just in case, also make sure the collider also has a renderer // material and texture. Also we should ignore primitive colliders. 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; }

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

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

tex.Apply(); } }