самопроизвольно изменяется transform.position

Программирование на Юнити.

самопроизвольно изменяется transform.position

Сообщение manjak 28 июн 2010, 23:53

помогите, пожалуйста. стопудова где-то опять накосячил, но понять не могу где.

моя программка делает двухмерный массив кубиков. на сцене есть два объекта: камера и объект, к которому приделан MainScript. камера находится в (0,0,0), а MainScript в (0,0,50). при срабатывании MainScript он продолжает писать что находится в (0,0,50), но на самом деле находится немного в другом месте.

Изображение

судя по скриншоту, он находится в (-boxSize-boxBuf/2, boxSize+boxBuf/2, 50). главное, что я нигде не делаю изменения координаты самого MainScript, только его чайлдов. но видимо я что-то пропустил :((

эксперимента ради поменял boxSize на 5, а boxBuf на 4 и MainScript решил уехать на (-boxSize-boxBuf, boxSize+boxBuf, 50).

Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class MainScript: MonoBehaviour {
        private GameObject [,] boxArray;
        private int arrSize = 4;
       
        private int boxSize = 10;
        private int boxBuf = 2;

        // Use this for initialization
        void Start () {
                boxArray = new GameObject [arrSize, arrSize];
                int count = 0;
               
                for (int my = 0; my < arrSize; my++) {
                        for (int mx = 0; mx < arrSize; mx++) {
                                //создаю инстанс кубика, в нем вызываю процедуру рассчета координаты этого кубика
                                boxArray[mx, my] = Instantiate(Resources.Load("BoxPerfab"), generateBoxPosition(mx, my), transform.rotation) as GameObject;
                                boxArray[mx, my].transform.parent = gameObject.transform;
                                //отправляю кучу дополнительных данных в кубик
                                (boxArray[mx, my].GetComponent(typeof(BoxScript)) as BoxScript).SetVars(count, new Vector2(mx, my), boxSize);
                               
                                count++;
                        }
                }
        }
       
        // Update is called once per frame
        void Update () {
       
        }
       
        Vector3 generateBoxPosition(int mx, int my) { //процедура для безумного расчета координаты кубика
                mx = -((arrSize*boxSize+(arrSize - 1)*boxBuf)/2) + ((boxSize+boxBuf)*(mx - 1) + (boxSize+boxBuf)/2);
                my = ((arrSize*boxSize+(arrSize - 1)*boxBuf)/2) - ((boxSize+boxBuf)*(my - 1) + (boxSize+boxBuf)/2);
                Vector3 temp = new Vector3(x, y, 0);
                temp += gameObject.transform.position;
                return temp;
        }
}
 


как оно вообще может имея отличные координаты писать что оно в (0,0,50) находится?
manjak
UNец
 
Сообщения: 8
Зарегистрирован: 18 май 2010, 17:30

Re: самопроизвольно изменяется transform.position

Сообщение DbIMok 29 июн 2010, 02:38

на скриншоте видно, что пустой экземпляр GameObject названный MainPrefab имеет координаты (0,0,50). очевидно, что именно такие координаты он и имеет. в окне Scene можете подвигать, повращать, приблизить сцену как вам угодно. положение объектов в его "камере" никак не влияет на положение в окне Game. в сети есть множество видеоуроков по интерфейсу редактора и базовым операциям, в том числе на этом форуме, в том числе на русском языке. посмотрите их прежде чем писать скрипты.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: самопроизвольно изменяется transform.position

Сообщение manjak 30 июн 2010, 19:00

да не в интерфейсе дело :(( и на скриншоте видно, что несмотря на то, что в Инспекторе написаны координаты (0,0,50) на самом деле MainPrefab находится в (-11, 11, 50). камера на скриншоте находится в (0,0,0), что показывают жирные линии координатной сетки сетки. Инспектор врет :( могу скриншотов еще наделать...
manjak
UNец
 
Сообщения: 8
Зарегистрирован: 18 май 2010, 17:30

Re: самопроизвольно изменяется transform.position

Сообщение Zaicheg 30 июн 2010, 19:25

Вот та херня, которую вы видите в виде стрелочек (красная-синяя-зелёная) — это не позиция MainPrefab. Это усреднённая позиция его и всех его дочерних объектов. Там над инспектором у вас кнопочка "Center" переключитесь с неё на Pivot и увидите, что стрелочки сместятся в нули.
Может тут кто-нибудь подробнее объяснит, что там юнити считает центром, а что пивотом. Но суть в том, что всё нормально с координатами.
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: самопроизвольно изменяется transform.position

Сообщение manjak 30 июн 2010, 20:20

:-o спасибо... значит я не правильно кубики расставляю все-таки :((
manjak
UNец
 
Сообщения: 8
Зарегистрирован: 18 май 2010, 17:30


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10