Game制作入門 day10

Unity Pathway

Explore Unityの最後。実際の業界での役割やポジション、キャリアパスなど。

特にUnity関係で働くといった志向はないけど面白かった。

ブロック崩しの続き

アセットを適用する

白い要素のみだと味気ないのでアセットを適用してみた。

assetを適用した

アセットストアでフリーアセットを探して、適当にポチポチやった。雰囲気は変わったけど、まったくポリシーがないからかなんだかよくわからない感じになった。

ブロックをタイルマップで表示しているが、アセットを適用したスプライト周りの描画にやや難があり、多分タイルマップでやらないほうがいいんだろうな〜と感じた。動的な操作を考えると最初から全部動的にしたほうがよさそう。ブロックの種類が増えるなどの事を考えると、座標空間に対応する二次元配列で値を持つのがよいかもしれない。

効果音をつける

ボールが壁にぶつかったときや、ブロックを破壊したときなどに効果音をつけたくなった。

nn-hokuson.hatenablog.com

最初はAudioSourceコンポーネントをGameObjectに追加して、どうのこうのとやっていたが、AudioSource.PlayClipAtPointを使えばどこからでも再生できるとわかった。

ゲームクリア判定を直す

タイルマップにしたときに、ゲームクリア判定をコメントアウトしていたのを忘れていた。もともとはGameManagerという全体を管理するクラスで、ブロックの配列を参照し、全て破壊されたらクリアという判定をしていたが、タイルマップになったのでそういった処理はできなくなった。

そこでタイルマップのオブジェクトを参照して、その子オブジェクトの数を見ることで解決した。

clrmemory.com

public GameObject tileMap;

private bool DestroyAllBlocks()
{
  return tileMap.transform.childCount == 0;
}

やればやるほどやること増える。けど面白い

Game制作入門 day9

Unity Pathway

3Dサウンドの演習。動くオブジェクトに3Dサウンドを設定し、ドップラー効果を試すというもの。オブジェクトが往復するようにスクリプトを書いた。オブジェクトがターンするときに速度が反転して、ドップラー効果が効きすぎてしまうので、線形補間みたいなことをやりたかったけど諦めた。

2D系

一気に演習まで。基本的なことは3Dとほぼ同じだった。RigidBody2DたColliderなどの設定をして、パチンコみたいなのを作った。

パチンコ

Game制作入門 day8

Unity Pathway

今日は少しだけ。

音声周り。ちょうどブロック崩しでもタイトルの音楽だとか効果音をつけたいと思っていたのでちょうど良い。

Game制作入門 day7

一日開けてしまった。

Unity Pathway

日本語設定を混じるとなんだか進捗管理が変になるらしく苦労した。英語に戻して続行。

C#スクリプト周り。VS Code Integrationを有効にしていなかったので、有効にしたら少し補完がマシになった気がする。Update関数でのオブジェクトのTransformで、床を回転させたり、ボールを大きくさせるなどした。

ブロック崩し ブロックをタイルマップにする

公式のマニュアルを見たが全くわからなかった。

docs.unity3d.com

色々調べながらなんとか動かせたが、最初は何らかの画像をタイルマップとして並べることを考えていた。適当にアセットストアから2Dの画像類を持ってきて配置してみたが、ブロックとしての振る舞いを持たせる方法がわからず、色々と調べた結果、GameObjectBrushというものを使って、Prefabを並べる方法にした。

gamedev65535.com

これでボールがぶつかると消えるブロックをタイルに従って任意の位置に簡単に配置できるようになった。見た目はPrefab側にセットすれば反映されるので、とりあえず今回はプレーンなまま。ついでにブロックやボール、自機のサイズを調整した。

タイルマップでブロックを配置した

気になるのは、GameObjectBrushによるタイルマップの配置は、GameObjectがSceneに大量に配置されてしまう点だ。振る舞いを持つものだしこれはこれでいいのか??

そろそろSEが欲しいけど、他にも画面サイズ周りが気になっている。

Game制作入門 day6

Unity Pathway

今日はちょっと忙しかったのでPathwayだけ。

  • 練習問題:地面は溶岩! learn.unity.com

  • プロジェクトの公開

learn.unity.com

WebGL Publisherパッケージをインストールしてなくてパブリッシュ周りでちょっと手間取った。

ボールが転がる様子

オブジェクトを配置し、ボールにRigidBodyを追加して転がした。跳ね返るオブジェクトの配置は、実行と調整を繰り返した。反射の軌道を確認してオブジェクト移動して、の繰り返しはなかなか骨が折れた。実行しなくても反射の軌道が分かると嬉しいが、そういうプラグインだかなにかはあるんだろうか??

Game制作入門 day5

ブロック崩し ボールの反射を改善する

調べてみるとドンピシャなものがあったので参考にした。

hu-gsd.com

記事ではVector3を使っているが、Vector2に置き換えるだけで動いた。反射の角度がたまに不自然に感じるときがあるがまぁ一旦いい気はする。

動作の様子

Unity Pathway

Physics Materialという要素が登場した。RigidBodyの動作に調整を加えるらしいが、なぜ分かれているのかイマイチわからなかった。

落下して跳ね返る

Game制作入門 day4

Unity Pathway リアルタイム 3D の基礎

learn.unity.com

なんだか知らないけど、急に日本語になったので捗る。次のコースを実施

  • 3D シーンでゲームオブジェクトを使って作業する
  • プリミティブで建物を作成する

建物を作った

ブロック崩しのタイトル画面を作る (+シーンの移動)

新しいシーンを作り、文字とボタンを表示した。空のゲームオブジェクトにC#スクリプトを追加し、GameStart関数を置いた。あとはボタンのクリックイベントでこの関数を呼び出してシーンを切り替えた。

public void GameStart()
{
    SceneManager.LoadScene("SampleScene");
}

なんとなくシーン切り替えってもっといい方法あるんじゃないかって気はしつつ今はまだその辺知らないのでこれはこれでという感じだ。

シーンが2つになったので、ビルドセッティングにシーンを追加し、タイトル画面のオーダーを上に持ってきた。これで起動時にタイトル画面が出るようになった。

ちょっとずつだが、なんとなくこうしたら動くかな、といったことのイメージが湧くようになってきた。しかしその方法がベストプラクティスなのかでいうと多分違うんだろうな~と感じるので、まだまだなにかを作り込むのはやめておいたほうがよさそうだ。

2Dの物理演算そのままではボールが適切に跳ね返らない

ボールが壁に張り付く

現在はボールを無重力にして、最初に一定の力で打ち出してそれっきりにしている。そうすると壁やブロックなどに当たった時に、Physics Material 2Dのデフォルトのなにかで跳ね返りが計算されているようで、壁に対してボールが水平になってしまったりする。こうなるとどのように自機で跳ね返しても復帰ができない。

なんとなくOnCollisionEnter2D関数当たりでなにか工夫が必要なのだろうけど、壁側でやるといいのかボール側でやるといいのか悩ましい。おそらくボール側が適切そうだ。ボール側で状態を管理すれば、例えば反射した回数をカウントしてスピードを上げるといったこともできるので、できるだけボールの制御はボールが持つスクリプトでやるのが良い気がする。