unity1weekで実装出来た機能について振り返ってみた 感想編
今回のunity1weekは少し頑張りすぎた気がしています。赤兎です。
前回の記事で実装出来た内容について羅列していますが、今回の記事では所感や掛かった時間や手間について言及していければと思っています。
1. 街モデル作成について
今回のunity1weekで私がやりたかったことはこれです。
AIによる画像生成であったりが2022年9月現在より少し前にTwitterのTLによく流れてきました。というわけでマップ生成するようなものがあるのではないかと検索したところ、マップ生成とそのモデル生成の両方がヒットしたため、良い機会となりました。
ツールを使用した感想としては、不都合や不具合はいくらかあったものの十分に利用できると感じました。
メッシュがいくらか張ってなかったり、建物がすべて1つのオブジェクトとしてまとまっていたりしたので、そのあたりを分割したり消去するためにはその他モデリングツールの知識が必要だと思います。
2. Unityの各種機能の充実度について
私はUnityを触って10年くらいになる気がします。業務だと5年ほどでしょうか。
これまで多くの機能に触れてきたため、それらを盛り込みまくりました。
最新のものから少し古いものまでとても充実していると感じています。ただ、明らかに多すぎるので、初期設定の時点で見直せる項目があるんじゃないかと思いました。
ネット上に学習コンテンツ(ブログなど)がたくさんあるのが強みであるとして、新しい初期設定を組めないのもわかりますが、私自身が作っていて多様な知識を使いすぎている感覚がありました。
4. 外部サービスの充実度について
PlayFabやAmazonS3、Unity内であってもIAP等のサービス利用が絡んでくることが増えました。また、タスク管理やクラス設計用のツールも未だに増えており、ゲーム開発という括りとして充実しすぎてると感じています。
また、これは私が歳を取ったのかもしれない。(27)
5. それでも上がらないゲームクオリティ!
クオリティというか企画の問題でしょうね。企画について学んだりもっとゲーム遊んだほうが良い気がしてきています。
6. それでも上げたい開発効率
今回の開発にあたって、自身で作成したパッケージを利用しています。
簡単なクラス設計を実装するものからサウンド回りはお任せしています。
これにより今回爆速で開発できたとも思っているので、今後も作っていきたい。
付け加えれば、今回ゲーム制作を行いつつ良い階層分けが出来たと思っています。制作を行いつつパッケージのアップデートを図っていきたいですね。
unity1weekで実装出来た機能について振り返ってみた 実装内容編
機能について大雑把にまとめると、実は初心者であっても熟練者であっても実装出来る機能に大差はないんじゃないかと思ってしまった赤兎です。
そんなわけで、今まで学習してきた技術はこんな風に今回のゲームに生かされているんだという一覧を書いていきます。また、当然今回の制作で初挑戦したものも含みます。
およそ前半は用意された機能を使い倒したものについて、後半は自身で設計した内容について記述しています。
1. AIによる街モデル生成
Medieval Fantasy City Generator を使うことにより都市マップjsonファイルの作成を行いました。更に同開発者様の City Viewer によって3D化してobjファイルを作成しました。
2. Blenderによるモデルバグ修正
City Viewerによって作成したobjファイルをUnityにインポートしたところ明らかに表示に不具合がありました。blenderにインポートし、法線の反転バグを修正したうえでfbxエクスポートを行いました。
また、後述のNavMesh作成の際に一部メッシュが張られていない箇所がありましたので、重複頂点の削除や三角ポリゴンを意識したメッシュ張りを行いました。
3. NavMeshによる移動範囲の制限及び敵の生成位置の制限
NavMeshを作成することでColliderを利用することなく移動制限を実装しました。
また、壁の中にはエネミーが生成されないようにNavMesh.SamplePositionを利用して生成位置を制御しました。
4. URPにおけるPost-Processの実装
URPとビルトインレンダリングパイプラインではPostProcessの実装の仕方が少しだけ異なります。
また、URPAssetにおいてShadowDistanceを調整しました。
5. Cinemachineによるカメラワーク
Dampingを意識しました。また、ImpluseSourceによって振動を実装しました。
6. Animatorの作成
BrendTreeとSubStateを利用し汎用的なコントローラを実装し流用しています。
7. InputSystemの利用
古いInputManagerではなくInputSystemを利用しています。加えて、汎用性を保ったInputActionAssetを作成できましたので流用しています。
8. DoTweenアニメーション
DoTweenを利用して簡易アニメーションを実装しています。Sequenceの利用と各種オプションも利用しています。
9. Recorderを利用した撮影
アイコンやサムネイル作成にRecorderを利用しています。
10. ProjectSettingsにおける各種設定
オリジナルカーソルの実装、スプラッシュイメージロゴの実装などのコンテンツ実装からRendering周りのColorSpaceやAPI設定を行いました。
また、DataCashの無効化を行いました。
11. Microsoft PlayFabを利用したランキングの実装
12. Amazon S3を利用したVideoPlayerストリーミング
WebGLビルド及びunityroomにおいてVideoPlayerの再生はClip経由で行えないためAmazonS3を利用しました。
13. マウスホバー時のUIアニメーションや自作スライダーの実装
IPointerEnterHandlerやIDragHandlerを利用して各種UI部品を制作しました。
14. デザインパターンを意識した設計
SingletonやFactory等の基本的なパターンからMVPパターンのようなフレームワークまで意識して取り入れつつ自身で作成したインターフェースを元に実装を行っています。
また、この実装に向けてGenerics制約やSystem.Typeクラスを利用しています。
15. JetBrains Rider の FileTemplate機能を利用したnamespace運用
FileTempleteを利用し、region,namespaceをスムーズに実装しました。
その他にもPhotoshopやIllustratorでこんなことして素材作ったとかサウンド回りのスケールの仕方や可聴領域についての意識等様々な知識を動員しています。が、今回作成したアプリケーション内に留まらず制作しているライブラリの話になってきてしまうので割愛します。
感想編はこちらです。
Unityの操作画面について
さて、Unityの初心者さん向けの記事を改めて書いていきます。
しかし、書いた文章にわからない用語があっては調べなおすのが面倒です。
よって、粗方の用語を載せておこうと思います。
ここでは基本となる操作画面について紹介します。
Gameビュー
アプリケーションを開いた際に表示されるユーザに見せることになる画面が表示されます。)
Sceneビュー
シーン内に配置したオブジェクトを様々な位置・角度で見ることが出来ます。
詳しい操作は余裕があれば別の記事で紹介します。
Hierarchyビュー
シーン上に配置されたオブジェクトが箇条書きになって表示されます。
つまりはSceneビューに存在するものは必ずこちらにも存在します。
Inspectorビュー
選択しているものの情報を表示してくれます。
表示される情報の種類は選択したものによって変わるため、それぞれについては別途解説します。
Projectビュー
プロジェクト内に含まれる素材が表示されます。画像データやモデルデータ、スクリプト等様々なものが確認できます。
注意点としてここにあるものはあくまでも制作上の素材が表示されているだけで、シーン上には配置されていないということです。つまりはゲームの中に含まれません。
Consoleビュー
エラー文やメッセージログが表示されます。プログラムでエラーが発生した場合、大抵はここに出力されます。
特にに赤色のメッセージはエラー文ですので、もし表示された場合は出ないように修正が必要です。
詳しい操作は別途解説します。
その他にも様々な画面を画面上部Windowタブから開くことが出来ますが、ここでは割愛します。
Unity Animation Preview
Animationの実装をするうえでプレビュー機能ちゃんと使えていますか?
そんなわけでUnityAnimationの学習を頑張ってます。赤兎です。
今日紹介するのはInspectorビュー下に表示されるAnimationPreviewについてです。
しっかりと使えればAnimationを実装するうえで確認したい事がUnity上で出来ます。
デザイナーさんがわざわざ確認用mp4を用意せずに済みます。
アニメーション名称
クリックするとプレビューが閉じます。再生ボタンを押しているうちに間違って触ってプレビューが見れなくなった人は多いはず。
デフォルトの設定であれば画面最下部にアニメーション名称が見えると思います。ここをクリックすると元に戻ります。
IK
IKについては説明が長くなるので割愛します。
2D
押すと2Dビューで確認できます。主に足が接地しているか確認するために有用です。
Transform
デフォルトでONになっています。
押すとアニメーションモデルの下に方位磁石のようなものが出現します。
地面のグリッドと合わせて、位置と回転を確認できます。
主にRootMotionの挙動を確認するために使用します。
Avator
人形のようなマークをクリックすることでプレビュー用のモデルを変更できます。
アセットストア等でモデルにアニメーションが付属しているものもありますが、個別でインポートするものがほとんどだと思います。
この機能を使用することでアニメーションの確認が格段に楽になります。
わざわざテストシーンを作成してAnimatorを作成して実行して動作確認という手間が省けます。
デフォルトではImportSettingsで指定されているアバターを使用します。
再生バー
再生ボタンを押すと再生ができます。
一時停止した状態で再生ボタン右側のスペースで表示されているバーを動かすことで
アニメーションをフレーム単位で確認できます。
注意
この時の再生速度は右側のスライダーで設定できる速度スケールに依存します。
何故かマウスでバーを動かす感度まで変わります。
UnityAnimationの知識
UnityにおけるAnimation周りに関する知識についてまとめておきたいと思います。
初めに断っておくと、本記事は実装上の問題を解決するものではありません。あくまでも知らないと何処を学べばいいかすら分からないので知っておきましょうという無知の知を得るための記事です。
昨今ではマニュアルも充実してきており、機能が存在することだけ知っておけば、細かな不具合やクオリティの向上に役立つ可能性があります。
今回は用語の列挙だけしておきたいと思います。もし3Dのゲーム制作においてAnimationに悩んでいたら以下の用語一覧を参考に学習を進めてみてはいかがでしょうか。
UnityAnimationを扱う上で必ず知っておくべきことは以下の通りです。
MakeTransition
ImportSettings
RootMotion
HasExitTime
Loop
Parameters
UnityAnimationを扱う上で知っておくと役立つことは以下の通りです。
SubStateMachine
BlendTree
AnyState
Layer
AvatorMask
IK
UnityAnimationに加えてプログラムを書いていく場合に知っておくと良いことは以下の通りです。
AnimationEvent
StateMachineBehaviour
さて、いくつ知らない用語があったでしょうか。多すぎますね。
UnityAnimation入門の記事なんて大変すぎてとても書けそうにありません。先人には頭が上がりません。
今回は一旦列挙だけしておきました。また機会があれば掘り下げて書いていこうと思います。
StudioOneでローディングが頻発し音が途切れる問題
StudioOneでローディングが頻発して音が途切れる問題が発生したため、遭遇した問題を解決した方法を書いておきます。
環境
Windows10
StudioOne5
解決策
コントロールパネル→サウンド->録音タブから以下の画面を開きます。
ステレオミキサーを規定のデバイスに設定します。
想定される原因
最近ゲーム実況のためにマイクとオーディオインターフェイスを購入し接続していました。この直後に不具合が発生したため今回の解決策を思い当たりました。
解決前は上記画像のLine1/2 M-Audio M-Trackを規定のデバイスに設定していました。
作曲初心者であるため方法は知りませんが、StudioOneにはオーディオインターフェイスから音源を入力する機能があるはずなので今回の解決策だけでは足りない可能性はあります。その場合は今回のことをヒントに解決策を模索してみてください。
今回の記事は以上です。
ドレミファソラシドが綺麗に鳴らないプログラムの話
制作中のゲームにおいてコンボが続くごとに音程をドレミファソラシドと上げる実装を目指してピッチを変更するスクリプトを書きました。
私が最初に書いたプログラムは
pitch = x * combo
のような単純なもの。
コンボに比例してピッチが上がっていけば、高音になって気持ち良くなるだろうと思っていました。
しかし、ドレミファソラシドではない。正直気持ち良い上がり方ではなかった。
解決策
以下のサイトの最上部の表を元に倍率を設定しました。
ミなら1.2599
ファなら1.3348といった具合です。
そうすることでド#等のCメジャースケール(ドレミファソラシド)から外れる音を抜いて音を鳴らすことに成功しました。
詳しくない人向けにザックリ説明すると、
短2度とか長2度はピアノにおける距離の違いです。
ド→ド#は短2度
ド→レは長2度といった具合です。
白鍵のドレミファソラシドに黒鍵それぞれド#レ#ミ#ファ#ソ#ラ#シ#ド#と、
もしこれが等間隔であれば、等倍率で上がっていっても良かったのかもしれません。
しかし、ピアノをよく見ると残念ながらミ#とシ#は存在しません。
注意
本記事ではわかりやすいさ追及のためにドレミファソラシドとイタリア式表記を採用していますが、それについて学ぶ場合CDE等ドイツ式表記で学ばれることをお勧めします。