Entries from 2014-01-01 to 1 year

スクロールバーの位置をスクリプトからの命令で最下部にしたい

チャットとかで入力したメッセージ一覧をスクロール形式で表示する。 最新のメッセージが最下部に出る仕様の場合、入力のたびにスクロールバーを最下部に移動させたい。以下のようにする。 (スクロールバーの細かい作り方は省略) private Vector2 scrollPo…

Unity - Networkを介したゲーム第一歩

とりあえず単純なオブジェクトが動くサンプルを作ってみた。 別ウィンドウで開くとその分だけオブジェクトが増え、それぞれの動きが同期しているのが見えるはず。 Unity Web Player | NetWorkTest追記:連続で開くと個々の部屋になるようだ。一つ開いてJoine…

Google driveを使用したUnityゲームの公開(WebPlayer)

・Googleドライブのインストール方法は省略。検索すればいくらでも出てくる。・Googleドライブフォルダを開き、公開したいフォルダを作成/開く、公開したいWebPlayerのhtmlとunity3dファイルを置く。 ・タスクバーのGoogleドライブアイコンをクリックし、「…

経由地を通ってオブジェクトを移動させたい(iTween/path)

iTweenを使用した際、指定した点を経由する形でオブジェクトを移動させたい場合。たとえば点Aにあるオブジェクトが点Bに到達した後点Cに行きたいとして iTween.MoveTo(B) iTween.MoveTo(C) とかやった場合、MoveToBを実行した直後にMoveToCが実行され、事実…

SendMessageはDisableなスクリプトも呼び出してしまう

あるオブジェクトに複数のコンポーネント(スクリプト)がアタッチされており、各コンポーネントに同じ名前の関数がある場合。 オブジェクトに対しSendMessageでその関数を起動するとDisableであるコンポーネントの関数も呼び出される。美しい解決方法がない…

異なるコンポーネントをループで一度にON/OFFする

通常、コンポーネントのON/OFFは[取得したコンポーネント].enable = true/falseで行える。 配列にコンポーネントを保存すればループで一度にスイッチできる。 が、当然異なるコンポーネントには使用できない。似たような処理を行うが、種類が異なるコンポー…

NGUI ボタンに引数を添える

ボタンに引数を添えて押した時の処理を呼び出す方法。 EventDelegateを使用する。Delegateって継承だっけ。 とりあえず細かい部分は棚上げしてのやり方。※1 UiButtonType = ENUMで定義している独自型。 ※2 uam = ボタン押した時に呼び出したい関数が入ってい…

RayCastでLayerMaskが動かない場合

RayCastを使用する際、LayerMaskを指定することで特定レイヤーのみ検知/特定レイヤーを除いての検知が可能だが、どうもその際の構文は距離を明示している必要があるもよう。 if(Physics.Raycast(ray, out hit, 1000.0f, panelLayer)) // if(Physics.Raycast…

NGUI ボタン操作時に実行される関数をスクリプトで決定する方法

NGUIでボタンが押された時に呼び出される処理はインスペクタ内「UIButton(Script)/On Click」「UIEvent Trigger(Script)」の各イベントに対応したNotifyに関数を記述したスクリプトをアタッチしたゲームオブジェクト(な、長い……)をセットし、ドロップダウ…

NGUI ボタン操作別呼び出されるアクションメモ

NGUI アクション別呼び出される関数最近NGUIを触り始めたので、メモ代わりにアクション別の呼び出される名前一覧。 間違ってても泣かない。・マウスアイコンがボタンの上に行く→HoverOver ・上記の状態からボタン領域外に出る→HoverOut ・HoverOver/HoverOut…

アニメーションへの第一歩

Unity-Chanを使用して色々試した結果のメモ。 なお各語は自分用なので正しいものと一致するとは限らない。・Animator Contollerの設定およびAnimator操作 Projectの中でCreate->Animator Controllerを作成する。 Animator Controllerを選択しAnimator Window…

球体の表面の座標を取得したい(直交座標→極座標変換)

たとえばとある「球体の表面を這い回る」あるいは「ある点からX,Y,Z的に等距離の座標」を取得し続けたい場合…… 球座標変換を行う。2角度と球体半径から直交座標を取得する。 @Start // 親オブジェクトから与えられた角度(度数)をラジアン角に変換、極座標…

パーティクルシステムShurikenの簡単な使用方法 とりあえずレベル

Shurikenて首をはねそうな名前だな……いや別に手裏剣が首はねするわけじゃないんだけど。作成の方法は2通り。 GameObject -> Create Other -> Particle System or Component -> Effects -> Particle System 前者の方法だとEmptyなオブジェクトが生成され、そ…

