返回介绍

RaycastHit.textureCoord2 纹理坐标2

发布于 2019-12-18 15:38:23 字数 3507 浏览 937 评论 0 收藏 0

JavaScript => public var textureCoord2: Vector2;
C# => public Vector2 textureCoord2;

Description 描述

The secondary uv texture coordinate at the impact point.

在接触点处的第二套UV纹理坐标。

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.

这可以用于3D纹理绘制或绘制弹痕。如果该碰撞器不是mesh collider,则返回Vector2.zero。如果网格不包括第二套UV,将返回主UV坐标。

JavaScript:

// 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.
 
var cam: Camera;
 
 
function Start() {
   cam = GetComponent.<Camera>();
}
 
 
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(cam.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 rend: Renderer = hit.transform.GetComponent.<Renderer>();
   	var 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
    var tex : Texture2D = rend.material.mainTexture as Texture2D;
    var pixelUV : Vector2 = hit.textureCoord2;
    pixelUV.x *= tex.width;
    pixelUV.y *= tex.height;
 
    tex.SetPixel(Mathf.FloorToInt(pixelUV.x), Mathf.FloorToInt(pixelUV.y), Color.black);
 
    tex.Apply();
}

C#:

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

RaycastHit

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文