テラシュールブログ

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

スクリプト

【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で座標を等速直線的に動かすやつ。コメントアウト解除するとカーブエディタで他の移動パターンも作れる 解説 まず、…

UnityのAttribute(属性)についてまとめてメモる。

Unityの属性について紹介します。 目次 目次 属性(Attribute)とは 属性の表記ルール Unity標準の属性 Inspectorを拡張する属性 SerializeField TooltipAttribute SpaceAttribute HeaderAttribute MultilineAttribute TextAreaAttribute HideInInspector NonS…

UnityのuGUIでスクロールビューを作る

Unity4.6で追加したuGUIでスクロールバーを作る方法について紹介します。 大体こんな感じのスクロールバーを作ります。 作り方 まず、リストに表示するノードのプレハブを用意していきます。 適当な横長のImageを用意します。名前はNodeとします。 左の方に…

uGUIでノベルゲームのようなものを作る、その2 コマンドによる挙動の管理

uGUIでノベルゲームのようなものを作る…の続きです。 今日はコマンド周りをやります。 uGUIでノベルゲームのようなものを作る。その1 - テラシュールブログ uGUIでノベルゲームのようなものを作る。その1 - テラシュールブログ シナリオをテキストファイル…

Warningメッセージを消す

Unityで適当にコードを書いてると、沢山ワーニングがでてとても精神衛生上悪いです。これを消す方法を紹介します。 このボタンを押すと消えます。ぽちっとな ちがう、そうじゃない。 まあ、ココでも消せますが、これでは全てのWarningが消えてしまいます。な…

Unityエディタ上で作成したMeshをOBJファイルとして出力する

以前紹介したメッシュの結合ですが、OBJを吐き出せるようにしてみました。 ここからパッケージをダウンロード出来ます。 Unityのシーン上に配置したモデルを結合する - テラシュールブログ Unityのシーン上に配置したモデルを結合する - テラシュールブログ …

Unityのゲームにスマホ向けなバーチャルパッドを追加する

Unityで取り敢えずゲームを作る過程で「Input.GetButton」系を使用している場合でも、タッチパネルに対応する方法を紹介します。 今回もSample Assetsシリーズです。 新 Standard Assets候補、Sample Assets (beta) - テラシュールブログ 新 Standard Assets…

NPC・敵の巡廻ルートを変更する[Unity]

特定のルートを巡廻する際、ルートを変更したくなるケースが有ります。例えば「人が詰まっていて通行できない」ようなケース、「障害物が置いてあり通過出来ない」ケース、「ステージが変化し最短ルートが変更された」ケース等々です。 メッシュに移動コスト…

特定ルートを巡回したりする方法[Unity]

ゲームを作成している内に、村人や敵兵を特定のルート巡廻させたり、障害物を特定ルートで動かしたり、レーシングゲームでカートを周回させたり等々、そういったギミックを作りたくなります。 この「Unityで特定のルートを巡回する」方法は、パっと思いつく…

さよならBooさん・・・

Unity 5からBooがサポートされなくなるみたいです。 Documentation, Unity scripting languages and you – Unity Blog Documentation, Unity scripting languages and you – Unity Blog 理由はごく単純に使ってる人がほとんど居ないから。Unityデベロッパー…

Unityで無料でコードを書かずにゲームを開発したい人の Behaviour Machine Free

Unityで「ゲーム」を作ろうと思った場合プログラミングは避けられません。 そのプログラミングの過程で「C#」もしくは「UnityScript」を選択する事となりますが、最近おもしろい選択肢を見かけました。 Behaviour Machine Free Behaviour Machineは、ビジュ…

Resourcesから非同期でインスタンス化する

Unity 2018系はこちら tsubakit1.hateblo.jp --- Unity 4.5.3よりResources.LoadAsyncが追加されました。これは今までResources.Load時に停止させていた時間を停止させず、非同期でロードする命令です。 しかし、実際にコレを扱ってみて失望するかもしれませ…

Unityの整形時のインデントをMonodevelopを使わず整形する

ソースコードを整形すると、ソースコードが読みやすくなります。少なくともコーディングに慣れていない内はソースコードを整形すべきと思います。*1 ソースコードを整形するのが面倒くさい場合は、ソースコードを自動的に整形するが使用できます。これならば…

UnityのベクトルとQuaternionによる回転について

Quaternionでベクトルを回す Quaternionの加算 Quaternionを求める サンプル その他 Quaternionは回転情報です。transform.rotationに格納されています。 このQuaternion(回転)ですが、Vector3(ベクトル)と合わせると、Vector3を回転させる事ができます…

UnityのSceneViewにラベルやボタンを表示する

Unityのシーンビューへ線へオブジェクトの影響範囲等を記載する場合、Debug.LineやGizmoで行います。 その派生で、シーンビューへ文字列を表示したい場合、若干面倒ですがOnDrawGizmosやOnDrawGizmosSelectedコールバック内でHandle.Labelを使用します。 Han…

UnityのCameraが使う3つの座標系

目次 目次 3つの座標系 スクリーン座標 ワールド座標 ビューポート座標 各座標系を使用するケースと変換 WorldToViewportPoint ScreenToWorldPoint ViewportToWorldPoint 関連 3つの座標系 Unityの使用するカメラでは、3つの座標系があります。すなわち「ス…

Unityで接触したブロック達を吹っ飛ばす

物理演算的には正しくなくとも、表現的に物体がぶつかった時にふっとばすのはよくある事だ。また爆弾等でふっ飛ばしたい場合もある。そんな時は「周囲のコライダーを全部持ってきて、その中でrigidbodyがあるオブジェクトに対してAddForceを実行」みたいな事…

Unityで、Editor シーン上にプレハブとしてオブジェクトを配置する

プレハブとしてオブジェクトを作成するには、以下のようにコードを記述します。#if UNITY_EDITOR var tile = UnityEditor.PrefabUtility.InstantiatePrefab(prefab.gameObject) as GameObject; #else var tile = Instantiate(prefab.gameObject) as GameObje…

シーン内のオブジェクトをInstantateするメリット

弾を生成する場合、以下の手順を行うのが一般的だ。弾のprefabを生成Resources、もしくは参照から1を取得2をGameObject.Instantiateする実はGameObject.Instantiateは、別にプレハブでなくとも実行できる。 GameObject.Instantiateの本質は「GameObjectをク…

rigidbodyの落下位置を予測するには…

剛体の落下位置を物理学で予測する。 powerの分だけ左にふっとばす感じのソースコードを用意。rigidbody2dでもrigidbodyでも良い。rigidbody.AddForce(Vector3.left * power, ForceMode.Impulse); もしくは rigidbody2D.AddForce(Vector2.right * -power, Fo…

AddComponentに気をつけろ!

UnityのGameObjectコンテナを使う面白い使い方として、AddComponentがある。この機能は、GameObjectに特定のコンポーネントを追加し、その参照を得る物だ。これを使うと、オブジェクトに動的に機能を追加する事が出来る。しかし、このAddComponentを利用する…

一時的にLoadLevelする際にGameObjectが破棄されないようにする

フラグの管理についてアレコレ考えていたら、ゲームオブジェクトを次のシーンへ受け渡す面白いアイディアが浮かんだ。 Unityでゲームを作っている場合、LoadLevelによるシーン遷移をよく利用する。LoadLevelはメモリをスッキリして参照関連や変数を上手い感…