示例#1
0
    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);
        }
    }
示例#2
0
    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;
                }
            }
        }
    }