【问题标题】:Rescale an Image depending on the Raycast hit position?根据 Raycast 命中位置重新缩放图像?
【发布时间】:2020-07-22 17:46:43
【问题描述】:

我正在使用线条渲染器和线条渲染器末尾的圆形 png。当光线投射到碰撞对象时,圆形 png 出现在行尾。我面临的问题是;如果物体在 10 米外,我可以很容易地看到圆形 png,但如果对撞机小于 4 米,则图像太大。我如何重新缩放图像,以便如果它更远,它保持不变,如果它靠近,那么它会缩小,以便它看起来无论远近都相似。

Default Scale of the GreenPoint_Raycast: X, Y, Z: 0.001323662

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class raycastLineRenderer : MonoBehaviour {
    public GameObject lineRenderer;
    RaycastHit hit;

    public GameObject RightHandAnchor;

    public GameObject GreenPoint_Raycast;

    // Start is called before the first frame update
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        int layerMask = LayerMask.GetMask ("RaycastTarget");

        if (Physics.Raycast (RightHandAnchor.transform.position, RightHandAnchor.transform.TransformDirection (Vector3.forward), out hit, Mathf.Infinity, layerMask)) {

            GreenPoint_Raycast.GetComponent<Image>().enabled = true; 
            GreenPoint_Raycast.transform.position = (hit.point); //position is right, scaling is the problem

            if (hit.collider) {

                    Debug.Log ("Hit: " + hit.collider.name);

                    if (hit.collider.name == "Mesh_1") {
                    } else
                    if (hit.collider.name == "Mesh_2") {
                    } else
                    if (hit.collider.name == "Mesh_3") {
                    } 

            } else {

                lineRenderer.GetComponent<LineRenderer> ().SetPosition (1, new Vector3 (0, 0, 5000));
                GreenPoint_Raycast.GetComponent<Image>().enabled = false;

            }
        } else {
            GreenPoint_Raycast.GetComponent<Image>().enabled = false;
        }
    }
}

更新:

命中点的距离可以用光线投射命中点计算为:

Debug.Log("hit at distance from RightHandAnchor to object: "+hit.distance);

有了这个,我想用 Lerp 重新调整 GreenPoint_Raycast 的大小?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    我认为你需要使用一个简单的比例。

    dist1/scale1 = dist2/scale2

    如果您说 10 米的比例是正确的(假设您使用 dist 变量测量它),我们可以按比例排列这些数字。

    10 / 0.001323662 = dist / scale

    所以想要的比例= 0.001323662 * dist / 10

    更新: 好吧,你把dist的计算删了

    但我猜是Vector3.Distance(hit.point, RightHandAnchor.transform.position)

    【讨论】:

    • 嘿,这不需要 dist。这完全是出于不同的原因。
    • 因为我将绿点的位置计算为``` GreenPoint_Raycast.transform.position = (hit.point);```。所以我想根据 hit.point 距离,我可以缩放它吗?
    • @Saif 你写了“如果物体在 10 米外”。 10米距离什么点?我想你需要计算到那个点的距离
    • 距离游戏对象“RightHandAnchor”的点 10 米。我已经更新了我的代码。距离是对的。我只需要向上/向下缩放游戏对象。
    • @Saif 是的,您还需要计算距该点的第二距离。正如我写的Vector3.Distance(hit.point, RightHandAnchor.transform.position)。完整的公式是scale = 0.001323662 * Vector3.Distance(hit.point, RightHandAnchor.transform.position) / 10f 比例是Vector3,所以你需要乘以Vector3.One
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    相关资源
    最近更新 更多