にゃんたのUnityゲーム開発覚え書き

Unityのゲーム開発についてあれやこれや書いていきます。

素人がUnityでブロック崩し作ってみた - ⑩【完成】

WebGLビルド成功

さらにネットで検索してみたところ、、、なにやらUnityのCloud環境でビルド実行できることが判明したので、以下を参考にビルドしてみた

blog.naichilab.com

 

結果、なんとかビルドするところまでできました!

unityroomにアップしようとしたけど、次回以降作るアプリでアップしてみようと思います!

 

Unityでブロック崩しを作ってみて得たもの

今回Unityで初めてブロック崩しを作ってみて、以下を学びました。

 

  1. シーンの遷移はSceneManeger.LoadScene("シーン名")で遷移可能
  2. 画面のテキスト、ボタンなどはUIコンポーネントを使う
  3. 当たったときの処理は「OnCollisionEnter()」メソッドに書く
  4. Rigidbodyを追加することで、OnCollisionEnter()の処理を使える
  5. Rigidbody内の「Constraints」にチェックを入れることで、軸ごとの移動や回転を禁止できる (指定方向のみ移動させたい場合などに設定)
  6. ボールをバウンドさせるときは、「Physic Material」を設定し、Bouncinessを1にして、ソースコードで何かにぶつかったときに速度のみ戻す処理を追加する
  7. 音を出す場合はAudio Sourceオブジェクトを使う。Audio Source内のAudioClipに実際の音源をドラック&ドロップして音を設定可能。スクリプトから音を実行するときはAudioSource名.PlayOneShot(audioClip名)で可能。
  8. セーブ値には、Playerprefsを使う。Int、Float、String型でデータを格納することができる。Playerprefs.GetInt("変数名")で値の取得可能。※Intは他にFloat、Stringなどがある

 

こんなところですかね。

Rigidbody関連と、Playerprefs関連は結構勉強になった気がする。

 

最後にもう一度完成系です

youtu.be

 

次はAsset Storeにある素材を使ってゲーム開発してみようと思います。

次も頑張りますー!ノシ

【Unity】解決できないエラーにぶち当たったときの参考情報

 

ゲームはできたんだけど

こんにちは、siroです。

前回まででなーんとなくゲームっぽい感じのものはできたので、

いよいよunityroomにアップしてみようかなーと思いWebGL形式でビルドしてみた。

 

WebGLを選択し、Buildボタンぽち!フォルダ選択で開始!!

f:id:sirosiro346:20170917123412p:plain

 

ん?あれ?エラー?

f:id:sirosiro346:20170917123509p:plain

 

エラーを見てみたんだけどさっぱりわからず、、、笑

「Unity WebGL ビルド エラー」で調べてみた。

 

検索結果

結論から言うと、やっぱりよくわからなかった。笑

ここに同じようなエラー出てる人いるんだけど、、、

プラグインインスペクタがそもそもどこにあるかわからないww

Can't build WebGL because of IL2CPP crash - Unity Answers

 

さて、どうしよう

開発を行う上で、今回みたいな一筋縄でいかないようなエラーと遭遇するケースはよくあります。

基本的には自己解決できた方が良いんですが、エラーによってはその手の開発をしていないとわからないようなことも多いです。

 

そんなときは

質問サイトに質問しちゃおう!笑

今回は以下二つに質問してみました。

 

1. Unityユーザー助け合い所

まずは、やっぱりここ。

FacebookのUnityグループです。

非公式なんだけど、ユーザ数も多くて返信早くていい感じです。

https://www.facebook.com/groups/unityuserj/

 

2. teratails

みんな大好きteratailsです。笑

ここはUnity以外にも開発で困ったらとりあえず質問する場所に適しています。

まだサービスができて3年ぐらいなんだけど、かなり頼りになるサイトです。

python勉強していた時もよくここ使っていました。

teratail.com

 

とりあえず、様子を見よう。

一旦質問したので、とりあえず様子を見ようと思います。笑

次のゲーム案構想もはじめるかなー!

 

ではではー

素人がUnityでブロック崩し作ってみた - ⑨

進捗やいかに・・・

こんにちは。siroです。

前回、ゲームシステムがクソじゃね!?と記事を書いてやってみたんですが、いまだにまだクソなままです。笑

