Unity3D 2017.1.0f3-p2 [可能]错误移动非活动RectTransform

时间:2017-08-01 15:11:29

标签: unity3d unity3d-gui

移动禁用(gameObject.SetActive(false))RectTransform时,2017.x版本与5.6.x版本的行为不同。

bad stuff

我在这里通过脚本设置RectTransform offsetMin和offsetMax(当RT被禁用时),正如你所看到的,检查员'认为'矩形正在移动(编辑器中的轮廓和RectTransform位置数据正在更新)但RT并没有在屏幕上移动。但是,此错误不仅限于编辑器,在实际构建中也是相同的可见结果。

以下是它应该看起来的样子(和5.6.x中完全相同的代码一样):

enter image description here

看起来像一个非常丑陋的虫子......这是一个已知的问题吗?有一个简单的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);

  }

}

0 个答案:

没有答案