タイトル通りなのですが、RectTransformのPositionを変更してから
sizeDeltaを変更すると、Positionの変更が戻されるようになりました。
追記 : Unity 2018.2で修正されたようです。
実際の例で説明すると、以下のようなImageがあった時に
RectTransformのPositionを変更した後、sizeDeltaを変更すると、
Positionの変更が戻され、なかった事になります。(正確にはzだけは正常に変更される。)
RectTransform rectTransform = gameObject.GetComponent<RectTransform>(); //位置変更(この時点では位置は変更されている) rectTransform.localPosition = new Vector3(-100, -100, -100); //サイズ変更(ここで位置の変更が戻され、なかった事にされる!) rectTransform.sizeDelta = new Vector2(150, 50); //サイズ変更の後に位置変更すれば問題はない //rectTransform.localPosition = new Vector3(-100, -100, -100);
最初の「なりました」という言い方からお気付きかもしれませんが、
ちょっと前まではこういう事は起きませんでした。
具体的なバージョンで言うと、
2017.3.1.p1, 2017.4.0f1, 2018.1.0b7, 2018.1.0b13ではPositionの変更が戻され、
5.3.4f1, 5.6.5f1, 2017.3.1f1ではPositionの変更は戻されませんでした。
なので2017.3.1.p1辺りからの仕様変更もしくはバグのようです。
また、エディタ上だけでなく実機でも同様の動作をします。
ちなみに、Awakeで位置を変えて、Startでサイズを変えるといった
別フレームで位置とサイズの変更を行う場合には、Positionの変更は戻されません。
private void Awake() { //位置変更 RectTransform rectTransform = gameObject.GetComponent<RectTransform>(); rectTransform.localPosition = new Vector3(-100, -100, -100); } private void Start () { //サイズ変更(位置の変更はそのまま!) RectTransform rectTransform = gameObject.GetComponent<RectTransform>(); rectTransform.sizeDelta = new Vector2(150, 50); }
余談ですが、Canvsを非Activeにした状態で
ゲームを開始するとRect Transformの諸々0になるという注意点もあったりします。