テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

スクリプト

【Unity】Unity 2018のPlayerLoopで、Unityが毎フレーム呼ぶ処理を無効にしたり、Update"前"に独自の処理を追加したり

今回はUnity 2018から追加されたPlayerLoopを使用して、Unityのイベント(UpdateやFixedUpdate等、Physicsホニャララ)といった処理に独自のイベントを追加したり、カスタマイズしたりします。 Unityが呼ぶイベント 使い方 標準イベントの一覧を取得する Pla…

【Unity】Unity 2018のEntity Component System(通称ECS)について(1)

今回はC# Job Systemと並びよく紹介されるEntity Component System…通称ECSについてです。実行可能なビルドと簡単ではないプロジェクトが公開されているので、ついでに紹介していきます。 ただ経験的に、UnityのECSの「データ指向設計」と「ECS」と「Unityの…

【Unity】特別なコードをあまり書かずに "別シーン内のオブジェクト" へアクセスするアイディア

Unityで別オブジェクトの情報を取得したり操作する上で、最も簡単な方法はInspectorに露出して参照先をセットすることです。 ただ、このアプローチはシーンを分割する事になると厄介です。UnityのSceneは別のSceneのオブジェクトに対してアクセス出来ないの…

【Unity】”テクスチャの差し替え” で切り替わるスプライトアニメーションを作成する手順

今回はテクスチャーを切り替えてアニメーションを切り替える方法についてです。 上の画像のようにスプライトやAnimationClip、OverrideAnimationControllerを用意せずともキャラクターを差し替えることが出来ます。 目次 Unityのスプライトアニメーション テ…

【Unity】IExposedPropertyTableを使った、アセット↔シーン間連携

今回はPlayableDirectorで使用しているIExposedPropertyTableを利用してみます。 正直言えば使える機能では無いように思いますが、この実装からTimelineのResolver運用周りを見直すことが出来たら幸いです。 IExposedPropertyTableはアセットからシーン内の…

【Unity】Unity非対応のフォーマットを対応アセットのようにする、ScriptedImporterという機能

Unityが標準機能的には非対応なフォーマットのデータをインポートした際、まるで対応フォーマットのようにファイル自体をアセットとして使用可能にする「Scripted Importer」という機能の紹介です。

【Unity】UnityScriptをC#に変換する unityscript2csharp

2017系でレガシー判定のUnity Script(Java Script)をC#に変換するプロジェクトについてです。 Unity Scriptは死んだ!何故だ! Unity ScriptをC#に変換する 関連 Unity Scriptは死んだ!何故だ! かつてUnityのチュートリアルやサンプルプロジェクトで使用…

【Unity】ボタンを押したら音が出る…を、出来る限りコードを書かずに実現する

今回は、ボタンを押した際に音を出す方法を聞かれたので、ココにも書いておきます。音の制御というよりは「ボタンを押した時に音を出したい」という要望を叶える為の物です。 ボタンを押したら音が出る Audio Soureceはスピーカー、Audio Listenerは耳 Audio…

【Unity】公式の「テキストベースなアドベンチャーゲーム」を作るチュートリアル

