おはようございます。

 

Blenderで作ったサイコロをUnityで表示。

タイトル画面で1以上のサイコロを振る設定をし、実際に複数のサイコロを振り効果音が鳴るところまで前回作りました。

 

今回は効果音の調節をできるようにしました。

↓画面右側に効果音量調節のスライダーを付けました

ついでに背景を変えました。

静止画ではわからないですがサイコロを中心にカメラが回転するようにしました。

 

で、100個のサイコロを何回も振っていてわかったのですが傾いて静止しているサイコロの面の判定に偏りがあり、1と6が多く出ることに気が付きました。

 

 サイコロのローカルxyz軸とワールドY軸を比べてどのローカル軸が上を向いているかでサイコロの出目を判定しています。それがうまくない模様。

 

別の方法を考えました。

 

6面サイコロの各面の中心部に空(カラ)のオブジェクトを設置(計6個ですね)。

そのオブジェクトの中心部のワールド座標の高さを比べ一番高い面の数値を読み取ることにしました。

====================================

  public GameObject surface1;//1の面の中心部に設置したオブジェクト
    public GameObject surface2;//2の面の中心部に設置したオブジェクト
    public GameObject surface3;//3の面の中心部に設置したオブジェクト
    public GameObject surface4;//4の面の中心部に設置したオブジェクト
    public GameObject surface5;//5の面の中心部に設置したオブジェクト
    public GameObject surface6;//6の面の中心部に設置したオブジェクト

 

    public int result;//転がした結果を入れる変数

    void Update ()
    {
        //各面の中心部のワールドY座標を比べ一番高い場所にある座標を保存
        float highScoreY = surface1.transform.position.y;
        if (surface2.transform.position.y > highScoreY) highScoreY = surface2.transform.position.y;
        if (surface3.transform.position.y > highScoreY) highScoreY = surface3.transform.position.y;
        if (surface4.transform.position.y > highScoreY) highScoreY = surface4.transform.position.y;
        if (surface5.transform.position.y > highScoreY) highScoreY = surface5.transform.position.y;
        if (surface6.transform.position.y > highScoreY) highScoreY = surface6.transform.position.y;

 

        //一番高いワールドY座標を持っていた面の

    //オブジェクトの名前を探し出し、surfaceNameにいれる
        string surfaceName=null; //string型はnullででも初期化しないとエラーになる
        if (surface1.transform.position.y == highScoreY) surfaceName = surface1.name;
        if (surface2.transform.position.y == highScoreY) surfaceName = surface2.name;
        if (surface3.transform.position.y == highScoreY) surfaceName = surface3.name;
        if (surface4.transform.position.y == highScoreY) surfaceName = surface4.name;
        if (surface5.transform.position.y == highScoreY) surfaceName = surface5.name;
        if (surface6.transform.position.y == highScoreY) surfaceName = surface6.name;

 

        //面のオブジェクトの名前(例:surface1 surface2 surface3 ...)
        // の7番目の文字の後の文字をstringTargetに入れる
        string stringTarget = surfaceName.Substring(7);

 

        //string型の数字をint型になおしてint型のresultにいれる
        result = int.Parse(stringTarget);

 

        //result(出目)を表示
        Debug.Log(result);
    }

====================================

 

激しい出目の偏りも無くなったし、これでおそらくOKだとおもいます。

 

次はアプリのアイコンでも作ろうかな。

 

今回はここまで、またね。(。・ω・)ノ゙