Позиция объекта не меняется
В скрипте я создаю объект, добавляю ему родителя canvas и привязываю к нему изображение.
Я хочу, чтобы он оказался в позиции (x,y,z), но изображение (а значит и объект) появляется в центре экрана и не меняет позицию. Пробовал по-разному менять положение, пробовал и у объекта, и у привязанного изображения менять позицию - все также в центре экрана. Причем изменение размера через rectTransform.sizeDelta работает отлично.
GameObject newObject = new GameObject("ObjectName");
newObject.transform.SetParent(GameCanvas.transform, false);
RectTransform rectTransform = newObject.AddComponent<RectTransform>();
rectTransform.sizeDelta = new Vector2(100, 100);
Image image = newObject.AddComponent<Image>();
image.sprite = Sprites[spriteNum];
newObject.GetComponent<RectTransform>().anchoredPosition = new Vector3(targetPosition.x,
targetPosition.y, floatz);
Пробовал разные варианты, не помогло (anchoredPosition, localPosition, position):
1 вариант.
newObject.GetComponent().anchoredPosition = new Vector3(targetPosition.x, targetPosition.y, floatz);
2 вариант.
newObject.transform.localPosition = new Vector3(targetPosition.x, targetPosition.y, floatz);
newObject.transform.TransformPoint(new Vector3(targetPosition.x, targetPosition.y, floatz));`
3 вариант.
rectTransform = newObject.AddComponent();
rectTransform.position = new Vector3(targetPosition.x, targetPosition.y, floatz);
4 вариант.
transform.GetComponent().localPosition = new Vector3(targetPosition.x, targetPosition.y, floatz);
image.transform.position = new Vector3(targetPosition.x, targetPosition.y, floatz);` `image.rectTransform.localPosition = new Vector3(targetPosition.x, targetPosition.y, floatz);
5 вариант.
newObject.GetComponent<RectTransform>().transform.position = new Vector3(targetPosition.x, targetPosition.y, floatz);
image.rectTransform.anchoredPosition = new Vector3(targetPosition.x, targetPosition.y, floatz);
newObject.GetComponent().localPosition = new Vector3(targetPosition.x, targetPosition.y, floatz);
Update Поменял скрипт: в самом скрипте ничего не создаю, только передаю туда уже созданное на canvas'e изображение. Пытаюсь изменить его позицию в скрипте:
image.rectTransform.position = new Vector3(targetPosition.x, targetPosition.y, floatz);
Debug.Log(targetPosition.x);
Debug.Log(targetPosition.y);
Но изображение появляется не в targetPosition, a в левом нижнем углу экрана. Пробовал дебажить позицию: значения адекватные - в рамках экрана(не в центре и не в левом нижнем углу). Непонятно, почему такое происходит.
Ответы (1 шт):
Ты не можешь добавить AddComponent<RectTransform>();, потому, что он уже есть.
anchoredPosition это не центр изображения, а абсолютно иное.
[DisallowMultipleComponent]
public class Foo : MonoBehaviour {
[SerializeField] private Transform _canvas;
[SerializeField] private Sprite _sprite;
[SerializeField] private Vector3 _position;
private void Awake () {
GameObject NewObject = new GameObject("Name");
NewObject.transform.SetParent(_canvas);
RectTransform ObjectRect = NewObject.transform as RectTransform;
ObjectRect.localPosition = _position;
ObjectRect.localEulerAngles = Vector3.zero;
ObjectRect.localScale = Vector3.one;
Image Image = NewObject.AddComponent<Image>();
Image.sprite = _sprite;
ObjectRect.sizeDelta = new Vector2(Image.sprite.rect.width, Image.sprite.rect.height);
}
}