c# - Unity - 调整一个游戏对象的大小以匹配另一个

标签 c# unity3d unity3d-editor

我正在 Unity 中开展一个项目,该项目涉及将任何非静态对象从一个对象传送到配对对象的区域。那部分很好,但为了方便起见,我正在尝试编写脚本的一部分,如果调整一对对象的大小时,将调整一个对象的大小,以便它们始终具有相同的大小。到目前为止它是有效的——主要是。我遇到的唯一问题是在尝试通过转换组件调整大小时 - 例如,在检查器中输入数字,或使用 X 或 Y 或 Z 上的值 slider 。 handle 工作正常。我想这没什么大不了的,但如果我能弄清楚为什么这不起作用,这样我就可以了解将来该怎么做,我会很高兴。这是代码:

[ExecuteInEditMode]
public class TransferRegion : MonoBehaviour {
    // Unrelated code...

    public bool scaleManuallyAltered {
        get; private set;
    }

    [SerializeField]
    private TransferRegion pair;

    private Vector3 scale;

    // Called whenever the scene is edited
    void Update () {
        if (scale != gameObject.transform.localScale) {
            scaleManuallyAltered = true;
            scale = gameObject.transform.localScale;
        }
        if (pair && scaleManuallyAltered && !pair.scaleManuallyAltered) {
            pair.transform.localScale = scale;
        }
    }

    // Called AFTER every Update call
    void LateUpdate () {
        scaleManuallyAltered = false;
    }

    // Unrelated code...
}

如果有人能看到我正在犯的一些重大逻辑错误,我很想知道。如果我的代码有点难以理解,我也可以解释一下我的逻辑流程,我知道我很容易做出一些令人困惑的结构。
谢谢大家。

最佳答案

如果您希望一个对象与另一个对象具有相同的比例,为什么不通过将调整大小游戏对象的比例直接设置为它所基于的游戏对象的比例来简化您的代码?例如,此脚本在编辑模式下重新调整对象的大小以匹配其对的比例:

using UnityEngine;
using UnityEditor;
using System.Collections;

[ExecuteInEditMode]
public class tester : MonoBehaviour
{
    public Transform PairedTransform;

    void Update()
    {
        if (!Selection.Contains(gameObject))
        {
            gameObject.transform.localScale = PairedTransform.localScale;
        }
    }
}

我在场景中的两个立方体上对此进行了测试。我能够使用小工具调整大小,并在检查器中的转换编辑字段中手动输入数字。

编辑:通过利用Selection,您可以仅将比例更改应用于未在层次结构中选择的对象对。这样,这些对就不会相互竞争以重新调整自己的规模。

关于c# - Unity - 调整一个游戏对象的大小以匹配另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33130423/

相关文章:

java - CQRS 和事件溯源的区别

c# - 只初始化一次异步模式

c# - `CrossPlatformInput' 在命名空间 `UnitySampleAssets' 中不存在

c# - Unity 数组 C# 的自定义下拉选择

dll - 重命名外部 dll 中的类,而不会在 unityEditor 中丢失对它的引用

c# - 如何将模型从 Blender 3.6 导出到 Unity 2022?

c# - 是否可以在不使用 ArcGIS Pro 的情况下使用 ArcGIS Web 查看 BIM 模型

c# - ByteArray 到 IFormFile

c# - 使用 nuget 包进行 android 应用程序 or unity 让 sqlite 工作

android - 基于 Unity 的 Android 游戏屏幕在 Lollipop 下对角线切成两半(但在 Jelly Bean 下不是)