こんにちは、shiguregakiです!
先日、「Unityの教科書 Unity 2019完全対応版 2D&3Dスマートフォンゲーム入門講座」を読み終え、チョー基礎ですがUnityでのゲーム作りの流れを学ぶことができたと思っています。
せっかくなので、ここで1つのゲームを一から作ってみようと思い、「3D玉転がし」ゲームを作ることに決めました!
前回のブログ(【Unity 勉強5】3D玉転がしゲームを作ってみる!(その1))で「3D玉転がし」の簡単な設計を行い、以下のような工程で進める方針となりました。
【3D玉転がしの開発工程】
- 実現方法の検討
- デザインの検討
- デザインの作成(必要あれば)
- プロジェクトの作成
- 外枠の作成
- 操作部分(押し出し棒、ばね)の動作作成
- ビー玉の動作作成
- ステージ(釘や得点スポット)を作成
- Prefabを作る
- 監督スクリプトの作成
今回は「1. 実現方法の検討」をしたいと思います。
ソースコード自体は、以下で公開していますので、よろしければご覧ください。
全行程は以下のブログでまとめているので、よろしければご覧ください。
目次
3D玉転がしとは?
小学校の図工のときに作ったあれ ↓ です。
玉転がしゲームB(ビー玉あそび)
Amazon 楽天
これをUnityで作ろうと考えていますが、Unityチョー初心者なのでどうやって実現するのか見当がつかない状況です。。。
そのため、ゲームを作る前の下準備として、以下の実現性を検討したいと思います。
【実現方法の検討】
- バネの動きの出し方
- ビー玉の動きの出し方
バネの動きの出し方 をどうするか考える
まずは、ググってみる
- 【Unity】バネの動きを実現する3つの方法 | おもちゃラボ
- 「Spring Joint2Dを使う方法」、「Animationを使う方法」、「スクリプトを使う方法」が紹介されている。
- サンプルプログラムも載っていて参考になる。
- 記事読んだ限り、Physicsの「Spring Joint」では簡単に実現できそう。
- スクリプトは自由度が高そう。
- 「Spring Joint」は3Dのものもあるみたいなので3Dゲームでも適用できそう。
- UnityのSpring Jointを使う | Qiita
- 「Spring Jointを使う方法」をかなり詳しく紹介されている。
- サンプルプログラムも載っていて参考になる。
バネの動きを作ってみる
上のサイトで紹介されていた
- Spring Jointを使う方法
- スクリプトを使う方法
の2つの方法を試しに作ってみました。
【Spring Jointを使う方法】
棒と下の床の間に「Spring Joint」を設定しており、マウスのドラッグ距離に応じた力がバネにかかるようにしています。
バネっぽい動きになっているのではないでしょうか!?
ソースコードは以下で公開しているので、よろしければご覧ください。(MITライセンス)
https://github.com/shiguregaki/study_unity/tree/master/01_SpringPushStick
シーン名:「BySpringJoint」
【スクリプトを使う方法】
バネの動きはフックの法則によって計算しており、初期位置からの距離に比例した力が棒にかかるようにしています。
また、空気抵抗がないとずっと振動しつづけてしまったので、棒の「Rigidbody」に空気抵抗Dragを設定することで徐々に振動が小さくなるようにしています。
少しバネの動きがぎこちない気がします。。。
パラメータをいろいろ調整すれば使えそうです。
ソースコードは以下で公開しているので、よろしければご覧ください。(MITライセンス)
https://github.com/shiguregaki/study_unity/tree/master/01_SpringPushStick
シーン名:「ByScript」
以下のブログでバネの動きを出すために調査した内容をまとめたので、よろしかったらご覧ください。
3D玉転がしに向けて、、、
「Spring Joint」を使えば楽にバネの表現をすることができそうです。
ただ、使い方が悪いのかたまに大暴走したりするので、いろいろいじってチューニングしていく必要がありそうですね。。。
一方、スクリプトでバネの動きを表現するのはコードを書く必要があるのですが、カスタマイズはしやすいように思います。
3D玉転がしに向けては、Unityの勉強を兼ねているので「Spring Joint」のような汎用的な機能を使って作成することにしました。
ビー玉の動きの出し方 をどうするか考える
まずは、ググってみる
- 玉転がし | Unity Learn
- Unity Learnで紹介されている玉転がしのチュートリアル
- Unity IDがあれば無料で見られる
- 英語の動画だけど、英語不得意ならコガネブログさんのブログを見ると良さそう
- 【Unity 入門】【チュートリアル】玉転がしゲームを作る | コガネブログ
- 「玉転がし | Unity Learn」を和訳して、詳しくまとめている。
- 玉は「Sphere Collider」、転がる動作は「Rigidbody」を使っているみたい。
- 壁や釘との衝突しても跳ね返りはないため、衝突時の動作はもう少し考える必要がありそう。
- 【Unity】ブロック崩し(3D)の制作手順を解説!反射角度・速度調整・クリア判定まで
- Physic Material(物理特性マテリアル)を使った跳ね返りや摩擦を表現できそう。
ビー玉の動きを作ってみる
上のサイトで紹介されていた
- Rigidbodyによる玉転がし
- Physic Material(物理特性マテリアル)による玉の跳ね返り
の動作を試しに作ってみました。
【Rigidbodyによる玉転がし】
壁、玉、釘に「Rigidbody」を設定しており、重力や衝突の物理動作を行えるように設定しています。
上の動画のように、「Rigidbody」のみでは衝突時の跳ね返りが表現されず、玉の上に釘の上に乗ってしまったり、壁と衝突しても跳ね返らず壁に沿って転がってしまいます。
そのため、「Rigidbody」のみではビー玉と釘が衝突時の動作を表現をするのは厳しそうだということが分かりました。
ソースコードは以下で公開しているので、よろしければご覧ください。(MITライセンス)
https://github.com/shiguregaki/study_unity/tree/master/02_RollBall
シーン名:「RollBall-UnityLearn」
【Physic Materialによる玉の跳ね返り】
「Rigidbody」のみではビー玉と釘が衝突時の跳ね返りが表現されないことが分かったので、「Physic Material」を使って、跳ね返りを表現できるようにしました。
壁、玉、釘のオブジェクトに「Physic Material」を設定しました。
上の動画のように、「Rigidbody」に「Physic Material」を追加することでオブジェクトの跳ね返りが表現できました。
ソースコードは以下で公開しているので、よろしければご覧ください。(MITライセンス)
https://github.com/shiguregaki/study_unity/tree/master/02_RollBall
シーン名:「RollBall-PhysicMaterial」
以下のブログでバネの動きを出すために調査した内容をまとめたので、よろしかったらご覧ください。
3D玉転がしに向けて、、、
「Rigidbody」のみではビー玉と釘が衝突したときの跳ね返りが表現されず、思っていたビー玉の表現をさせることができませんでしたが、そこに、オブジェクト間の跳ね返りや摩擦を表現できる「Physic Material」を設定することで、思っていたビー玉の動きを表現できました。
3D玉転がしに向けては、「Rigidbody」+「Physic Material」でビー玉の動きを表現するようにしたいと思います。
まとめ
3D玉転がしに向けて「バネの動きの出し方」と「ビー玉の動きの出し方」について検討しました。
「バネの動きの出し方」は「Spring Joint」というUnityの標準機能を使って表現できそうだということが分かりました。
「ビー玉の動きの出し方」は「Rigidbody」+「Physic Material」と組み合わせて使用することでビー玉と釘や壁の衝突時の跳ね返りを表現できそうだということが分かりました。
動きの実現性についてはある程度めどが立ったと思うので、今後は次のフェーズである「デザインの検討」に入っていきたいと思います。
関連動画
次の工程
前の工程
全行程
広告
Unityを初めて勉強するなら「Unityの教科書 Unity 2019完全対応版 2D&3Dスマートフォンゲーム入門講座」がオススメです!
全くUnityが分からなかった状態でも概要を理解することができました。
Unityの教科書 Unity 2019完全対応版 2D&3Dスマートフォンゲーム入門講座
Amazon 楽天
以上!
コメント