テラシュールブログ

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

スクリプト

【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の引数とマッチしないメソッド…

object.ReferenceEquals(someObject, null) の方が someObject == null より早い…が、盲目的に使うのは危険

先日#UnityTipsにて、中々に面白いTipsが紹介されました。 #UnityTips object.ReferenceEquals(someObject, null) is faster than someObject == null. — Mike Geig (@mikegeig) 2015, 5月 26 #UnityTipsとは 火曜日の大体夕方から夜にかけて、#UnityTipsの…

UnityでHierarchyの特定の親子構造のオブジェクトを見つける

実はパス指定でFindがかけられたそうです。マニュアルにも書いてありましたが、Find自体めったに使わないので知りませんでした。 例えば上の画像では、以下の様なコードを記述するとルート直下のSampleGame/Manager下のPlayerオブジェクトを取得します。 var…

処理を任意のタイミングで順番に実行する

先日のサウンドゲームジャムで中々に期待出来そうなゲームを作りました。 Unity Web Player | sgj2015gw このゲームでは基本的に音に合わせてゲームを進行させるのですが、昼から夜・もしくは夜から昼に変わる際にリズムに合わせて演出を行う的な物を作りま…

SendMessageに変わる新しいメッセージシステム、ExecuteEvents.Execute

Unity 4.6よりSendMessageに変わる新しいメッセージングが登場してしまいました。その名もExecuteEvents.Executeです。詳しくは下のマニュアルに書いてあります。 Unity - マニュアル: メッセージシステム この機能は、特定のインターフェースを持つコンポー…

UnityのCoroutine(コルーチン)でできる事のメモ

目次 目次 n秒後に何かする コルーチンの停止 コルーチンの一時停止 コルーチンの完了を待ち合わせる コルーチンの結果を受け取る 進行状況が表現可能な 待機 その他Tips 参考 n秒後に何かする コルーチンは、時間を絡めた処理を実装するのに便利です。例…

アプリ起動時に指定のメソッドを呼ぶ「RuntimeInitializeOnLoadMethod」に可能性を感じたが錯覚だった気が

追記版 tsubakit1.hateblo.jp Unityはゲームマネージャーを初めとした○○マネージャーを起動時にセットアップする事が出来ない為、多くの場合「○○マネージャーを作るマネージャー」をシーンに配置して、起動時にインスタンス化してもらう、起動用シーンを用意…

Unityで対象のポイントへ等速で動かす

目標位置へ等速で動かすコードです。目標時間で最終目的地に到着するような感じです。下のgifだと1秒で目標地点まで到着します。 // Unityで座標を等速直線的に動かすやつ。コメントアウト解除するとカーブエディタで他の移動パターンも作れる 解説 まず、…