Unityって10回言ってごらん

ど素人がunityでゲーム製作する悪戦苦闘話

プログラミングでボケ防止!

ゲーム開発の経過

Unity1weekに参加したゲームのバグ修正と機能追加したあと、同じようなゲームのステージ構成を変えたやつとか、全く別のゲームとかを作成途中なんだけど、これって面白くないよね…なんて思いだしてどれも中途半端なままの状態に。

 

プログラミングの勉強しよう

気分転換と、そもそもプログラミング自体が初心者すぎるので、そうだ!プログラミングの勉強しよう!って思い立つ。以前、Progateというサイトで勉強したことがあった。サイトの色合いとかキャラとかがすごく自分好みにぴったしで楽しく勉強できた。なぞってサクサク進めてわかった気になってたけど、何か身についたか?となると疑問が残るぞー。

 

いいサイト見つけた

いろいろ探していたらAtCorderという競技プログラミングなるサイト。競技プログラミングなぞ私には無縁なのだが、そもそもプログラミングができない人のためのページ

AtCoder Programming Guide for beginners

があってそれで勉強開始。

プログラムの書き方が説明してあって最後に練習問題を解いてという形式。

多次元配列までやった。その後はまだページが作られていないので心待ちにしている。

UnityではC#だけど、ここではC++の勉強してる。

 

過去問

初心者用のC++入門を終えて(途中だけど)

AtCoderに登録したら次にやること

を参考に過去問を解いていく。

C問題は端から解ける気もしないのでパス。

解けないやつは解説文読む。言っている意味がよくわからないことも。

そもそも問題すら、え?何?

 

他の人のコーディング

このサイトの一番いいところは他の人の書いたプログラムが見られること。

私の場合はC++で書いているので同じC++で実行速度が速いものを探して閲覧。

もうね、ちょっと感激するんだよね。

え?これだけの処理ですむの?

うわぁ、こんな発想力が欲しい~とか。

そういう人のプロフィールって東大だったり東工大だったりして、やっぱ地頭が違いすぎるのね。

解説文読むより人のプログラム見たほうが100倍理解できるのでおすすめ。

 

年末年始は

プログラミングも面白いからこのサイトで続けて勉強しよう!

なにかゲームを完成に近づけたい。

 

余談

ボケ防止にはPCの前にいるより歩くこと!

再公開

ライティング

ライティングがよくわからない。

ステージ終盤になると暗ーーーくなって影ができる。

ライトを足してみてもあまり変わり映えなく。

なんだかわからいけど、何度もやっているうちに、やや暗いけど敵やパネルは明るくみえるようになったので、再公開。

でも、なんだか一般公開するのも気が引けるので限定公開。

SPACE10 | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

 

これから

わからないことや解決できないことがいろいろあったなぁ。

でも、うまくいかないことがうまくいくようになったり、段々形が出来てきたり、完成したときの嬉しさは格別!

何より作っているときが一番楽しい!

今はSPACE10の焼き直しに取り掛かってる。

同じようなシューティングだけどステージや敵を変更していく。

マイペースで!

 

 

底なし沼にハマる

バグ修正

Unity1weekに参加した「SPACE10」というシューティングゲーム

致命的なバグがあった。

自機が何かにぶつかった時に後ろに永遠と下がってしまうこと。

ぶつかっても大丈夫な時もあるしダメな時もある。

でも、これじゃ遊ぶのに「なんじゃこりゃ、遊ぶ以前!」ってなるよねー。

まぁ、わかっていて公開したのは、どなたか親切な方のアドバイスを期待してたわけで。

Unity1weekの全ゲームを実況している方がいて、どれどれって実況見に行ったら、なんと正にその瞬間「SPACE10」を実況しようとしているではないか!

なんという偶然、いや運命!

でね、やっぱり後進しちゃったわけですよ。

実況の方から『あー、つまんな。さっさと切り上げよう』っていう気持ちがヒシヒシと伝わってきて、ホント申し訳ない。

でも、収穫ありました!

