Среда, 04 Декабря 2024, 11:21

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Помогите разобраться с кодом.
FearelesДата: Понедельник, 19 Октября 2015, 20:51 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Есть значит персонаж, стоящий на клетках, в каждой из которой такой вот код

Код
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)
---------------------------------------------
Да ещё, как в компоненте (читай скрпте) получить ссылку на объект, к котрому он прикреплён


Делаю игру на unity 3d
https://vk.com/ser_gunnar
GameDev2Дата: Понедельник, 19 Октября 2015, 22:34 | Сообщение # 2
почетный гость
Сейчас нет на сайте
Свой код только ты поймешь =)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг