Unityでインディゲームを作る!

Unityでのゲーム制作を目指し、それに関わる話題についてのブログ

Unity

君はUnity パッケージ・ドキュメントを知っているか!?

Unityではパッケージという単位で各機能がモジュール化されており、必要な機能があればパッケージ・マネージャからインストールする、という形式になっています。 そして、そのパッケージごとに専用のドキュメントが用意されており、実はこれがかなり詳しく…

FMODでグローバル・パラメータをIDでコントロールする [PARAMETER_ID]

Unityで使うことのできるオーディオ・エンジンのひとつとしてFMODがあります。FMODでは『パラメータ』を使って、臨機応変にサウンドを変化させることが可能ですが、プロジェクト全体に作用させることの出来る『グローバル・パラメータ』がver 2.00から導入さ…

Unity Event Trigger コンポーネントを使って、自動で閉じるコントロールパネルを作る!

よくあるUIとしてアイコンをクリックするとパネルが開き、マウスカーソルがその範囲から離れると自動で閉じる、というモノがあります。これはゲームに限らず様々な分野のアプリで見かけるパターンだと思いますが、今回はこれをEvent Triggerコンポーネントを…

Unity Cinemachineを使って、ダッシュ時に自動で進行方向に向くTPSカメラを作る!

今回はUnity公式のカメラ制御システムであるCinemachineを使って、マウスなどでカメラをコントロールしつつも、ダッシュ時には進行方向に自動で向いてくれるカメラを作ってみたいと思います。 カメラの制御は特に3Dゲームで重要で、カメラ操作が多すぎるとプ…

BlenderでFBX出力時の座標軸設定とUnityインポート時の設定について

今回は、Blenderで制作したモデルをFBXとして出力してUnityにインポートする際の、特に座標系の重要な設定について書きます。 UnityとBlenderを使う上で注意すべきことは、Unityは左手系であり、Blenderは右手系であるということです。これは座標系の違いで…

Unity Timeline のActivation Track の Post-playback stateについて

UnityのTimelineにおける基本トラックの中でも特に重要度の高い、Activation Trackのプロパティ Post-playback stateについて少し書きます。アクティベーション・トラック自体は簡単に使えますが、これは目立たないながらもかなり大事な機能だと思ったので。…

UI toolKit (UIElements)を使ってScriptableObjectのインスペクターをゲームオブジェクト側に表示する方法 [ InspectorElement ]

今回はScriptableObject(スクリプタブル・オブジェクト)をより使いこなすためのエディター拡張テクニックをUI toolKitで再現しようという試みです。 内容はタイトルの通りですが、ゲームオブジェクト側のインスペクターからScriptableObjectのデータを操作…

サイバーエージェントによる『Unity パフォーマンスチューニングバイブル』を読みました! [ 感想 レビュー]

サイバーエージェントが社内研修向けに制作した本を無料公開し、その300ページ以上に及ぶ内容も合わせて話題になった『Unity パフォーマンスチューニング・バイブル』についてのレビューを書きます。 内容について まず概要としては、この本は全部で12章ある…

Unity公式によるeBook "Optimize Your Mobile Game Performance" をザックリ翻訳してみた [LTS 2020]

Unityが公式に発行しているeBook"Optimize Your Mobile Game Performance"を読み解いていこう、という企画です。最初はメモ的なモノを想定していましたが、結果的には全部で13章に渡る内容をほぼ翻訳という形で記事にしてきました。 モバイル・プラットフォ…

フリーゲーム投稿サイト Unity Roomに初めて投稿してみた!

とりあえず何か、まず発表してみようと思い、フリーゲーム投稿サイトである、Unity Roomに投稿してみることにしました。 Scene Managementをテストするために作ってみたテスト用のゲームです。FPSではありますが弾は打てず、ただ移動とジャンプをしながら、…

Unity 一度スタートさせたコルーチンを途中で止める方法(小さなエリアを追加的にロードする)[ StartCoroutine, StopCoroutine ]