ひとつは、自機にトリガーつけたらいいってこと。

二つ目は、弾が平面で分かりずらいのでスフィアにしたほうがいいってこと。

ありがとうございます!

とりあえずこのまま公開しておくのは忍びないので非公開にして修正作業。

最初は自機にトリガーつけてOnTriggerEnterにしてたんだけど、なんかうまくいかなかったのでトリガーやめたんだよね。

反発しないようなマテリアルもつけて。

再度トリガーにしてみたらうまくいった!

なんでー?って感じだけど、いろんな兼ね合いがあるから今回はそれがうまくいったんだろうな。

致命的ばバグは修正出来た!

 

いろいろ手直しと追加

・敵のUFOからの攻撃がわかりにくいのでビームにするものの、いまいちだったので(ビームがかっこよかったんだけど思ったような動きをしてくれない)弾にするが、やはりわかりずらいので、ミサイルにした。大きいのでわかりやすい。

・UFOからの攻撃を少な目にした。

・通常弾がUFOやパネルに当たったとわかるようなエフェクトを追加した。

・ゲームクリアやゲームオーバー時の効果音を変更。

・ゲームクリア時のおまけにメッセージを追加。

・敵や隕石やパネルを破壊した時のスコアを変更した。

・パネルを破壊した枚数によってボーナスポイントをつけるようにした。

 

難問あらわる!

大きなバグも修正したから再公開しようかなーって思ってたけど、テストプレイしながら、「あれ?」ってなった。

通常弾でパネルを攻撃するとヒットしているはずの弾がすり抜けていってしまう時がある。

OnTriggerEnterが反応したりしなかったりなのだ。

弾のスピードを落としたら反応が増えてきたけど、それでもすり抜ける時がある。

いろいろ試してみたけど、改善しない。

 

そしてFPSが思ったより低い!

たいそうなことしてないのに、30切るときもあって。

プロファイラーとかいうのがあって、でも使い方も見方もいまいちわからなくって。

GPUの負荷が高そうっていうのはわかった。

どうもUFOが重いみたいで、ほぼインポートしたままのを使っていたので、削れるところは削ってみた。

UFOが登場するタイミングでのSetPass Callsっていうのが約半分になった。それでもまだ重い。

 

通常段が当たってるのに当たっているってカウントされないのって、「なんだよー、当たってるのに!」ってなるよね…

まだ、しばらく再公開できそうもない。

年内には目途つけたいなぁ(弱気)

 

 

 

 

 

Unity1week 1週間ゲームジャム「10」に初参加

ついに初参加

Unityをさわり始めて半年以上1年未満になる。

途中でぜーんぜんやらなくなって、ふと思い立ち夏からまた再開。

Unityroomの存在は知っていて、1週間ゲームジャムに参加しようと作り始めあえなく挫折というパターンを繰り返してた。

今回こそ!と鼻息荒く取り掛かってみたものの、やっぱりアイデアなし、モデリングできない、お絵かきできない、そもそも実現する実力がない。

でも、歯を食いしばってなんとか参加に漕ぎ着けた。

バンザーーーーイ!

 

ゲームの進捗

1日目

Unity1week1週間ゲームジャムのお題が「10」と知る。

10回、10秒、10個、10人、10点、10カウントダウン・・・

うーむ、どうしよう・・・

unityroomで見かけるのは、みんなオリジナリティあふれているんだよね。

あの発想力はどこから??

前回のお題「あつい」のときは、フライパンを振って熱いホットケーキをテーブルの上のお皿に厚く積んでいくゲームを作ってた。

作ってたんだけどね、動作テストしたら「これ、全然面白くない…、つまんな」ってなって一気にやる気失ってリタイア。

ね、発想力のかけらもないでしょ。

そして1日目終了ーーー

 

2日目

もう、みんなみたいな面白いアイデア出ないから、フツーのに10を入れるだけにしよう。

シューティングで10枚のパネルを壊していく。

ステージは宇宙。

素材集めに奔走。

