void Update() //попытка закрепить здание или вызвать у уже имеющегося здания информацию { if (_newBuilding != null) { // создаем луч на основе позиции мыши и компонента камеры,принадлежащей текущему объекту Ray ray = _camera.ScreenPointToRay(Input.mousePosition); RaycastHit hit; //будет содержать результат "бросания" луча в пространство сцены if (!Physics.Raycast(ray, out hit)) // Если не попали в какой-либо объект { return; } GameObject go = hit.collider.gameObject; //выбранный объект FloorElement floorElement = go.GetComponent <FloorElement>(); //выбранный объект оказался не плиткой пола или часть клеток уже заняты if (floorElement == null) { return; } _newBuilding.indexX = floorElement.indexX; _newBuilding.indexY = floorElement.indexY; //ставьм строение в нужное место Vector3 delta = new Vector3(0, FloorElement.length / 2, 0); if (_newBuilding.size % 2 == 0) //сдвиг в из-за несимметричности четного коичества кубов { delta += new Vector3(FloorElement.length / 2, 0, FloorElement.length / 2); } _newBuilding.gameObject.transform.position = floorElement.gameObject.transform.position + delta; _newBuilding.isCorrectPosition = _floorController.CanPosition(floorElement.indexX, floorElement.indexY, _newBuilding.size, false, false); } }
void Create() { _floorElements = new FloorElement[length, length]; Transform parent = gameObject.transform; for (int i = 0; i < length; i++) { for (int j = 0; j < length; j++) { Transform go = GameObject.Instantiate(_prefab.transform); go.SetParent(parent); go.position = new Vector3(i * FloorElement.length, 0, j * FloorElement.length); _floorElements[i, j] = go.gameObject.GetComponent <FloorElement>(); if (_floorElements[i, j] != null) { _floorElements[i, j].isFree = Random.Range(0, 100) >= _firstBusyPercent; _floorElements[i, j].indexX = i; _floorElements[i, j].indexY = j; } } } }