Unity研究所<Unityによるゲーム開発、映像開発>

Unity初心者40代後半中年中間管理職おやじが綴るゲームで小遣い稼ぎできるようになるまでのブログ

Unity ゲームパーツづくり 回転する的に矢を当てる

現在作成中のスマホアプリのあるシーン用に、回転する的に矢を当てる、いわゆるダーツのようなシーンを作ったので、作り方を簡単に書き残しておく

 

◆作ったもの

f:id:Harukichi:20210104230503g:plain

ダーツもどき

◆機能、ポイント

1 的が回転

 Rotate関数で回転

 コルーチンの中で、徐々に回転スピードを上げ下げ

 

2 ダーツの矢を投げる

 AddForceで投げている

 

3 ダーツの矢が的に刺さる

 ダーツの矢を、矢が当たったエリアのオブジェクトの子にして、刺さったように見せている

 

4 刺さったエリアに対応したポイントがマイナスされる

 刺さったエリアの情報をSendMessgeで管理用のオブジェクトに送信

 

◆各機能の実装方法

必要なもの

 ・的 blenderで自作

 ・矢 こちらもblenderで自作

 ・文字 UnityのUI Text

 

1 的が回転

f:id:Harukichi:20210104231712p:plain

コルーチンの中で

6,7行目

 徐々に加速するために一定のスピードになるまでは、スピードを毎フレーム1.005倍している

 

12行目

 上記とは逆にゆっくり止めるために、一定のスピードになるまでスピードに0.997倍している

 

22行目

 上記で設定した回転速度で回転させる

 

23行目

 高速回転状態になったら、矢を投げられるようにフラグを更新

 

2 ダーツの矢を投げる

f:id:Harukichi:20210104232409p:plain

矢が投げられる状態になり、的がクリックされたら、矢を生成(7行目)

AddForce関数を使って投げている(20行目)

矢のゲームオブジェクトは、prefab化されており、Rigedbodyがアタッチされている

 

3 ダーツの矢が的に刺さる

f:id:Harukichi:20210104233128p:plain

ダーツの的

ダーツの的は、上記のようにエリアごとにオブジェクトが分かれており、それぞれにMeshColliderをアタッチしている

さらにそれぞれに下記のコードをアタッチしてある

f:id:Harukichi:20210104232957p:plain

的の中の各エリアのコライダーに矢が侵入してきた場合に、

Rigidbodyの作用を停止(18行目)

矢の親オブジェクトを、的の中の矢が当たったエリア(オブジェクト)に設定(19行目)

 

矢が刺さったこと及び当たったエリアの名前をゲームの管理をしているオブジェクトに通知(21行目)

 

ルーレットの回転を止めるために、ルーレットの管理オブジェクトに通知(22行目)

 

4 刺さったエリアに対応したポイントがマイナスされる

f:id:Harukichi:20210104234206p:plain

送られてきた的の中のエリア情報を照合して、的のエリア分のポイントデータが格納された変数のインデックスを設定して、ポイントを決定している

 

今回は以上

 

なお、ダーツの的の矢が刺さった個所の判定方法については、的の色情報で判定するとかもっと負荷の軽い方法がよいかもしれない