オブジェクトに画像を貼り付ける際のあれやこれ

開発中に簡単な画像を貼り付けたい場合、Photoshop等で作成→UnityでAssetsに読み込み・テクスチャで使用という流れが簡単、というか今そうやってる。 透過画像を貼り付ける時の動作について自分用メモ。Aオブジェクト Photoshop側では「背景透過・文字シェイ…

スクリプト内で動的にPhysicsMaterialを設定する/Resources.Load

基本的にはPrefab側で設定しておき、インスタンスを生成するのがベターだろうが時にはスクリプト内で動的に物理挙動を設定したい場合もある。かもしれない。 一応以下の方法で可能なことは確認した。PhysicsMaterialの設定というか、Resources.Loadの使い方…

レイヤー番号からレイヤー名を取得する/LayerMask.LayerToName

CollisionやTriggerで接触・取得したオブジェクトをレイヤー名で管理したい場合。hogehoge.gameObject.layerに格納されているのはレイヤーの番号なので、名前で管理したい場合は文字列に変換する必要がある。 void OnCollisionEnter(Collision col) { Debug.…

文字列操作/string.format

キャプションを画面に表示する際、文字は右詰めの方が都合がいいこともある。 また、点数などを表示する場合は表示桁数の管理も必要。 参考:http://www.atmarkit.co.jp/fdotnet/dotnettips/116formatint/formatint.html string formatString; GUI.Label(new…

即座にオブジェクトを破壊する/Object.DestroyImmediate

オブジェクトの破壊やコンポーネントの破棄は通常Object.Destroyを使うが、どうもこの命令は実行から反映されるまでに若干のディレイがある模様(同フレーム内で処理されるらしいが) 同一の処理の中でコンポーネントの有無などをifで参照する場合等、そのデ…

【未解決】クラスのデータに複数のオブジェクトからアクセスすると最後の情報で統一される

【現象】処理の中で同一のPrefabから(同種の/しかし別々の)GameObjectを生成し、GameObject付随の処理の中で他クラスで定義しているデータにアクセスし使用した際、すべてのGameObjectで最後の情報に統一される。 【具体的には】爆弾を設置する時、火力は…

Unity C# 小技集

適宜追加。 int型変数をstring型に変換するToString() string mesg = "hogehogeMessage"; int beastNum = 666; mesg += beastNum.ToString(); Debug.Log(mesg); OnCollision*系列とOnTrigger*系列の違い OnCollisionEnter(Collision)/Exit/StayとOnTriggerEn…

ユーザ側でのキーコンフィグを可能にする/Input.GetButton

Update中にif(Input.GetKeyDown(KeyCode.Q))のような形で記述すれば特定のボタンを押したときの動作を実装できるが、この方法だと完全にQのキーしか使えない。 ユーザ側でのキーコンフィグを可能にする。と同時に対応キーを後々から変更したい場合に対応する…

オブジェクトの破壊時にイベントを起こす:OnApplicationQuit/OnDestroy

なにかのオブジェクトが破壊された時に、自動的にイベントを起こしたい場合。http://answers.unity3d.com/questions/169656/instantiate-ondestroy.htmlそのオブジェクトをDestroyする時にコードを実行するのでなく、破壊される時に勝手に実行してほしい場合…

スクリプトからゲームオブジェクトにコンポーネントを追加/削除する:AddComponent / Destroy

HierarchyでのD&DやInspectorでのAdd Componentではなく、スクリプト内部で動的にコンポーネントを追加/削除する。 以下、C#ファイルactRemoteBombを追加するケース。 private actRemoteBomb remoteBombComp; : : remoteBombComp = null; : : // 追加の前に…

インスペクタ側から値を設定するビルトイン配列:Builtin Array

スクリプト側でpublicの配列の宣言のみするとインスペクタ側でサイズ(要素数)および配列要素の中身を設定可能。 public GameObject[] ItemInstances;

他スクリプト内の関数を使用する:GetComponent

他のオブジェクトに接続しているスクリプト内の関数を使用したいケース。 FindやGetComponentは重いらしいので極力Start関数内で一度だけ使用する。 // オブジェクト・コンポーネント取得用変数宣言. GameObject bombCtrl; bombGenerator bombGene; : : // F…

線を飛ばしてその途中接触した全オブジェクトを取得する:RaycastAll

Raycastは最初に接触したオブジェクトまでだが、この方法は接触した全オブジェクトを取得可能。 以下サンプルコード // 指定地点最寄のセンターポイントを取得する. // Y軸(高さ)は引数として関数呼び時に指定する. public Vector3 GetNearestCenterPoint(…