うにてぃブログ

主にUnityとC#に関する記事を書いていきます

【Unity】サイコロの上面を判定する

サイコロの出目を知る方法として、角度を求める等あると思いますが
各目の位置に Transform を設置し、各 Transform の y 座標が一番大きな要素を出目として判定してみる

サイコロにはAssetStoreから無料のこちらを利用する

Dice Pack Light | Packs | Unity Asset Store

出目の Transform 登録

1から順番にListに入れ込んでいく
f:id:hacchi_man:20200614023748p:plain:w400

サイコロの回転

回転は angularVelocity に適当な値を入れて回転させる

_rigidbody.angularVelocity = new Vector3(10, 10, 5); 

サイコロの振り

何かキーが押されたら velocity と 重量を加えて振る

   private void Update()
    {
        if (Input.GetKeyDown(KeyCode.UpArrow))
        {
            _rigidbody.useGravity = true;
            _rigidbody.velocity = Vector3.left;
        }
    }

出目判定

RigidBoy が Sleep したら 書く出目のY座標とインデックスを確保しておき
一番Yの値が大きいのをLogに出す

   [SerializeField]
    private Transform[] _diceSpots;

    private void CheckSpot()
    {
        if (!_rigidbody.IsSleeping())
            return;

        var topIndex = 0;
        var topValue = _diceSpots[0].transform.position.y;
        for (var i = 1; i < _diceSpots.Length; ++i)
        {
            if (_diceSpots[i].transform.position.y < topValue)
                continue;
            topValue = _diceSpots[i].transform.position.y;
            topIndex = i;
        }
        Debug.Log(topIndex + 1);
    }
}

動画

停止したタイミングでログが表示されている
f:id:hacchi_man:20200614023923g:plain:w500