アセットストアのはすんなり使える(時々使えないのもある)けど、無料ので自分の思っているようなのに近いのってなかなかないよね。

外部の3Dモデル配布サイトでけっこうイメージに近いものがあっても、テクスチャがついてなかったり、マテリアルが外れていたりで(インポートの方法を書いてあるブログの通りにしてもダメだった)ポンと使えるものが少ない。

効果音やBGMはわりとすんなり。

そして2日目の夜もふけていった。

 

3日目~9日目

何日目にどれくらいの進捗だったのかすっかり忘れてしまったのでまとめて。

とにかく次から次へとエラー出まくり。

エラーについては別記事に書くね。

Unity Space Shooterチュートリアル通りにしておけば締切に間に合ったかも。

あれって3Dだけどゲーム画面では2Dっぽいでしょ。

宇宙空間を自由に動き回るようにしたいと思ったのが泥沼の始まり。

チュートリアルでは前後左右に自機が動くけど、上下にも動かしたいわけで、前進はどのキーにしよう?いや自動でいいんじゃない?後ろを振り返らない人生ってことで後進はなし。

いや、ほんと後進はないはずなんですよ。

でも、ゲームが出来上がってプレイしてみると何かにぶつかった拍子にあれっーと言う感じで後進し続ける。でも、でもぶつかったら必ず後進するわけでもない。

