移动禁用(gameObject.SetActive(false))RectTransform时,2017.x版本与5.6.x版本的行为不同。
我在这里通过脚本设置RectTransform offsetMin和offsetMax(当RT被禁用时),正如你所看到的,检查员'认为'矩形正在移动(编辑器中的轮廓和RectTransform位置数据正在更新)但RT并没有在屏幕上移动。但是,此错误不仅限于编辑器,在实际构建中也是相同的可见结果。
以下是它应该看起来的样子(和5.6.x中完全相同的代码一样):
看起来像一个非常丑陋的虫子......这是一个已知的问题吗?有一个简单的repro项目案例,如果值得记录一个bug,但希望世界上有一些正义,我不是第一个达到这个目标。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestPos : MonoBehaviour {
int pos;
float t;
[SerializeField]
RectTransform rt;
void Start () {
this.pos = 4;
this.t = -100;
}
void Update () {
if (Time.realtimeSinceStartup - this.t < 1) return;
this.t = Time.realtimeSinceStartup;
this.pos += 1;
if (this.pos == 5) this.pos = 1;
this.rt.gameObject.SetActive(false);
if (this.pos == 1) {
this.rt.offsetMin = Vector2.zero;
this.rt.offsetMax = new Vector2(100, 100);
}
if (this.pos == 2) {
this.rt.offsetMin = new Vector2(0, Screen.height - 100);
this.rt.offsetMax = new Vector2(100, Screen.height);
}
if (this.pos == 3) {
this.rt.offsetMin = new Vector2(Screen.width - 100, Screen.height - 100);
this.rt.offsetMax = new Vector2(Screen.width, Screen.height);
}
if (this.pos == 4) {
this.rt.offsetMin = new Vector2(Screen.width - 100, 0);
this.rt.offsetMax = new Vector2(Screen.width, 100);
}
this.rt.gameObject.SetActive(true);
}
}