我正在研究Unity中的一个项目,该项目涉及将任何非静态对象从一个传送到配对的区域。这部分很好,但为了方便,我试图编写脚本的一部分,它将调整一个对象的大小,如果它的对被调整大小,这样它们将总是具有相同的大小。到目前为止它的工作 - 大多数。我遇到的唯一问题是当试图通过Transform组件调整大小时 - 例如,在Inspector中键入数字,或者在X或Y或Z上使用值滑块。这些手柄工作正常。我想,这并不是什么大不了的事,但如果我能弄清楚为什么这样做不行,所以我可以学会将来做什么,我会很高兴。下面的代码:Unity - 调整一个GameObject的大小以匹配另一个
[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...
}
如果任何人都可以看到一些重大的逻辑错误我做的,我想知道。如果我的代码有点难以理解,我也可以解释一下我的逻辑流程,我知道我很容易产生一些令人困惑的结构。
谢谢大家。
你的代码是做什么的?它不是做什么的?如果不通过“变换”,你如何缩放? – 31eee384
代码查看应用对象是否已调整大小,如果有,则调整配对对象的大小。更确切地说,如果GameObject的当前比例与先前记录的比例不同,在这种情况下,它将'scaleManuallyAltered'标志设置为true,然后重置scale变量,然后检查其他GameObject是否已经调整大小;如果没有,则会将该对中的比例更改为当前比例。 – BHustus
哦,对。我正在看*的代码几乎可以工作。关键的失败:它似乎并不喜欢在一个对象或另一个对象上的Transform组件中接受手动,编号类型的缩放编辑。我不确定你的意思是“不通过变换” - 因为我认为我*是*。 – BHustus