現在作成中のスマホアプリのあるシーン用に、回転する的に矢を当てる、いわゆるダーツのようなシーンを作ったので、作り方を簡単に書き残しておく
◆作ったもの
◆機能、ポイント
1 的が回転
Rotate関数で回転
コルーチンの中で、徐々に回転スピードを上げ下げ
2 ダーツの矢を投げる
AddForceで投げている
3 ダーツの矢が的に刺さる
ダーツの矢を、矢が当たったエリアのオブジェクトの子にして、刺さったように見せている
4 刺さったエリアに対応したポイントがマイナスされる
刺さったエリアの情報をSendMessgeで管理用のオブジェクトに送信
◆各機能の実装方法
必要なもの
・的 blenderで自作
・矢 こちらもblenderで自作
・文字 UnityのUI Text
1 的が回転
コルーチンの中で
6,7行目
徐々に加速するために一定のスピードになるまでは、スピードを毎フレーム1.005倍している
12行目
上記とは逆にゆっくり止めるために、一定のスピードになるまでスピードに0.997倍している
22行目
上記で設定した回転速度で回転させる
23行目
高速回転状態になったら、矢を投げられるようにフラグを更新
2 ダーツの矢を投げる
矢が投げられる状態になり、的がクリックされたら、矢を生成(7行目)
AddForce関数を使って投げている(20行目)
矢のゲームオブジェクトは、prefab化されており、Rigedbodyがアタッチされている
3 ダーツの矢が的に刺さる
ダーツの的は、上記のようにエリアごとにオブジェクトが分かれており、それぞれにMeshColliderをアタッチしている
さらにそれぞれに下記のコードをアタッチしてある
的の中の各エリアのコライダーに矢が侵入してきた場合に、
Rigidbodyの作用を停止(18行目)
矢の親オブジェクトを、的の中の矢が当たったエリア(オブジェクト)に設定(19行目)
矢が刺さったこと及び当たったエリアの名前をゲームの管理をしているオブジェクトに通知(21行目)
ルーレットの回転を止めるために、ルーレットの管理オブジェクトに通知(22行目)
4 刺さったエリアに対応したポイントがマイナスされる
送られてきた的の中のエリア情報を照合して、的のエリア分のポイントデータが格納された変数のインデックスを設定して、ポイントを決定している
今回は以上
なお、ダーツの的の矢が刺さった個所の判定方法については、的の色情報で判定するとかもっと負荷の軽い方法がよいかもしれない