unity開発メモ帳

Unityゲーム開発です

叫ぶほど便利だったエディタ拡張 / Unity

はじめに

エディタ拡張を食わず嫌いしていた私は、そのあまりの便利さに叫んでしまいました。

 

お久しぶりです。

 

今回はエディタ拡張を使って制作を効率化しました。というのも、現在進行中のプロジェクトのデバッグ作業が面倒に感じてきたのです。

ゲームで機能やストーリーを実装した際、それを追加した地点へゲームを進めてデバッグする必要があったためです。(今書いていても思うんですがめんどくさすぎますね!)

 

そこで今回は重い腰を上げてエディタ拡張をしてみました。

 

 

方針と実装

方針

「ドロップダウンでゲーム進行上の、ある地点を指定してスタートボタンを押すことで目的の地点へゲームを進行してもらう」エディタ拡張を目指します

 

前提として、私のプロジェクトではゲームの進行状況(ステート)をEnum型で表現しています。一気に指定されたステートへジャンプしたいところではありますが、それまでのステートを順々に踏まなければ色々と不具合が生まれてしまいそうです。

 

例えば、A村でアイテムをゲットしてからB城へ行くはずが、いきなりB城へ来てしまっては「持っているはずのアイテムを持っていない」という状況になってしまいます。


なので、値などの変更は順々にステートを踏む必要がありますし、逆に、値などを変更しない会話シーンなどは省略することでデバッグ作業を効率化できます。

 

www.youtube.com

↑実装のポイントについてはこちらを参考にさせていただきました。

 

実装

Enum型のドロップダウンはEditorGUILayout.EnumPopupを使って実装し、そこで選択された進行状況をゲームマネージャーに渡してゲームを開始しています。

gista305a2194775e170e35051112faaa7d0

 

また、ゲームマネージャーは、渡された進行状況までのすべての進行状況を順々に辿り、それぞれの進行状況で行われた値の変更などを行っています。

 

 

通常

まず、通常時はゲームが最初から始まってしまい、ここからデバッグ作業先まで手動でゲームを遊ばないといけません。(だるい)

 

 

指定したとき

今回のエディタ拡張を使うことで、一気にデバッグ作業先まで進める(ように見せかける)ことができます。(便利!)

 

 

 

終わりに

最後にこんなことを言うのもなんですが、エディタ拡張というのは得られる効率化が拡張の手間より大事なのかをしっかり見極めてから実装するのが良いと思います。

今回は勉強も兼ねてエディタ拡張を使ってみましたが、これからはもう少し拡張すべきか見極めてから判断しようかなと思いました。

 

ありがとうございました。

ゲーム完成したので解説。(ネオタイピングv1.6時点)

はじめに

ご無沙汰です。

今回は、9月の中旬から新しく始めたゲームづくりが一段落したため、記事にしていこうかなと思います。(失踪じゃないですっ)

(一応N高生なのでアドベントカレンダー企画にも参加しています)

 

実際に遊べますので、フィードバック待ってます!

 

↓日本語版、unityroom

ネオタイピング-v1.6 | フリーゲーム投稿サイト unityroom

 

↓英語版、itch.io

https://rokusyo.itch.io/stretch-typing

 

 

 

 

前回までのあらすじ

前回、半年ほどかけて制作したゲームについての紹介を行いました↓

fatena.hatenablog.com

その制作中次のような教訓が出てきました

  • 最低限プレイできるゲームではあるものの、面白いゲームはではない。
  • コンセプトを欠いていたので、何を実装して何を切り捨てるかの基準がなかった。
  • テクスチャの実装ができていない。
  • 計画段階を軽めにしすぎたので、無理やりな仕様が多々ある。

今回はこの教訓(おもに1つ目)をもとに制作していきました。

 

ゲーム概要

表示される複数のキーを、時間制限内にすべて長押ししきるタイピングゲームです。

攻略していくことで、お題が少しずつハードなものへ変化していきます。

また、世界中のプレイヤーとスコアを競い合うこともできます。

チュートリアルの画像

 

ゲームの仕様

画面遷移

すべての画面数は5つ。タイトル、ランキング、プレイ、ゲームオーバー、そしてチュートリアル

画面遷移の図

ランキング機能について

今回は初めてランキングという機能を実装してみました。

ニフクラ mobile backend(NCMB)というサービスを使って、データのやりとりを行っています。

 

NCMB管理画面。ランキングデータがきちんと格納されている。



はじめはGoogle Sheetsへデータを読み書きしようとしたのですが、うまくいきませんでした。

 

おそらくは、ゲーム開始時にプレイヤーそれぞれがGoogleにログインしなければスプレッドシートにアクセスできないためなのかな?(推測の域ですが)

また、初めて知ったのですが、スプレッドシートでは編集者を100人までしか追加できません。

そんな理由もあって、よりランキング機能向きのNCMBへ変更しました。

 

スプレッドシートは開発のためのツールのような形でプロジェクトに組み込むほうが良さそうです。(参考↓)

www.youtube.com

 




スプライトについて

前回の制作では、仮置きのままのスプライトがいくつかありました。

いくつ、、か、、、

前回の制作の目標が「とりあえず動くゲームを」ではあったので見逃して頂きたいのですが、今回は違います。「動くゲーム」→「面白いゲーム」にレベルアップした制作を目指したので、スプライトの完成度は重要です。

 

しかし「スプライト」とは言ったものの、私はデジタルイラストに関する機材を一つも持っていません!(`・ω・´)キリッ

そんな人間がたどりついた先は「ドット絵」でした。

 

前回の制作でも、ドット絵のスプライトがいくつか登場しています。

 

 

今回もドット絵をメインとしてスプライトの制作を行いました。

 

前回は規模の大きいゲームを作っていたため、スプライト制作へ手が回りませんでした。

しかし今回は、ミニゲームの制作を目指したので、プログラム以外のところへも手間をかけることができました。

 

  

ランキング登録のボタン

 

 

個別のスコア・名前・順位を載せる四角(名前わからぬ)

 

 

 

サウンドについて

先程も述べたように、今回はプログラム以外のゲーム要素へ手間をかけることができるようになったため、サウンド追加を決めました。

 

ボタンのクリック音は以下のサイトから、(いつもありがとうございます)

soundeffect-lab.info

 

そしてBGMはGarageBandで自作しました。BGMをゲームへ追加するのは初めてです。



今まで趣味で楽曲制作をしていましたが、ゲームBGMは勝手が違ったため難しく感じました。

あくまでもプレイ中、後ろでかける音楽なので、かっこうよい複雑なフレーズというよりは、耳馴染みが良くキャッチーなメロディーを制作するほうが良さそうです。

ただあまりにも格好悪くては遊んでいる際にじゃまになってしまうのでは、、、などと考えていると時間が溶けていきそうだったので、格好良くも悪くもないであろう曲を作ってみました。

 

単純な楽曲もまた、作るのが難しいですね。

 

 

フィードバック

私の友人にフィードバックを頂きました。v1.6時点のフィードバックなので、これから修正されるかもしれません

  • スタート前のカウントダウンがほしい
    →確かにいきなり始まるのは不親切。追加する。
  • Shift-Lという表記だとShiftとLを押すのかと勘違いする
    →確かにこれは間違えそう。修正する。
  • 中毒性あり
    →ありがたい!!!!
  • リズム感を出す要素があると良いのでは(タイプ完了ごとに音程を上げていくなど)
    →ゴールがあるゲームではないので音程を上げ続けるのは厳しい。だが、工夫して「10回ノーミスで得点が2倍モードに移行(ミスで通常に戻る)」のようにすれば音程を上げていくのは可能。いずれにしろリズム感を出す要素は重要!

 

終わりに

はい。今回は「面白さ」について深掘りしてゲーム制作に取り組んでいきました。

今まで遊んできたものが自分の手で出来上がるのをみると、いつでもわくわくします。

 

次回はいつになるかわかりませんが、また短いゲームを制作しようかなと考えています。その途中でなにか技術的な内容の記事を書くかもしれないです。

 

ありがとうございました。

 

とりあえずゲーム完成したので作ったゲームの説明etc

初めに

こんにちは。先日、半年ほどかけたゲームがやっと一段落ついたので、どんなゲームを作ったかを書いていこうと思います。

 

ゲームの概要

宇宙の海賊というモチーフ

海賊についての図鑑をたまたま読んだ際、「これでいいものが作れるのでは、、?」と思ったので海賊のゲーム制作を決めました。

まんま海賊のゲームを作ろうとすると、僕の知識不足により難航するだろうと考えたので、フィクションの入れやすい「宇宙空間での海賊」というモチーフで制作を始めました。

 

ゲームの内容

主人公は雇い主たちの惑星間移住のため、物資を略奪しながら移住先となる星を開拓する。という内容。

 

ゲームの仕様

・会話システム

 

・ショップ

 

・開拓ウィンドウ

 

・インベントリー

 

・マップ

 

・フィールド

 

・略奪中

 

・ゲームオーバー

 

問題点

・最低限プレイできるゲームではあるものの、面白いゲームはではない。

・コンセプトを欠いていたので、何を実装して何を切り捨てるかの基準がなかった。

・テクスチャの実装ができていない。

・計画段階を軽めにしすぎたので、無理やりな仕様が多々ある。

 

学び

・やる気が第一。

・実装に時間がかかっている仕様はそもそもいるのか考える。

・一週間のはじめにその週実装する仕様を描く。できれば絵。

命名規則は統一する。

・計画の工程がいっっちばんだいじである。

・締切を作る。

・作り方のわからない仕様が計画の段階で出てきた場合、だいたいの作り方を知っておく。

・始めるのと終わるのが一番大変。

・仕様の大きさに関わらずワクワクする仕様がある。

・作品のコンセプトは大事。

・ゲーム向きの「夢中」の種類は「炭火の夢中」。静かに長期間燃え続けるので。

・ワクワクする実装を繰り返して、自分のやる気を高める。(レーダー機能とかはできたとき     にとても楽しかった)

・同じようなことをしている他の人の情報を集める。やる気に繋がるしテクニックも増える。

 

制作の歩み

1月にゲーム製作開始。

 

1月から4月 

プレイヤーの移動の実装とその改善

ワープ機能の実装(後に廃止)

大型船の挙動の実装(おおまかに)

敵船の挙動の実装(大まかに)

 

ゲーム開発進捗-3ヶ月間でやったことと反省点 - unity開発メモ帳

 

5月前半

船内への侵入の実装(おおまかに)

敵船のパトロール実装

回復の実装(一回目)

プレイヤーの武器実装(後に廃止)

 

ゲーム開発進捗-2週間でやったこと - unity開発メモ帳

 

5月後半

星への入港機能の実装(おおまかに)

大型船の生成機能の実装

大型船の航路をマップに表示

 

ゲーム開発進捗-2週間でやったこと [5月後期] - unity開発メモ帳

 

6月前半・後半

船内への侵入の実装(具体的に)

星への入港機能の実装(具体的に)

 

ゲーム開発進捗 6月前期・後期 - unity開発メモ帳

 

7月前半

開拓時のUI実装

マップ、インベントリーなどのUI改善

 

ゲーム開発進捗 7月前半 - unity開発メモ帳

 

7月後半

大型船内のマップ調整

ミニマップの改善

会話機能の実装

大型船内の敵の実装

 

ゲーム開発進捗 7月後半 - unity開発メモ帳

 

8月前半、後半

開拓の進捗に応じた会話変化の実装

ゲームオーバー、ゲームクリア演出の実装

セーブ、ロード機能の実装

デバッグ用のツール類削除

星の内部のマップ改善

強化アイテムの挙動の実装

回復アイテムの使用方法改善

フィールド範囲調整

 

 

終わりに

やっと終えた〜

8ヶ月間よくやったなと、この記事を書きながらしみじみ思いました、、

粗いものとはなりましたが、「終えた」という経験は今後の制作の大きな糧となりそうです。

 

次に作るものは絶対に短いゲームにしようとは思います^^

 

ありがとうございました。

 

 

ゲーム開発進捗 7月後半

初めに

こんにちは。

最近は暑すぎてあまり制作に手を付けられていない気がしますが、ちょうどいいところまで進んだとも思うので今回も書いていこうかなと思います。

進捗

船内のマップ拡大

今まで作成途中だった船内マップを完成させました。

このままだと目印になるものがなにもないので、調度類などを設置するのも良いなと思っています。優先度は低いですが。

ミニマップの範囲拡大

少しわかりにくいですが今までミニマップの範囲が狭すぎたので、範囲を拡大させ使いやすくしました。

 

会話機能の実装

左右移動の画面で、キャラクターに話しかけることができるようになりました。 

↑怖いキャラクターも作れます

 

 

船内の敵追加

先程完成させた船内マップ上に、敵を追加させました。

プレイヤーを発見すると襲いかかってきます。





終わりに

あまり進められなかったと書きましたが、こうして進捗をみると意外と進んでますね。

 

次回も進捗報告にしようと思っていますが、暑さに負けなければまた別の記事にしてみようかなとも思っています。

 

ありがとうございました。

 

ゲーム開発進捗 7月前半

 

はじめに

こんにちは。

最近は色々と忙しかったために、気づけば二週間ほど経っていました。

 

今回も進捗状況を書いていこうと思います。

 

進捗

今回はUIの実装メインでした。

テラフォームのウィンドウ

このゲームは、自分の星を開拓していくことを目標にするので、ゲームクリアに関わるであろうウィンドウの作成を行いました。

 

だいぶ簡易化していますが、緑のフィールドをマップ上に置き、その上に茶色のフィールドを置いています。

緑のフィールドは酸素のフィールドを、茶色のフィールドは住宅のフィールドをそれぞれ表しています。

酸素のフィールドを増やすことで左上のゲージが上がり、住宅を設置することで右上の居住人数が増えていきます。

 

情報ウィンドウの更新

Tabキーを押して表示される情報ウィンドウの更新を行いました。

主な3つのカテゴリーで構成されています。(インベントリ、マップ、強化)

 

また、細かい変化ではありますが、情報ウィンドウを表示している間はプレイヤーを動かせないようになりました。

これまでの「マップを見ながら移動する」というプレイが今回の更新でできなくなりました、

 

終わりに

はい。今回はこのくらいでしょう。

8月の終わり頃に完成させたいとは思っているのですが、いまだに終わりが見えてきません、、、ガンバリマス。。。

 

ありがとうございました。



 

ゲーム開発進捗 6月前期・後期

はじめに

少しずつ、風の心地よい季節になってきました。

 

今回もいい感じのところまで制作が進んだので、ブログに載せていこうかなと思います。

 

進捗

船への侵入システム

船へ接続した状態でのEキー長押しで、船内へ侵入できるようになりました。

 

侵入した直後、船内へ持っていくアイテムを選択する画面に移行します。ここで選択したアイテムを使って、船内を探索するという流れになっています。

 

プレイヤーは以下のようなライトの仕組みを用いて実装されています。(ここはめちゃくちゃ実装に詰まった、、)




星への入港システム

星の上でEキーを押すと、その星へ入港できるようになりました。

 

灰色の、縦に向いた長方形がプレイヤーです。

プレイヤーの奥に配置された四角いショップにインタラクトすると、それぞれのショップのUIが開くようになっています。

 

次回の入港システム実装のときは、各種ショップや、プレイヤーなどの画像素材を中心に実装していきたいなと思っています。

 

おわりに

夏ですね。8月末までに制作を終わらせたいので、結構絶望してます。

日々制作を続ける中で、少しずつノウハウも溜まっているので、いつかここでもかければ良いなと思っています。

 

ありがとうございました。

 

2Dで懐中電灯のようなライトを表現する

はじめに

2Dゲームで懐中電灯のようなライトを表現してみたかったのでやってみました。

 

私の力量不足で詳しい説明には至りませんでしたが、ご了承ください。

 

 

  • はじめに
  • 内部コード
  • おおまかな実装の方針
    • 1,rayを飛ばす
    • 2,Meshの説明
    • 3,rayとMeshの利用
  • 終わりに

 

 

内部コード

playerTransformに、ライトを持たせたいオブジェクトのTransformをアタッチしてください

meshFilterに、自身にアタッチされているMeshFilterをアタッチしてください。

 

(事前にオブジェクトにはMeshFilterと、MeshRendererをアタッチしておいてください)

 

gistfb3ed34426f8975e2f0aa21141749b4d

 

おおまかな実装の方針

 

1,rayを飛ばす

rayをプレイヤーの向いている方向を中心として、扇状に複数飛ばします。

 

2,Meshの説明

Meshと呼ばれる機能を利用します。

Meshには、「頂点の位置の設定」と、「どの頂点が一つの三角形の頂点の組であるか」の設定が必要です。

 

以下のページの説明が分かりやすかったです。

http://web.wakayama-u.ac.jp/~tokoi/unity_mesh.pdf

3,rayとMeshの利用

飛ばした複数のrayを走査します。

障害物にrayが当たったときは、その当たった位置を頂点とします。
一方で、障害物にrayが当っていないときはrayの先端を頂点とします。

また、すべての三角形は、「プレイヤーの位置」を一つの頂点として持っています。

 

これらの「頂点の位置」そして「三角形を成す頂点の組み合わせ」の情報をmeshに毎フレーム代入することで、動的にmeshを変形させることができます。

 

終わりに

お疲れ様でした。

実装について詳しく説明することができなかったのは申し訳ないです、、

 

今回のような「課題と解決」も今後は紹介していければと思っています。

 

ありがとうございました。

 

 

続きを読む