/// <summary> /// ブロックを並べる /// 同時に生成されたBlockModelをListに格納する /// </summary> /// <param name="xLength"></param> /// <param name="yLength"></param> private void InstantiateBlocks(int xLength, int yLength) { for (int y = 0; y < yLength; y++) { for (int x = 0; x < xLength; x++) { GameObject blockGo = Instantiate(mPrefabBlock, new Vector3(x * BLOCK_SIZE + BLOCK_SIZE_HALF, BLOCK_SIZE_HALF, y * BLOCK_SIZE + BLOCK_SIZE_HALF), Quaternion.identity, transform); BlockModel blockModel = blockGo.GetComponent <BlockModel>(); blockModel.SetPosition(x, y); mBlockList.Add(blockModel); } } }
/// <summary> /// ゲームオーバー /// 全ての爆弾を表示してゲームオーバーフラグを立てる /// </summary> private void GameOver(BlockModel target) { // 全ての爆弾ブロックに通常の爆弾を表示 var bombBlocks = mBlockList.Where(block => block.HasBomb); foreach (BlockModel model in bombBlocks) { model.ShowBomb(false); } // ターゲットのみ特別な爆弾に表示を変更 target.ShowBomb(true); // フラグを立てる IsGameOver = true; }
/// <summary> /// 左クリック /// 対象ブロックを開く /// </summary> public void OnLeftClick(Transform RockPosition) { Debug.Log("ray"); // UIにマウスポインターが重なっている場合はこちらの処理を無効 //if (EventSystem.current.IsPointerOverGameObject()) return; Ray ray = new Ray(RockPosition.position, Vector3.down); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { GameObject go = hit.collider.gameObject; Debug.Log(go); if (go.tag == GameController.TAG_BLOCK) { // 対象が爆弾ブロックか判定 BlockModel target = go.GetComponent <BlockModel>(); Debug.Log(target); if (target.HasBomb) { // チェック済ならば何もしない if (target.IsCheck) { return; } // チェックしていないなら開いてゲームオーバー GameOver(target); } else { // 爆弾でないならば一連の開く処理 OpenBlock(target); // ゲームクリアの判定 JudgeGameClear(); } } } }
/// <summary> /// 左クリック /// 対象ブロックを開く /// </summary> private void OnLeftClick() { // UIにマウスポインターが重なっている場合はこちらの処理を無効 if (EventSystem.current.IsPointerOverGameObject()) { return; } Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { GameObject go = hit.collider.gameObject; if (go.tag == GameController.TAG_BLOCK) { // 対象が爆弾ブロックか判定 BlockModel target = go.GetComponent <BlockModel>(); if (target.HasBomb) { // チェック済ならば何もしない if (target.IsCheck) { return; } // チェックしていないなら開いてゲームオーバー GameOver(target); } else { // 爆弾でないならば一連の開く処理 OpenBlock(target); // ゲームクリアの判定 JudgeGameClear(); } } } }
private void CheckBlock(BlockModel target) { target.ChangeCheckFlg(); }