Game制作入門 day10
Unity Pathway
Explore Unityの最後。実際の業界での役割やポジション、キャリアパスなど。
- The real-time industry
- The real-time production cycle
- Roles and careers for real-time creators
特にUnity関係で働くといった志向はないけど面白かった。
ブロック崩しの続き
アセットを適用する
白い要素のみだと味気ないのでアセットを適用してみた。
アセットストアでフリーアセットを探して、適当にポチポチやった。雰囲気は変わったけど、まったくポリシーがないからかなんだかよくわからない感じになった。
ブロックをタイルマップで表示しているが、アセットを適用したスプライト周りの描画にやや難があり、多分タイルマップでやらないほうがいいんだろうな〜と感じた。動的な操作を考えると最初から全部動的にしたほうがよさそう。ブロックの種類が増えるなどの事を考えると、座標空間に対応する二次元配列で値を持つのがよいかもしれない。
効果音をつける
ボールが壁にぶつかったときや、ブロックを破壊したときなどに効果音をつけたくなった。
最初はAudioSourceコンポーネントをGameObjectに追加して、どうのこうのとやっていたが、AudioSource.PlayClipAtPoint
を使えばどこからでも再生できるとわかった。
ゲームクリア判定を直す
タイルマップにしたときに、ゲームクリア判定をコメントアウトしていたのを忘れていた。もともとはGameManagerという全体を管理するクラスで、ブロックの配列を参照し、全て破壊されたらクリアという判定をしていたが、タイルマップになったのでそういった処理はできなくなった。
そこでタイルマップのオブジェクトを参照して、その子オブジェクトの数を見ることで解決した。
public GameObject tileMap; private bool DestroyAllBlocks() { return tileMap.transform.childCount == 0; }
やればやるほどやること増える。けど面白い
Game制作入門 day9
Unity Pathway
- Challenge: Moving sound
3Dサウンドの演習。動くオブジェクトに3Dサウンドを設定し、ドップラー効果を試すというもの。オブジェクトが往復するようにスクリプトを書いた。オブジェクトがターンするときに速度が反転して、ドップラー効果が効きすぎてしまうので、線形補間みたいなことをやりたかったけど諦めた。
2D系
- Work with GameObjects in a 2D Scene
- Add components to 2D GameObjects
- Get 2D assets
- Challenge: Sprite pachinko
一気に演習まで。基本的なことは3Dとほぼ同じだった。RigidBody2DたColliderなどの設定をして、パチンコみたいなのを作った。
Game制作入門 day8
Unity Pathway
今日は少しだけ。
- Essentials of real-time audio
- Add background music
- Create real-time 3D audio effects
- Get audio assets
音声周り。ちょうどブロック崩しでもタイトルの音楽だとか効果音をつけたいと思っていたのでちょうど良い。
Game制作入門 day7
一日開けてしまった。
Unity Pathway
日本語設定を混じるとなんだか進捗管理が変になるらしく苦労した。英語に戻して続行。
- Essentials of programming in Unity
- Code in the default script
- Change a GameObject with script
C#スクリプト周り。VS Code Integrationを有効にしていなかったので、有効にしたら少し補完がマシになった気がする。Update関数でのオブジェクトのTransformで、床を回転させたり、ボールを大きくさせるなどした。
ブロック崩し ブロックをタイルマップにする
公式のマニュアルを見たが全くわからなかった。
色々調べながらなんとか動かせたが、最初は何らかの画像をタイルマップとして並べることを考えていた。適当にアセットストアから2Dの画像類を持ってきて配置してみたが、ブロックとしての振る舞いを持たせる方法がわからず、色々と調べた結果、GameObjectBrushというものを使って、Prefabを並べる方法にした。
これでボールがぶつかると消えるブロックをタイルに従って任意の位置に簡単に配置できるようになった。見た目はPrefab側にセットすれば反映されるので、とりあえず今回はプレーンなまま。ついでにブロックやボール、自機のサイズを調整した。
気になるのは、GameObjectBrushによるタイルマップの配置は、GameObjectがSceneに大量に配置されてしまう点だ。振る舞いを持つものだしこれはこれでいいのか??
そろそろSEが欲しいけど、他にも画面サイズ周りが気になっている。
Game制作入門 day6
Unity Pathway
今日はちょっと忙しかったのでPathwayだけ。
練習問題:地面は溶岩! learn.unity.com
プロジェクトの公開
WebGL Publisherパッケージをインストールしてなくてパブリッシュ周りでちょっと手間取った。
オブジェクトを配置し、ボールにRigidBodyを追加して転がした。跳ね返るオブジェクトの配置は、実行と調整を繰り返した。反射の軌道を確認してオブジェクト移動して、の繰り返しはなかなか骨が折れた。実行しなくても反射の軌道が分かると嬉しいが、そういうプラグインだかなにかはあるんだろうか??
Game制作入門 day5
Game制作入門 day4
Unity Pathway リアルタイム 3D の基礎
なんだか知らないけど、急に日本語になったので捗る。次のコースを実施
- 3D シーンでゲームオブジェクトを使って作業する
- プリミティブで建物を作成する
ブロック崩しのタイトル画面を作る (+シーンの移動)
新しいシーンを作り、文字とボタンを表示した。空のゲームオブジェクトにC#スクリプトを追加し、GameStart関数を置いた。あとはボタンのクリックイベントでこの関数を呼び出してシーンを切り替えた。
public void GameStart() { SceneManager.LoadScene("SampleScene"); }
なんとなくシーン切り替えってもっといい方法あるんじゃないかって気はしつつ今はまだその辺知らないのでこれはこれでという感じだ。
シーンが2つになったので、ビルドセッティングにシーンを追加し、タイトル画面のオーダーを上に持ってきた。これで起動時にタイトル画面が出るようになった。
ちょっとずつだが、なんとなくこうしたら動くかな、といったことのイメージが湧くようになってきた。しかしその方法がベストプラクティスなのかでいうと多分違うんだろうな~と感じるので、まだまだなにかを作り込むのはやめておいたほうがよさそうだ。
2Dの物理演算そのままではボールが適切に跳ね返らない
現在はボールを無重力にして、最初に一定の力で打ち出してそれっきりにしている。そうすると壁やブロックなどに当たった時に、Physics Material 2Dのデフォルトのなにかで跳ね返りが計算されているようで、壁に対してボールが水平になってしまったりする。こうなるとどのように自機で跳ね返しても復帰ができない。
なんとなくOnCollisionEnter2D関数当たりでなにか工夫が必要なのだろうけど、壁側でやるといいのかボール側でやるといいのか悩ましい。おそらくボール側が適切そうだ。ボール側で状態を管理すれば、例えば反射した回数をカウントしてスピードを上げるといったこともできるので、できるだけボールの制御はボールが持つスクリプトでやるのが良い気がする。