版本:Unity 6 (6000.0)
语言中文(简体)
  • C#

RaycastHit.textureCoord

建议更改

成功!

感谢你帮助我们提升 Unity 文档的质量。我们无法采纳所有建议,但我们会阅读用户提出的每条更改建议,并在适用的情况下进行更新。

关闭

提交失败

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

关闭

取消

public Vector2 textureCoord;

描述

碰撞位置处的 uv 纹理坐标。

向场景射出一条光线。 textureCoord 是光线击中碰撞器的位置。当发生碰撞时,RaycastHit._textureCoord 是一个纹理坐标。如果 GameObject 中不存在网格碰撞器,则返回 Vector2 零。可以通过主线程访问该属性。

注意: textureCoord 要求碰撞器为 MeshCollider

// Write black pixels onto the GameObject that is located
// by the script. The script is attached to the camera.
// Determine where the collider hits and modify the texture at that point.
//
// Note that the MeshCollider on the GameObject must have Convex turned off. This allows
// concave GameObjects to be included in collision in this example.
//
// Also to allow the texture to be updated by mouse button clicks it must have the Read/Write
// Enabled option set to true in its Advanced import settings.

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(); } }