※前回の記事は下記

a-zero.hatenablog.com

 

 

ルールの追加

まずは、ルールを追加するために必要な作業?を洗い出してみました。

  1. ゲーム開始時ルールを表示し、ゲーム画面でも確認できるようにする
  2. ブロックが当たった数、壊した数を保存してゲーム画面に表示する
  3. 1と2の数を常に監視し、クリア判定をする処理を追加

 

大まかに言うとここまでの作業が一旦必要。

なので、ルールをテキトーに二つ作り、一旦実現しようとやってみたんですが・・・

 

Unityデフォルトのフォントがださすぎる

まず、ゲーム開始時にルールをだすのでそのUIをつくってたんですが・・・

Unityのフォント1つしかなくて、ださかったのでフリーフォントを適用しました。

適用後の画面はこんな感じ。背景黒が良いのかよくわからないけど一旦こんな感じ。

※ここで以外にも結構時間かかった・・・

f:id:sirosiro346:20170916122745p:plain

 

ゲーム中もルールをわかるようにして、実際に当たった数・壊した数もわかるように

ゲーム中に、「あれ?ルールなんだっけ?」とならないように、ちっちゃいウィンドウでルールがわかるようにしました。

実際のスコアもわかるようにしておき、ユーザーにはこれを見てもらい

あと何回当てなきゃ!とか、あと2つブロック壊さなきゃ!!

とか思ってもらう想定です。

f:id:sirosiro346:20170916123041p:plain

 

昨日はここまでしかすすみませんでした。

UIって作り出すと結構時間かかるのよね・・・笑

 

  1. ブロックが当たった数、壊した数が左のスコア枠として更新される処理追加
  2. ルールとスコアが一致した後に、クリアとなる音?などを表示

 

さて、始めます。

と、ここまで記事書いて始めたんですが、何とか形になりました。笑

完成版動画

youtu.be

 

ステージ固定かつ、ボールが反射する角度が必ず45度なのがあれだけど、

なんかかなりゲームっぽくなってきた。

 

そろそろゲームアップしようかなーと思ってWebGLに変換してみたんだけど、

なぜかビルドできず。笑

こんな感じにめちゃ怒られました。

f:id:sirosiro346:20170916234216p:plain

 

うーん、なんだろ?

インストール時に色々チェック外して入れたからかな?WebGLにかかわる部分のチェック忘れた可能性もあるなー笑

とりあえず、明日以降に少し調べてみようと思います。

 

では、そんなところでーノシ

素人がUnityでブロック崩し作ってみた - ⑧

ゲームシステムがくそじゃね?

こんにちは、siroです。

前回までで、一応タイトルからゲーム画面に行って、ゲーム画面からゲームオーバかつ、ゲームオーバからのリトライができるようになりました。

音とかも追加して少しだけゲームらしさが見えてきた・・・と思っていたんだけど、、、ゲーム自体がクソじゃね!!!!?という結論に至ったので、

少し追加要素加えてみようと思います。

※前回までの進捗は以下に書いてます

a-zero.hatenablog.com

 

 

ブロック崩し + @を考えてみた

そもそもブロック崩しの要素ってなんだろう?

「下のバーを操作してボールを跳ね返してブロックを壊していくゲーム」

のはず。

 

これに追加要素を加えてみようと思います。

ルールを加えてみよう

ゲームとして成り立つためには、何か特定のルール?のような制限があり、

それを上手くかいくぐってクリアしたりした時に達成感などがあるはず。

縛りプレイとかまさにそうだよね。

これをブロック崩しに当てはめてみようと思う。

 

「ゲーム開始時にブロックに当てる回数や、壊すブロックの数などを表示して、

指定のルールでブロックにボールを当てるゲーム」

にしてみるのはどうだろう?

 

ブロックに5回当てろ!

赤ブロックに4回当てろ!

緑ブロックに2回当てろ!

※色指定ありにするかは要検討

 

ブロックを壊すことが目的ではなく、当てる回数を上手くコントロールするゲーム 

って感じですな。

そうなると、ブロックがなくなる回数はすべて1にしても良いかもなぁ。

それと、スタートするタイミングはユーザ任意で開始できるようにしないときつい気がする。開始ボタン?みたいなものを用意してもらう感じかなー。

 

