【发布时间】:2015-10-14 16:11:54
【问题描述】:
我正在 Unity 中开展一个项目,该项目涉及将任何非静态对象从一个传送到配对的区域。那部分很好,但为了方便起见,我正在尝试编写脚本的一部分,如果调整一个对象的大小,它将调整一个对象的大小,以便它们始终具有相同的大小。到目前为止,它的工作原理 - 主要是。我遇到的唯一问题是尝试通过 Transform 组件调整大小时 - 例如在 Inspector 中输入数字,或使用 X 或 Y 或 Z 上的值滑块。手柄工作正常。我想这没什么大不了的,但是如果我能弄清楚为什么这不起作用,那么我可以学习将来要做什么,我会很高兴。代码如下:
[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...
}
如果有人能看到我正在犯的一些重大的逻辑错误,我想知道。如果我的代码有点难以理解,我也可以稍微解释一下我的逻辑流程,我知道我很容易做出一些令人困惑的结构。
谢谢各位。
【问题讨论】:
-
你的代码做什么和不做什么?如果不通过
Transform,您将如何扩展? -
该代码查看应用的对象是否已调整大小,如果已调整,则调整配对对象的大小。更准确地说,如果 GameObject 的当前比例与之前记录的比例不同;在这种情况下,它将其
scaleManuallyAltered标志设置为true,然后重置缩放变量,然后检查其他游戏对象是否也已调整大小;如果没有,它将对上的比例更改为当前比例。 -
哦,对了。我正在查看的代码 几乎 有效。关键失败:它似乎不喜欢在一个对象或另一个对象的 Transform 组件中接受手动、输入数字的比例编辑。而且我不确定您所说的“不通过变换缩放”是什么意思——因为我认为我 是。
-
那个问题是关于“我遇到的唯一问题是尝试通过 Transform 组件调整大小时。”这意味着在没有 Transform 组件的情况下调整大小时不会遇到问题。你的cmets已经澄清了,我认为你的帖子只是误导。编辑:那好多了,当我可以访问 Unity 环境时,我会更深入地了解。
-
那里,我认为这可能更清楚。这可能只是我的一些愚蠢的失败,但它不起作用似乎很奇怪。
标签: c# unity3d unity3d-editor