Unityroomのコメントでも後進の報告あったので、直したいのは山々なんだけど、現時点では直せません(汗

どなたか原因これじゃない?とかこういうコードにしてみたら?とかアドバイスお待ちしております。

手直しいろいろ

・ステージを変更

 最初は宇宙空間を広々グワーンと飛び回ってもらうようにしたんだけど、広すぎた。

 ゲーム画面の右上に小さくプレイヤーやパネルがうつるレーダーのようなものをつけてみたものの今一わかりづらい。

 広範囲を映せば目印が小さくて見づらいし、目印をわかりやすく映せばパネルどこどこ?になってしまった。

 結局Cubeでステージ作った。

 

・敵を3度変更

 1度目・・・鋭いフォルムの飛行機。

       プレイヤーを追いかけて攻撃するようにしたつもりが、

       挙動がめちゃくちゃおかしい。

 2度目・・・動きがおかしいから固定でと砲台にチェンジ。

       しかし砲身をプレイヤーに向けると変な格好になった。

       ステージ内が見た目より広いので床に置いてもなぁ。

 3度目・・・ゲームクリア後に飛んでくるおまけを10個用意した中に

       UFOがある。

       UFOってどの角度がプレイヤーの方に向いててもおかしく

       思われない!

       そうだ!これだ!

       公開の前日に変更。

 

・タイトル画面を変更

 アセットストアにGameJamTempleteなる便利なものがあるじゃないですか。

 しめしめと使ってみたもののあれ?なんかおかしい。

 使い方が書いてあるブログを参考にしてみたけどやっぱりおかしい。

 でも、どこがどうおかしかったかもう覚えてない。

 シンプルにタイトルとスタートボタンだけの画面を作った。

 音のボリューム調整とかのオプションつけてみたかったなぁ。

 

一番困ったこと

 英語ができないこと!

 エラーが出る→google翻訳する→で、どうしたらいいの?→ネットで検索→日本語で書いてあるものが見つからない→英語のUnityフォーラムで見つかる→google翻訳する→解答が書いてあると思いきや返信欄に「おー!わても同じ現象で困ってますわー」→ガクッ→いや、たいてい解決法がかいてあるんだけど、それをやっても直らないことのほうが多い

 そしてやっぱり動き。何度も直してみた。

 動きっていろんなやり方があるじゃない。

 いろんなブログ読んでもそれぞれだし、こういうのにはこれ!っていうのがやっぱり人それぞれだし。

 

10日目(公開前日)

敵もUFOにしてゲームクリア後のおまけもつけてだいたいこれでいいかなーって思ってたら、またエラー!

GameManagerオブジェクトが行方不明!

いやーーー!

間違えて消しちゃった?

再度作り直して実行!

なんかね、スコアテキストがアタッチされてないってエラーでるんだけど、インスペクターで確認してもしっかりアタッチしてるし、スコアテキスト自体も生きてるし。

悩みに悩んで手詰まりかと意気消沈したとこで原因判明!

なんとですね、GameManagerスクリプトが全く関係のないオブジェクトにもアタッチされてたんですよ、奥さん!

もちろんアタッチした覚えは全くないし、するわけもなく。

 

11日目(公開当日)

UFOの動作テストのときに、隕石が邪魔だったので外してた。

UFOの動作もだいたいいいから隕石を戻して最終テスト。

あれ?隕石当たっても全然痛くないっていうか幽霊のようにすり抜けてるし。

レイヤー名が変わってしまってただけだった。チャンチャン。

やっとビルドー!

と思ったらビルドボタンが灰色で押せないじゃん。

これも英語サイトでお世話になりました。

ビルドーーーー!7分位で終了。

unityroomに無事アップ完了!

お疲れさまでしたー!

 

反省とこれから

とにかくオリジナルなアイデアを捻り出す!

普段からふと浮かんだ(浮かばないんだな、これが)アイデアをメモしておく。

他の人のゲームを遊んでみてこうしたらどうだろうああしたらいいかもと改良を考える。

 

「なんか前にもこんなエラー出たよな。その時はどうしたんだっけ?なーんも思い出せない。調べないと。」という事態が再三あるので学習能力なさすぎ。

ちゃんとエラーやその対処方法はノートにまとめよう。

あとで今回のエラーをまとめて記事にします。

 

なんとか踏ん張って参加出来たので、真夏にカラカラに乾いた喉にビールをゴキューと流し込んだ心地です~

次回もぜひ参加したい!

 

 

 

 

 

 

 

Unityでのゲーム製作でこんなエラーでました

Unity1weekに参加するためのゲーム作っていた時に出たエラーで覚えているものをつらつらと書きます。

私のボケボケからくる特殊なエラーが多いのでお役に立たないでしょうが、「へー、こんなエラーでることあるんだ、変な人」程度にお楽しみいただけたら幸いです。

 

ゲーム再生したら音が出ない

(状況)

ゲーム再生したら、BGMも効果音も聴こえない。

AudioSorceもあり、AudioListnerもあり、音楽Clipもあり。

メディアプレイヤーとかだとちゃんと聴こえる。

他のプロジェクトでも同じく聴こえない。

 

(対処)

ゲームビューでMuto Audioのチェックを外す。

え?Mutoがデフォルトなの?てか、以前から、Muto Audioってあった?

今回初めて困ったんだけど。

 

オブジェクトにスクリプトがアタッチできない

(状況)

あるオブジェクト(A)にあるスクリプト(あ)をアタッチしようとしたら「Can't add script behaviour Ignore Snap Conditionai Attribute.The script needs to from MonoBehaviour!」と怒られた。

他のオブジェクト(B)にアタッチされているスクリプト(い)も(A)にアタッチできない。

 

(対処)

これは、全く別のスクリプト(う)にエラーがあったせい。

(う)を直したらOK。

 

ゲーム開始と同時にゲームオーバー

(状況)

タイトル画面でスタートボタンをぽちっと。

ゲーム画面に移ったと同時にゲームオーバー表示。

 

(対処)

プレイヤーと同じ位置に敵を置きっぱなしにしてシーンから削除するの忘れていた。

重なっていたので気付かなかった。

シーンから削除でOK。

 

衝突時に自機が揺れない

(状況)

自機が敵や隕石にぶつかったら自機の機体を揺らすように設定してるが揺れない。

 

(対処)

メインカメラを自機の子にしていたので、カメラも一緒に揺れて同期をとっていたので揺れていないように見えてただけ。

メインカメラを子から外して、chinemachinのバーチャルカメラに変更。

 

弾が真っ直ぐに飛ばない

(状況)

弾がビューンと真っ直ぐに飛ばないであらぬ方向へ流れてしまう。

 

(対処)

速度を早くした。

 

パーティクルの方向を変えたい

(状況)

自機の後部から出るフレアがカメラからだと縦に映り機体から出てるように見えない。

transformのrotateを変えても変わらない。

 

(対処)

パーティクルのインスペクタビューで3D Start Rotationにチェックを入れて、x,y,zの値を入力して変更。

カメラから見える方向で合ってればOKにした。

 

Invokeが実行されない

(状況)

Invoke("A")は実行されているのに、Invoke("B")が実行されない。

Invoke("B")の直前までは実行されている。

 

(対処)

元々、Invoke("A")しかなかったので、キャンセルするのにCancelInvoke()にしていた。

後でInvoke("B")を加えたので、Invoke("B")までキャンセルになってしまった。

CancelInvoke("A")に変更してOK。

 

アタッチしたオブジェクトが勝手に外れる

(状況)

ゲームオブジェクト(A)にアタッチしているスクリプト(あ)のゲームオブジェクト変数にゲームオブジェクト(B)をインスペクタでアタッチ。

実行するとNullRefernceエラー。

いつの間にか(B)が外れている。

 

(対処)

アタッチできるのはAssets下に置かれているプレハブだけ。

 PlayerをプレハブにしてもアタッチできないのはPlayerはシーンにひとつしか存在できないからってことですかね?

 

実行が止まってしまう

(状況)

実行してちょっとすると「Screen position out of view frustum」エラーで止まってしまう。

 

(対処)

ネット情報ではCameraコンポーネントのClippung PlanesのNearの値を0.3以下にすると発生するってあったけど、0.3以下になってないし…

ふとPlayerの位置を見るとZの値に数字の他にアルファベットのeが…

ひーーー、宇宙の果てまで一足飛びに行っちゃってたってこと?

動きのコードを直して無事にエラーなくなった。

動きがね、いまひとつ呑み込めてないんだな。

 

アタッチしているのにNullRefernceエラー

(状況)

GameManagerで管理しているスコアテキストがアタッチされてないらしい。

インスペクタではしっかりアタッチされている。

スコアテキスト自体も生きている。

 

(対処)

GameManagerってシングルトン(かっこいい響きだね)ってやつなんだけど、なぜか全然別のゲームオブジェクトにもくっついてた。

なぜか全然わからない。

つけた覚えはないし、そもそもつけないし。

 

当たり判定されない

(状況)

Playerと隕石の当たり判定が突然されなくなった。

 

(対処)

レイヤー増やしたときに隕石のレイヤー名が別のレイヤー名にすり替わってしまっていた。

隕石のレイヤー名を直してOK。

 

ゲーム終了時のリトライボタンが反応しない

(状況)

リトライボタンをクリックしても画面が変わらないまま。

 

(対処)

リトライボタンのOnClickにGameManager内のメソッドを呼ぶように設定していたが、途中でGameManager失踪事件があって、文字通りMissingになってたわけです。

再度設定し直してOK。

 

シーンビューが暗い

(状況)

シーンビューではそれなりに明るいのにゲームビューが暗めだったり白いモヤがかかってたりする。

 

(対処)

多くの人のブログで書いてあるように

window>Rendering>Lighting Settings>ObjectMapsタブでAuto generateのチェックを外してGenerate Lightingsをクリック

で持ち直したかのようにみえたがすぐにダメ。

ビルドしたやつは大丈夫なので、まっいっか。

 

ビルドボタンが押せない

(状況)

WebGLでビルドしようとしたらビルドボタンが灰色で押せない。

 

(対処)

PlayerSettingでcolor spaceをLInearからGammaに変更したらOK。

 

と、他にもいろいろあったんですが、メモっておいたものだけ書き出しました。

いかがでしたか?

俺のほうが、私のほうが、もっとぶっとんだエラー出したよって方はコメントしてください。

「Unityでぶっとびエラーの人々」という記事に採用させていただきます。