毎回ブロックの位置が同じだとつまらないので、ブロックの位置や数などは毎回ランダム(もしくは固定のステージ10個からランダム?など)にして、お題(指定された当たる回数)のクリアごとに下のバーが短くなっていくとかいいかも。

ボールのスピードは今まで通りブロックに当たる事に上がっていく仕様にすれば、プレイ中もハラハラして、お題クリアごとに難しくなっていくからいいかもしれない。

 

クリアごとにペナルティを どう設定するかはゲームを少し作り上げてみてから最終決定しようと思うけど大方こんな感じで作ってみようと思います。

 

さーて、やったったんぞー

素人がUnityでブロック崩し作ってみた_-_⑦

ゲーム内容以外はよいかんじになってきたな。笑

ひとつ前の記事で、ここまでやるぜ!と意気込んでみたけど、また何とかたどり着けた。

小規模な目標でやっていくとモチベ維持できていい感じ。

※前回の記事はこちら

a-zero.hatenablog.com

 

 

今日の目標

今日掲げた目標はこちら

  1. ゲームオーバー後のリトライ、タイトルに戻るボタン&遷移追加
  2. ゲーム画面中の一時停止、タイトルに戻るボタンの追加
  3. タイトルからゲーム画面遷移後の暗くなる件の解決
  4. なんか音出してゲーム感をだしたい

 

何とか形になりました。

完成形がこちら。

youtu.be

 

 

①ゲームオーバ後のリトライ、タイトルに戻るボタン&画面遷移実装

これはタイトル画面からゲーム画面に遷移するのと同じ仕組みを利用したので、すぐ解決。
復習だけど、シーン遷移はこれで可能。
 SceneManager.LoadScene("GameScene");
 ※「GameScene」がシーン名
 
 オブジェクトをクリックしたときの判定にはRaycastを利用する
 ※ここらへんでRayについてはまとめられています

megumisoft.hatenablog.com

 

②ゲーム画面中の一時停止、タイトルに戻るボタンの追加

 以下参考に、実装
 

gametukurikata.com


 
UIのPanelとButtonを配置し、Clickイベントにオブジェクトを表示/非表示にする処理を記述
 gameObject.SetActive (false);
 ※falseが非表示でtrueが表示

gameObjectはpublicにしてUnity側から指定するか、Find("オブジェクト名")とかでとってきて変数化しておけばよいです。

 

③タイトルからゲーム画面遷移後の暗くなる件の解決

シーン移動を行った時に暗くなって欲しく無いシーンを開いて、Window>Lighting>Settingsをまず開く。
そのあと、Settings画面で、下の方にある「Auto Generate」のチェックを外し、横の「Generate Lighting」をクリックする。
クリック後にロードがあるため、それを待ってシーンを保存すればOKとのこと。
やってみたら、Unityで見えている状態とゲーム実行時の状態が同じに!!!!!

 

※以下参考にしてます。白うさぎのIT学習帳さんありがとうございます

siro-on.hatenablog.com

 

④なんか音出してゲーム感をだしたい

UIコンポーネントのAudio Sourceを使っています。

配置して、音をオブジェクトにドラッグアンドドロップでひもづけるだけで、ゲーム中に流れる音楽は簡単に流せる。シーン起動時に音を出すかどうかの設定を

「Play On Awake」でチェックぼっくして設定できるからここいじるだけ。

f:id:sirosiro346:20170914222140p:plain

 

当たった瞬間にまたは、ボタン押したときに音を出すソースはこんな感じ

 

//public変数で効果音をUnityから設定
public AudioClip audioClip1;

 

// 当たったときの処理内に以下を追記
audioSource.PlayOneShot(audioClip1);

 

フリー音楽で有名な、魔王さんからいくつか拝借

全曲無料・フリー音楽素材/魔王魂

 

※Unityで音を鳴らす場合には以下参考にしてやりました

http://qiita.com/amano-kiyoyuki/items/43fa92cce1a44a8030b5

 

 

今日も何とか形になってよかった。

あとはブロック崩し自体のゲームシステムに少し手を加えて、

もう少しゲームっぽくしたら一旦完了かなー

出来上がり次第でどう思うかだけど。笑

 

一旦今日はここまでー

また明日以降やりますーノシ