// 実際にコマを置く public void putPiece(PieceType pieceType, int x, int y, int z) { PieceController pieceController = gameController.pieceObjArray [x, y, z].GetComponent <PieceController> (); Piece piece = gameController.pieceArray [x, y, z]; pieceController.gameObject.SetActive(true); pieceController.ShowPiece(); pieceController.ChangeMaterial(pieceType); piece.SetPieceType(pieceType); MyAudio.put2SoundFlug = true; }
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; } } } } } }