処理の間に時間を挟んだり、一定時間待機した後に処理を実行するなどしたい時に使うCoroutine(コルーチン)をその実行途中で止めるための方法について書きます。 StartCoroutine(DelayUnloadScene()); という風に、StartCoroutineでコルーチンをスタートさ…

Unity UIのレイアウトが画面の解像度が変わっても崩れないようにするには![ Canvas Scaler ]

プレイヤーにとって、重要なゲームの情報を伝えるHUD(ヘッドアップ・ディスプレイ)や設定のナビゲーションを担うメニュー画面など、UI(ユーザー・インターフェイス)はとても重要な要素です。 特にそのレイアウトは重要で、環境によって崩れるなどあって…

Unity WebGLにおけるAudioについて。PlayOnAwakeやStart関数でのPlayが効かない!?

(※2022/05/12追記) 今現在、WebGLについていろいろ試しているのですが、なんかよく分からない挙動が多い!その中の一つが音楽が上手く始まらないこと! 今回扱うのは、音楽流す用のAudio SourceでPlayOnAwake設定を有効にしているのに、WebGL上では上手く…

Unity OnTriggerEnterの呼び出しがスクリプトの有効無効を貫通する!?

Unityにおける各コンポーネントはスクリプトも含めて、enabled変数(bool)でその有効無効(アクティブ状態)を設定できます。 機能を止めたい時はenabled = false;とやれば止まりますし、そのゲームオブジェクト全体を停止させたい時はSetActiveを使います…

Unity IL2CPPでビルドするにはC++コンパイラが必要なので、Visual Studio InstallerでCPPモジュールをインストールしよう!という話 [build error]

先に言ってよ!シリーズです。恥ずかしながら、IL2CPPでビルドするのを最近ようやくやり始めているのですが、ビルド開始早々にエラーが出て止まってしまう、という現象に遭遇。それで調べてみると、IL2CPPにはC++コンパイラが必要とのことでした。 考えてみ…

あけおめ!2022年を迎えて、Unityの現状とこれからについて考えてみる。

いよいよ来てしまいました、2022年。字面だけ見るとどんな近未来だよ、と思いますが、現実なのでございます。 去年の2021年において、Unityはロゴを刷新したり、Weta Digitalを買収したり等、かなりの大型イベントがあったと思いますが、そういう華やかな部…

Unityエディターでゲームを実行するとヒエラルキーに出てくる謎のDontDestroyOnLoadについて

これは何? Unityエディターでプレイヤーを起動すると、ヒエラルキー上に出てくるDontDestroyOnLoadという何か。Don't Destroy(壊すな!)という文言から恐ろしい、触れちゃいけない何かなのかなと思っていたんですが、UnityのScene Management周りを勉強し…

Unity OnEnable の挙動についてのメモ [ イベント関数 ]

Unityには多くのイベント関数が用意されており、そこに処理を書くことで特定のタイミングで処理を実行することが出来ます。 StartやUpdate関数はお馴染みですが、OnEnableは未だに使いどころがちょっと分からない、というのが個人的な現状だったので今回少し…

Input SystemのUpdate Mode設定での注意! カメラがガクガク!? [Dynamic Update]

緊急案件です。そこそこ酷い目、と言っても一、二時間くらいの時間を無駄にした程度ですが、Input Systemを使っていて、とある問題に遭遇したのでメモしておきます。なんかカメラがガクガクする、などの症状になる方には参考になるかもしれません。 マウス、…

Unity エディターのシーン・カメラの位置、画角をゲーム・カメラに反映、コピーする方法 [Unity 2021]

Unityエディター内での作業に欠かせない、Scene Camera。これを動かして、Unityシーン内を飛び回ることが出来ます。私達がUnity Editorのシーン・ビューとして見ているのが、このScene Cameraがレンダリングしている映像です。 エディター内では、いわゆるFP…

