Есть значит персонаж, стоящий на клетках, в каждой из которой такой вот код
Код
public class BattlePlace : MonoBehaviour {
public bool isActiv;
public GameObject inThisPlace;
private MeshRenderer mesh;
GameObject battleField { set; get; }
public int iThis;
public int jThis;
void OnMouseEnter()
{
isActiv = true;
}
void OnMouseExit()
{
isActiv = false;
}
// Use this for initialization
void Start () {
isActiv = false;
inThisPlace = null;
}
Клетки эти создаются скриптом из другого, "пустого", объекта
public class BattleField : MonoBehaviour {
public int len;
public int weth;
public GameObject origBattlePlace; //Стандартная клетка
public GameObject player;
public GameObject[][] battleArray; //Собственно матрица-поле
// Use this for initialization
void Start () {
battleArray = new GameObject[len][];//Создаём матрицу
for (int i = 0; i < len; i++)
{
battleArray[i] = new GameObject[weth];
for (int j = 0; j < weth; j++)
{
battleArray[i][j] = origBattlePlace; // Присваиваем каждому элементу матрицы клон оригинала
Instantiate(battleArray[i][j]);// добавляем клетку на сцену
BattlePlace bp = battleArray[i][j].GetComponent<BattlePlace>();// используем вставленный в объект клетки скрипт BattlePlace
bp.iThis = i; // прописываем в клетке её координаты
bp.jThis = j;
battleArray[i][j].transform.position = new Vector3(10 + i * 5, 0.1F, 10 + j * 5);
}
}
}
Персонаж проверяет: на какой клетке он стоит и "записывает" себя в поле клетки inThisPlace
public class Character : MonoBehaviour
{
public GameObject me;
public GameObject battleField;
private BattleField bf;
// Use this for initialization
void Start()
{
bf = battleField.GetComponent<BattleField>();
}
// Update is called once per frame
void Update()
{
int currentI = (int)(transform.position.x - 10) / 5;
int currentJ = (int)(transform.position.z - 10) / 5;
for (int i = 0; i < bf.len; i++)
for (int j = 0; j < bf.len; j++)
{
BattlePlace bp = bf.battleArray[i][j].GetComponent<BattlePlace>();
if ((bp.iThis == currentI) && (bp.jThis == currentJ))
{ bp.inThisPlace = me; Debug.Log(bp.iThis); }
}
}
}
Проблема следующая:
1. Он тупо не находит клетку со своими координатами (свои определяет правильно)
самый простой способ
BattlePlace bp=bf.battleArray[curentI][curenJ].GetComponent<BattleField>();
тоже ничего не даёт.
2. При смещении координат начала отрисовки матрицы при первой компиляции последняя клетка рисуется на старом месте
3. В справочники по Unity сказано
"Кроме того, если объявить переменную с доступом public и заданным типом компонента в вашем скрипте, вы сможете перетащить любой объект, который содержит присоединенный компонент такого типа. Это позволит обращаться к компоненту напрямую, а не через игровой объект."
Как это сделать?
Добавлено (19 октября 2015, 20:51)
---------------------------------------------
Да ещё, как в компоненте (читай скрпте) получить ссылку на объект, к котрому он прикреплён