脳の足りないプランナーがUnityをお勉強するブログ

ゲーム作れるようになりたいけど飽きっぽいのでブログに記録していくよ。

アングリーバード風アプリ(始める前に)

ゴールデンウィークは海外旅行に行ってました。

 

訳あってアングリーバード風なゲームを作ってみたい。

どっちがいいんかな

Angry Birds Clone in Unity 3D (source code included) - Scenes From A Developer Memory - Site Root - StudentGuru

 

【Unity】アングリーサンタを作ろう - Qiita

---

後者にしよう。

 

ドーザーアプリを作ってプレファブとエフェクトを学ぶ⑥(完成)

今日はパーティクルでエフェクトをつけるよ。

---

パーティクルおもしれー(・∀・)

これで水でも炎でも表現できるとか凄すぎ。

で、パーティクルはオブジェクトをシーン上に生成するだけで再生されるけど、オブジェクト自体はパーティクルの再生が終わってもずっと残ったままなので、エフェクトオブジェクト自体に再生が終了したら自分自身を削除させるんだって。すごい背徳感あっていい。

 

---

Instantiate関数で動的にオブジェクトを生成するって③の記事の時にやったけど、分からないままだったのでここで調べておく。

unitygeek.hatenablog.com

>nstantiateの引数は、複製したいオブジェクト(Object)、位置(Vector3D)、回転(Quaternion)。

引数という言葉の概念を理解した私にはこの説明が何を言っているのか分かるぞ!

---

しかし、ちょくちょくコード内に出てくる「other.gameObject.tag」みたいなのはどういう意味?

wonderpla.net

docs.unity3d.com

要するに今作っているスクリプトだとOnTriggerEnterのパラメーターで、トリガー担ってるオブジェクトに入ってきた他のオブジェクトのことを指しているんですな。

 

---

次はサウンドの再生。

 

・Audio SourceコンポーネントにあるAudio Clipにサウンドファイルをくっつける。Play On Awakeにチェックを入れていると、オブジェクト生成時に音がなるようになる。

 

・Play On Awakeじゃなくてスクリプトから再生するにはPlay関数を呼び出す。

 

・あと最近はCRIを使っていたのであまり意識をしていなかったけど、Unityに直接オーディオクリップを設定するので最終的にはPCM, Vorbis, ADPCMっていうUnityのいずれかの圧縮形式で圧縮されるので、外部のツールで圧縮してからインポートするのではなく、非圧縮のファイルをインポートしてUnity側に圧縮を任せたほうがいい。

 

・Audio Mixerを使う。Audio Mixerもアセット扱いなので、ここで作ったグループを各Audio SourceコンポーネントのOutputパラメータに設定する。

Masterを選択した状態でグループを作る。親子関係に注意。

f:id:likewood84:20160428012345p:plain

---

これで第4章はおしまい!

f:id:likewood84:20160428013119p:plain

エフェクトと音がつくと楽しくなるね。

ドーザーアプリを作ってプレファブとエフェクトを学ぶ⑤

今日からはゲームロジック的な制御を追加。

とりあえず覚えた言葉を使ってみることで覚えようとしているよ。

---

"const"ってよく出てくるよね

ufcpp.net

const を付けて宣言された定数は、 その他の場所で値を書き換えることは出来ない。

 

---

"void"もよく出てくるよね

qiita.com

この記事がすごいありがたい。

ひとつの.csファイルでは、ファイル名と同じクラスをひとつだけ宣言するルール。

 

---

「引数」っていうのを理解していないので調べる。

www.relief.jp

ここに記載されていた

> 計算を行う際に関数に指定しなければならないもの
> 関数名の後ろの()内に指定する
> 何を指定するかは関数によって異なる

この例えがすっごい分かりやすかった。

 

---

コルーチン関数というものを使う。

コルーチンをStartCoroutine関数を使ってスタートさせて、内部でyieldを宣言してWaitForSecondsを使う。これでカウンターを作る。

 

---

OnGUIってのとfor文がよく分かんないぞ。

UnityをC#で超入門してみる #4 GUIの章 - Qiita

 

UnityをC#で超入門してみる #3 計算の章 - Qiita

for文

この辺参考にした。

 

---

今日はこの辺まで。

f:id:likewood84:20160427020504p:plain

キャンディの残数制限と回復ルール、連続ショット制限が入った。

スクリプト少しずーつ分かるようになってくるの面白い。

ドーザーアプリを作ってプレファブとエフェクトを学ぶ④

今日はスクリプト日和になりそう。

---

■shooterの改良

・丸いキャンディは3回に1回の頻度

・色はランダム

・タップした位置によって投入位置を連動させる

・オブジェクト動的生成と同時に自動でCandy Holderオブジェクトの子にする

---

そろそろC#の中身が分からなくなってきたのでこちらを読む

初心者のためのC#プログラミング入門

 

bool型ってのは変数の型だったのね。真偽型。

「%」は四則演算で左辺を右辺で割った余りを得る。

…そうか!GameObjectってfloatやintと同じように型だったのね。

