サイコロを振る(前編)
サイコロを振る(前編)2022年02月11日
サイコロを振って、毎回異なる目が出るように、スクリプト作成しましょう。
振るたびに違う目がでるように、サイコロを投げたときに、回転角がランダムで変化するように作っています。
クリックするたびに、新しいサイコロが振り出されます。
※今回の記事は、前編、後編の2つに別れています。
後編では、サイコロの出た目の数を取得するしくみを作っています。
サイコロを振る(後編)
サイコロのPrefabを作成
今回は「Dice d6 game ready PBR」というフリーのアセットを使用しました。
Dice d6 game ready PBR https://assetstore.unity.com/packages/3d/props/tools/dice-d6-game-ready-pbr-200151
Planeを作成し、大きめサイズに変更します。
カメラの位置と向きを変え、見下ろすような位置に調整します。
Dice d6 game ready PBR」のPrefabフォルダから、サイコロを一つ、ドラッグ&ドロップして、シーンビューに入れます。
サイコロのオブジェクトに、リジッドボディを追加します。
振ったあとのサイコロを、クリックのたびに消せるように、スクリプトを作成しましょう。
DiceDelete.csを作成し、サイコロのオブジェクトに追加します。
DiceDelete.csを記述します。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class DiceDelete : MonoBehaviour { void Update() { if (Input.GetMouseButtonDown(0)) { Destroy(gameObject); } } } 123456789101112131415 using System.Collections;using System.Collections.Generic;using UnityEngine; public class DiceDelete : MonoBehaviour{ void Update() { if (Input.GetMouseButtonDown(0)) { Destroy(gameObject); } }}
サイコロのオブジェクトを、プロジェクトビューにドラッグ&ドロップして、Prefabデータにしましょう。
原型プレハブを選択します。
サイコロの元データは削除しておきます。
これで、サイコロの準備は完了しました。
サイコロを投げるたびに角度を変える
続いて、サイコロを投げる仕組みをつくりましょう。
空のオブジェクトを作成します。
DiceThrow.csを作成し、GameObject(空のオブジェクト)に追加します。
DiceThrow.csを記述します。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class DiceThrow : MonoBehaviour { public GameObject prefab; private int rotateX; private int rotateY; private int rotateZ; void Update() { if (Input.GetMouseButtonUp(0)) { rotateX = Random.Range(0, 360); rotateY = Random.Range(0, 360); rotateZ = Random.Range(0, 360); GameObject dice = GameObject.Instantiate (prefab)as GameObject; dice.transform.position = new Vector3(8, 8, 0); dice.GetComponent<Rigidbody>().AddForce(-transform.right * 300); dice.transform.Rotate(rotateX, rotateY, rotateZ); } } } 12345678910111213141516171819202122232425 using System.Collections;using System.Collections.Generic;using UnityEngine; public class DiceThrow : MonoBehaviour{ public GameObject prefab; private int rotateX; private int rotateY; private int rotateZ; void Update() { if (Input.GetMouseButtonUp(0)) { rotateX = Random.Range(0, 360); rotateY = Random.Range(0, 360); rotateZ = Random.Range(0, 360); GameObject dice = GameObject.Instantiate (prefab)as GameObject; dice.transform.position = new Vector3(8, 8, 0); dice.GetComponent<Rigidbody>().AddForce(-transform.right * 300); dice.transform.Rotate(rotateX, rotateY, rotateZ); } }}
左クリックを離したタイミングで、サイコロを新しく生成し、左に向かって投げるしくみを作っています。
生成のときに、サイコロの回転角(X軸、Y軸、Z軸)をランダムで変化させています。
プレハブのフィールドに、サイコロのPrefabデータを入れます。
ゲームプレイして、クリックしてみましょう。
クリックするたびに、古いサイコロは消え、新しいサイコロが振り出されます。
後編では、サイコロの出た目の数を取得できるようにします。
後編へ続く:サイコロを振る(後編)
この記事の監修・専門指導 枚方市のプログラミング専門スクール フタバゼミ 枚方くずは校
この記事で解説したUnityやC#の技術も、当校では直接個別指導しています。「むずかしいことをおもしろく」をモットーに、初心者から本格開発までサポート。樟葉駅から徒歩1分、まずはお気軽に体験会へお越しください。
枚方校の詳細を見る 無料体験に申し込む 関連記事- ビルドの画面サイズ
- 静止中のオブジェクトをクリックで飛ばす
- 触れている相手に一定間隔で力を加える
- 特定の座標まで行けば跳ね返る
- 倒れる方向をランダムにする
- クリックした位置に力を加えて弾く
- 3DのTextMeshProをスクリプトで操作
- Random参照エラーの解決法
- 1秒おきに座標をランダムにして落下
- ジャンプの方向をランダムにする