Exemplo n.º 1
0
    void Update()
    {
        // 左クリックした際の処理
        if (Input.GetMouseButtonDown(0) && FinishFlug == false)
        {
            // クリックしたスクリーン座標をRayに変換
            // Input.mousePositionにはVector2が入っている
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

            // Rayの当たったオブジェクトの情報を格納する
            // 初期化処理
            RaycastHit hit = new RaycastHit();

            // オブジェクトにrayが当たった時
            // Physics.Raycast関数の引数
            // 第一引数: 当たり判定で使用するRayを飛ばす
            // 第二引数: hitを渡して値を更新してhitを戻すようなイメージ
            // 第三引数: Rayを飛ばす距離(長さ)を指定。Mathf.Infinityで無限。
            // 第四引数: LayerMask。LayerMask型の変数。レイヤーを指定してそのレイヤーにだけRayが当たるようにする。
            if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerMask))
            {
                PieceController pieceController = hit.collider.gameObject.GetComponent <PieceController> ();

                // Rayが当たったコマの情報を取得する
                int x = pieceController.GetDimensionX();
                int y = pieceController.GetDimensionY();
                int z = pieceController.GetDimensionZ();

                Piece piece = pieceArray [x, y, z];

                // コマの情報を取得
                if (piece.pieceType == PieceType.None)
                {
                    // 選択されているコマがない場合
                    if (selectedPieceController == null)
                    {
                        // クリックした時にコマを表示する
                        pieceController.ShowPiece();

                        // 最初にクリックしたら赤色になる
                        pieceController.ChangeMaterial(PieceType.Red);

                        // 音を鳴らす
                        MyAudio.put1SoundFlug = true;

                        // Rayが当たったオブジェクト(pieceController)をプライベート変数に入れておく
                        selectedPieceController = pieceController;


                        // 選択されているコマがある場合
                    }
                    else
                    {
                        // 同じコマを選択した場合
                        if (pieceController == selectedPieceController)
                        {
                            piece.SetPieceType(order);

                            pieceController.ChangeMaterial(order);

                            MyAudio.put2SoundFlug = true;

                            if (SceneChange.gameMode == GameMode.Offline2P)
                            {
                                if (GameCheck(pieceArray) == 1)
                                {
                                    Win();
                                }
                            }

                            selectedPieceController = null;

                            // ターンを変更する
                            if (order == PieceType.Black)
                            {
                                order = PieceType.White;
                            }
                            else if (order == PieceType.White)
                            {
                                order = PieceType.Black;
                            }

                            // アクティブにしたコマが、4段目ではない場合に
                            // アクティブにしたコマの1段上をアクティブにする
                            // オブジェクトは見えないが、コライダーがあるのでRayが当たるようになる
                            if (y < pieceYCount - 1)
                            {
                                GameObject pieceObj = pieceObjArray [x, y + 1, z];
                                pieceObj.SetActive(true);
                            }

                            if (SceneChange.gameMode == GameMode.CpuLevel1 ||
                                SceneChange.gameMode == GameMode.CpuLevel2 ||
                                SceneChange.gameMode == GameMode.CpuLevel3)
                            {
                                cpuGameControlloer.CpuLogic();
                            }
                        }

                        // 違うコマを選択した場合
                        else
                        {
                            // 現在の赤いコマを非表示にする
                            selectedPieceController.HidePiece();

                            // 新しく選択したコマを赤く変更する
                            pieceController.ShowPiece();
                            pieceController.ChangeMaterial(PieceType.Red);

                            // 音を鳴らす
                            MyAudio.put1SoundFlug = true;

                            // Rayが当たったオブジェクト(pieceController)をプライベート変数に入れておく
                            selectedPieceController = pieceController;
                        }
                    }
                }
            }
        }
    }