制御構文とな。if / switch / do / while / for / foreach …foreachめんどくさい!あとで読む

…継承のあたりでもうワケワカランくなってきたけどまぁ後で分かるようになるやろ。

---

と、ここまで読んでもう一度shooterのスクリプトを見返す。

ムスカ「読める…読めるぞぉ……!」

とまでは行かないまでも、なんとなーく「何を言おうとしているのか」は見えてきた。関数とかは全然覚えていないけど。

---

生成されたオブジェクトをDestroyするスクリプト作って、今日はここまで。

f:id:likewood84:20160425011326p:plain

わーい色とりどりだぞー

ドーザーアプリを作ってプレファブとエフェクトを学ぶ③

今日はプレファブから。

球体のキャンディを作る。

 →RigidbodyのAngular Drag(回転に対する空気抵抗)を設定して転がりすぎ防止。

・HierarchyビューからProjectビューにオブジェクトをドラッグ&ドロップすると、プレファブ化できる。簡単だね。

Assetにあったモデルデータをゲームビューにドラッグ&ドロップした時も Hierarchyビュー内の文字は青色だったけど、これはモデルデータと紐付いていたことを表しているのでプレファブ化されていたわけではないらしい。間違えそう。

 

・Mesh Colliderはオブジェクトの見た目通りのコライダーになる。ただしConvexにチェックを入れないと他のMesh Colliderと衝突判定がされないんだって?なるほど?(ただし三角形面数が255以下の場合のみ)

 

・複雑な形のものは、単純な形のコライダーで代用したほうが計算負荷を軽減できる。

 

・シーン上に配置されたプレファブをシーン上で編集すると、プレファブから参照しているパラメータに上書きされる(オーバーライド)。この場合、元のプレファブの値を変更してもオーバーライドした値の方が優先される。オーバーライドされてるパラメータはInspectorビュー上でふと文字で表示される。

 

・オブジェクトの動的生成にはInstantiate関数を用いる。いんすたんす化・・・?はて・・・。

 

・ここを参照して調べながらキャンディを打ち出すスクリプトを作成。

Unity - スクリプトリファレンス:

AddForce関数にTransformコンポーネントのforwardパラメータを渡し、

AddTorque関数には引数にVector3の値を指定する。

f:id:likewood84:20160423193317p:plain

キャンディめっちゃ出るようになった。

まだ丸いのしか出ないので全然プッシュされない。

夕飯食べるのでまた今度〜

ドーザーアプリを作ってプレファブとエフェクトを学ぶ②

今日も眠いよ。

---

昨日はステージのオブジェクトを作ったので

今日はそこに装飾をつけていくところから。

 

既存の3Dモデルをインポートして配置。

QuadとPlaneはどう違うの?という疑問に答えてくれたサイトがこちら。

tsuwabuki.hatenablog.com

そうか、メッシュって頂点と三角形で構成されているものなのね。

QuadオブジェクトのPositionを貼り付けたい壁と全く同じ座標にすると表示が安定しないので、0.01だけずらす。

 

カメラとライトを調整して、いよいよプッシャーの実装。

オブジェクトを配置して、あとは繰り返し動くスクリプトをつける。

ここでUnityのスクリプトリファレンスの使い方を少し理解。

 TransformクラスのlocalPosition関数

 MathfクラスのSin関数

 Timeクラスのtime関数

こういう感じね!(分かった風

 

Pusherオブジェクトにさっきのスクリプトをつける。

Rigidbodyを持つオブジェクトに影響を与えたい場合は

スクリプト側で動かすオブジェクトにもRigidbodyを付けるといい。

さらに、物理演算による影響を受けないようにIs Kinematicにチェックを入れる。

Unity - マニュアル: Rigidbody

---

今日はここまで。

試しにゲームプレビューしてみた

f:id:likewood84:20160420014317p:plain

プッシャーがそれっぽく動いてるー!これはテンション上がる

ドーザーアプリを作ってプレファブとエフェクトを学ぶ①

前回音をつけられなくてしょんぼりしたけどめげずに先に進む。

Unity5 3D/2Dゲーム開発実践入門 作りながら覚えるスマートフォンゲーム開発

Unity5 3D/2Dゲーム開発実践入門 作りながら覚えるスマートフォンゲーム開発

 

今回はこれの第4章をやっていくよ。

っていうか今夜中の2時なんだけど、1日1回はUnity触らないとすぐ忘れそうだからね。少しずつでも触って記録していくよ。

---

本に付属されているUnityパッケージをインポートしてステージを作るところまでやって寝よう。明日も仕事だ。

いつも通りCubeでステージを作る。

MaterialのAlbedoにテクスチャを設定するのは初めてだ。学び。

 

Projectタブが階層構造で表示されないの微妙に不便だったので

表示をTwo Columun LayoutからOne Column Layoutに変更。

これでHierarchyとProjectが同じような表示になってスッキリ。

 

Tillingを設定すると、1枚のテクスチャーをその数だけ並べたマテリアルになるので、小さい画像サイズで大きい領域を表現できて容量の節約に有効。

----

眠いのでここまで。

おやすみー。