在 Unity 中让一个 GameObject 粘在另一个 GameObjects 边界上

Make a GameObject stick to another GameObjects border in Unity

我正在使用 Unity3D 和 MRTK 进行 Hololens 2 开发。

正如你在图片中看到的,我得到了一个 Square-Gameobject 和一个 AppBar-Gameobject。 Square 附加了 MRTK BoundsControl,这使得它可以变形。用户可以使用手柄更改 Square 的大小和旋转。

在用户所做的每一次更改中,AppBar 都应该贴在 Square 的左边框上。

Object-Gameobject 的比例为:X:1,Y:1,Z:1。
Square-Gameobject 的比例为:X:0.15,y:0.15,Z:0.009。

当我用手柄缩放 Square 时,只有 Object 的缩放比例发生变化 Square 的缩放比例一直保持不变。

我已经尝试过此代码,但它无法正常工作:

using UnityEngine;

public class AppBar : MonoBehaviour
{
    public GameObject appBar;
    public GameObject MaterialObject;
    public void MoveAppBar()
    {

        var distance = MaterialObject.transform.localScale.x + MaterialObject.transform.GetChild(0).localScale.x - 1;
        appBar.transform.position = new Vector3(-distance - 0.032f, 0, 0);
    }
}

将一个空对象添加到获得缩放的对象的边缘up/down。它需要在边缘,这样当主要对象被修改时,它会保持在边界上。

将此代码添加到 UI 上的脚本:

public Transform tr;
public float offset;
private void Update()
{
    Vector3 pos = tr.position;
    pos.x += offset;
    transform.position = pos;
}

将空对象拖到 tr 插槽并为偏移指定一个值,以指示您希望 UI 保留该空对象的距离。

现在您应该能够缩放主要对象,并且 UI 将与边缘保持相同的距离,而不会进一步深入或进入主要对象内部。

更好的方法是通过 event/listener 监听主要对象的修改,这样即使没有任何事情发生,您也不会 运行 更新。