моя программка делает двухмерный массив кубиков. на сцене есть два объекта: камера и объект, к которому приделан 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;
}
}
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) находится?