先日、ついにUnity公式のテキストベースなアドベンチャーゲームのチュートリアルがチュートリアルムービー一覧に追加されました。 「テキストベース」なアドベンチャーゲーム テキストベースなアドベンチャーと言えば、現状日本製のモバイル・コンソール(AA…

【Unity】エディタ拡張でstaticなフィールドに置いたインスタンスが、コンパイル/再生時に初期化される問題の対策について

長ったらしいタイトルですが、その通り「エディタ拡張で、staticなフィールドに置いたインスタンスがコンパイル/再生時に初期化される問題の対策について」です。 初期化されるパラメータ 例:シリアライズしないデータがある場合 解決方法 シリアライズ出来…

【Unity】Unity4で書いたコードをUnity5向けに変換する「Script Updater」

Unity 4とUnity 5はAPIが幾つか異なる Script UpdaterによるUnity 5対応 アセットのインポート以外でもお目にかかるケース Script Updateに頼らない No Thanksした後でScriptUpdaterを起動したい Assembly UpdaterでDLLをUnity5向けに変換 Script Updaterの…

【Unity】Unityの新マルチプレイ機能、通称uNETのHLAPIがオープンソースへ

ひっそりとuNETのソースコードがオープンになりました。 Unity-Technologies / Networking / source / — Bitbucket オープンソース化したのはuNETのHLAPI(ハイレベルAPI)な部分です。 例えば「NetworkManagerHUD」とか、「NetworkTransform」など、そうい…

【Unity】Startのコルーチン完了後にUpdate処理を開始したい

Startのコルーチン完了後にUpdate処理を開始したい 遅延処理が完了するまでUpdateを呼ばない それ以外のコルーチン化 コールバックの中断 関連 Startのコルーチン完了後にUpdate処理を開始したい Unityのコールバック、例えばStartやOnTriggerEnter等は実は…

【Unity】シーン間でスコアを共有 まとめ

Unityの特性として「シーン遷移(LoadLevel)時にオブジェクトを破棄」します。このため、オブジェクトにデータを持たせている場合は破棄されてしまします。 しかしシーン内で解決する問題だけでなく、ゲームの進行では必ずといってよいほどシーン間のデータ…

【Unity】ゲーム起動直後に1度だけ処理を行う

ゲーム起動時に1度だけ処理を行います。 サンプル 今回は解像度を半分にする処理に使用します。これはStartやAwakeでやった場合、そのコンポーネントを持つオブジェクトが呼ばれるたびに解像度が半分になる…といった挙動になるためです。なので1回しか起動し…

【Unity】ScriptableSingletonでエディタウィンドウ間の情報共有

目次 目次 エディタは値を忘れる ScriptableSingletonを使う 感想 エディタは値を忘れる Unityエディタは実は物忘れが激しいです。 何が言いたいかと言えば、エディタウィンドウ等で使用されているstaticな変数を「ゲームの再生時やコンパイル時に忘れる」と…

【Unity】ScriptableObjectのコールバックが呼ばれるタイミングについて

ScriptableObjectのOnEnableが呼ばれるタイミングについてです。 PreloadAssetsに設定した場合 ゲーム起動直後に呼ばれます。シーンのロードすらされていないため、OnEnableでFindをかけても何も取得することは出来ません。 ちなみにエディタ起動時にも呼ば…

【Unity】ScriptableObjectを使用して、Scene間・Object間のデータ共有を行う

今回はScriptableObjectを利用してデータの共有を行う方法を紹介します。 この方法は「Find系が不要」かつ「事前にデータを定義する事が可能」で「Awakeが呼ばれる前にセットアップが完了」し「オブジェクト間・シーン間でデータが共有できる」といった扱い…

【Unity】ゲームの進行をコルーチンで制御する

Tanks!のプロジェクトを眺めていた所、ゲームの進行に面白い書き方をしていたのでメモします。 https://www.assetstore.unity3d.com/jp/#!/content/46209 Tanksのゲームの流れ Tanksのゲームの流れはシンプルです。 ゲームの開始時、敵の戦車と味方の戦車を…

【Unity】プロジェクトに不要なアセットをプロジェクトから退避するエディタ拡張を作ってみた

追記:Unity 2017で動作しない不具合があるかもしれません。現在確認中 Unityのプロジェクトには様々なアセットが含まれます。そういったアセットの中から「ゲームの進行に必要な最低限のアセット」を残しプロジェクト外へ退避するアセットを以前に自作して…

【Unity】Unityの内部APIを確認する方法、呼び出す方法

Unityを触っている上で、この機能はどのように実装されているのかや、公開されていないAPIを呼び出したい事があります。 その辺りの話です。 Unityの中のAPIを確認する アセンブリブラウザでUnityエディタの中のコードを確認します。 MonodevelopでSolution…

【Unity】エディタ拡張が「private」なメンバにアクセスする、多分一番楽な方法

Unityで「エディタからのみ外部アクセス可能なメンバ変数」を実現する方法の考察 - Qiitaqiita.com エディタ拡張が「private」なメンバにアクセスする、多分一番楽な方法についてです。この方法はEditor外にも処理を書かなければいけないので良くないですが…

【Unity】ゲームの作り方 Unityで覚える遊びのアルゴリズム

バンダイナムコスタジオ社内で行っている、Unity ワークショップの資料です。 だそうです。 内容は、非常に基本的な部分を綺麗な絵で説明しているので、割とわかりやすいと思います。 <a href="http://www006.upp.so-net.ne.jp/chewee/uni-mini-hon/works…

【Unity】コンソールログを検索する方法

Unityで開発を行っていると、膨大なコンソールログから1行を探して確認することが必要なケースが発生することがあります。そんな時は、Editotr.Logを確認します。 例えば自分の場合「ゲームが使用していないファイルをプロジェクト外に退避する」エディタ拡…

【Unity】UnityでAES暗号を使うアセット AesEncryptor

何やら暗号化の話でTLが盛り上がってたので、すこしAssetStoreを探した処、面白いアセットが見つかりました。 AES Encryptor 機能は凄い単純で、AvoEx.AesEncryptor.Encryptで暗号化、 AvoEx.AesEncryptor.Decryptで復号化です。 string orgText = "コナン君…

「同じNameSpaceで、同じクラス名の、異なるクラス」は実在した!

ここでクイズです 以下の問いに答えよ Test1.csとTest2.csがAssetsフォルダ直下とAssets/Pluginsフォルダ直下にそれぞれ1つずつあります。Assets/Pluginsフォルダ下のTest1コンポーネントをシーンから呼び出した場合、プログラムはどのように動作するでしょ…

Unityエディタの起動時のみスクリプトを実行する

先日から作ってる"Unity プロジェクトの中に、要求するアセット群が含まれない場合、該当ファイルのあるアセットを表示する奴ですが、やはりシンプルさを保つには「エディタ起動時にファイルが足りなければダイアログを表示すべき」との結論に至りました。な…

コンパイルエラー発生時でもエディタ拡張を使用する方法

今回は前回の応用で、プロジェクト内に必要なアセットが無い場合、AssetStoreからダウンロードしてもらう機能を作成してみました。 Unity プロジェクトの中に、要求するアセット群が含まれない場合、該当ファイルのあるアセットを表示する奴 pic.twitter.com…

【Unity】コンポーネントを設定したフィールドを非表示にする

最近ResetコールバックでFieldを登録するアプローチにハマっています。通常は実行時にFindやGetComponentでコンポーネントの取得を行うのですが、これを事前に取得します。事前に登録するのでFind等のアプローチが使えますし、GUI操作のような煩わしさも少な…

エディター操作で登録するのが面倒なボタンのクリックイベントを、スクリプトで登録する

Unityのボタン等のイベントをシーン内に登録/保持するには、UnityEditor.EventsのUnityEventToolsを使用します。 エディタ上でメソッドを登録するメリットは3つです。 実行時にイベントの登録処理を必要としない EventListenerの引数とマッチしないメソッド…