Unity Post Processingの各パラメータをスクリプトから操作する方法について[ URP ポスト・エフェクト ]

Unityでの画作りに欠かせない存在となっているポスト・エフェクトをC#スクリプトから操作する方法について簡単にまとめます。なおユニバーサル・レンダーパイプラインでの実践となるので、ご了承ください。 シーンにGlobal Volumeを作成、Post Processing Pr…

Unity TextMeshProのテキストをスクリプトから操作する、変更方法について [ UI text ]

2021.2以降、Unity UIでのテキストはTextMeshProに完全に置き換わりつつあるようで、今回はそのテキスト内容をどう変更するかについてです。 TextMeshProはもはやUnityの基本システムであり、標準でパッケージがインストールされています。問題は以前(Legacy…

Unity Input SystemでマウスポインタからRaycastを飛ばし、狙ったオブジェクトの色を変える! [ マウスカーソル ]

Input Systemが正式導入されて、二年ほど経つわけで今更なのですが、しばらくUnityに触ってなかった自分のような者にとっては、なかなか触りにくい新機能でした。 しかし、そうも言っていられず、最近ようやく触り始めていて、その素晴らしさに感激している…

物理演算、衝突判定、コライダーの検出などで使うLayerMaskについて [Raycast, Collider, Culling-Mask]

Layer(レイヤー)とは、ゲーム・オブジェクトを分類したり、あるいは物理演算や衝突判定において、各レイヤー間でぶつかるかどうかを設定したりするのに使える、Unityの基本システムの一つです。 ビルトイン(組み込み)・レイヤーとして、DefaultやTranspa…

Unity Universal Render Pipelineでデカールが使えるようになった!! [ Decal ]

Unity 2021.2の新機能として、デカール(Decal)機能がユニバーサル・レンダーパイプラインに追加されました。 デカールとはシーン内のオブジェクトにマテリアルを貼り付ける(投影する)機能であり、壁にステッカーやマーク、ポスターを張り付けたり、あるい…

UnityのGetComponentInParentとGetComponentInChildrenの挙動おかしくなってないですか?と思ったら勘違いでした。

少し気になったことがあったので書きます。環境はWindows10でUnity2020.3.22です。お前の使い方、環境が悪い!案件だったらすいません。と、この記事を書いた後に調べてみたら、どうやら自分の勘違いでした! 結論から言えば、GetComponentInParentやGetComp…

Unityシーン内の同一オブジェクトに対する自動ナンバリングの設定について [Unityエディター 命名規則]

デフォルト設定での表示 シーン内でオブジェクトをコピーしたり、プレハブを何個も置いたりした時に自動で数字がオブジェクト名に書き加えられるのですが、その設定について。 とあるオブジェクト、ここではCubeとします。これをコピーペースト、あるいは複…

Unity Learn『モバイルアプリのための3Dアートの最適化』原題"Arm & Unity Presents: 3D Art Optimization for Mobile Applications"を読みました。

Unity Learnは、Unityが提供する学習サービスであり、去年だかに有料コンテンツが無料化されたりと、Unity独学においては欠かせない素晴らしいサービスです。 今回はそこに掲載されている、3Dアート最適化に関する学習コースをレビューしたいと思います。 3D…

Unity : インポート不可になったアセットをダウンロード先から手動で消して解決した [Archimatix]

とあるアセットをプロジェクトにインポートすると次のようなダイアログが表示され、インポート出来ないという事態が発生しました。Unity 2018.3以降です。 インポートが始まって直ぐに表示され中止される 何回やっても上手くいかず、アセット作者に連絡取る…

UnityのPrefab周りについて 2018.3.x 2019.1以降の動向も合わせて

Prefab(プレハブ)はUnityにおけるゲームオブジェクトをカプセル化、アセット化するためのもの。カプセル化とは、必然性のある一個体として存在を定義する、ということです。プレハブ化により制作を効率的に行い、かつ多数のオブジェクトを一元管理すること…