Unity:CSharp

# マテリアル

## 色を設定する

GetComponent<Renderer>().material.SetColor("\_Color", Color.red);
マテリアルのコピーが発生するそうなので、同じ色をあちこちに設定したいなら色を設定するのではなくマテリアル自体を入れ替えたほうが良いかも。

# 時間

http://docs.unity3d.com/ScriptReference/Time-realtimeSinceStartup.html

http://docs.unity3d.com/ScriptReference/Time-deltaTime.html

http://docs.unity3d.com/ja/current/ScriptReference/Application-targetFrameRate.html

# 座標系変換

## ワールド→ローカル

transform.InverseTransformPoint(worldVec3);

http://docs.unity3d.com/ja/current/ScriptReference/Transform.InverseTransformPoint.html

## ローカル→ワールド

transform.TransformPoint(localVec3);

http://docs.unity3d.com/ja/current/ScriptReference/Transform.TransformPoint.html

# システムの言語を取得する

UnityEngine.Application.systemLanguage
を参照すれば
UnityEngine.SystemLanguage
型のenum値として言語を取得できる。
構造体をInspectorに表示する。
構造体の宣言の前に

[System.Serializable]
をつけるだけ。

## RenderSetting

スクリプト上で環境光の明るさ(Window -> Lighting -> Scene -> Environment Lighting : Ambient Intensity、Unity4だとEdit -> Render Settings だったらしい。)なんかを弄りたい場合はここの ambientIntensity をいじる。
他にも fog とか skybox とかをいじるのもここ。

## 真っ暗闇を作る

DirectionalLightのIntensityだけ0にしても真っ暗闇にはならない。
環境光やその反射も0にするとようやく真っ暗闇になる(それでもskyboxは真っ暗にはならない)。

## クォータニオン

回転角と回転軸ベクトルからクォータニオンを作る
Quaternion.AngleAxis([回転角(degree)], [ベクトル(Vector3)]);
すぐに忘れるのでメモ。

## クォータニオンから回転角を得る

↑の逆。

Quaternion.Angle(クォータニオン, Quaternion.AngleAxis(0, [回転軸に垂直なベクトル(Vector3)]))
得られる値はDegree角。

## 二つのクォータニオンA→Bへ間を補完しながら回転する

Quaternion q = Quaternion.RotateTowards(A(Quaternion) , B(Quaternion), d(float));
dは最大変化角(degree)。

## Cursor

### マウスカーソル関連の処理に必要なクラス。

Unity4まではScreenオブジェクトの管理下にあったものが、5になってから変更されたんだってさ。

#### マウスカーソルをウインドウの外に出さない

Cursor.lockState = CursorLockMode.Confined;

#### マウスカーソルをウインドウ上で非表示にする

Cursor.visible = false;
適当なオブジェクトのStartイベントでやればOk。

http://www.section31.x0.com/gamedevelopment/unity/unity-%E3%82%AB%E3%83%BC%E3%82%BD%E3%83%AB%E5%87%A6%E7%90%86%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6/

## ビルボード(というか常にカメラにオブジェクトの正面を向ける)スクリプト

```
   void Update () {
       transform.LookAt(transform.position + Camera.main.transform.rotation * Vector3.forward, Camera.main.transform.rotation * Vector3.up);
   }

```

## 入力系いろいろ

### キーボード入力

bool Input.GetKey(KeyCode key)

キーコードを引数に指定する。

### マウスボタン入力

bool Input.GetMouseButton (int button)

ボタン番号を引数に指定する。

#### マウスポインタなどの入力

float Input.GetAxis(string axisName)
axisNameは"Mouse X"、"Mouse Y"など。
Edit -> Project Setting -> Input でInspectorが開くので確認できる。
変更したり追加したり感度調整したりも可能。
ジョイスティックなどの入力もここで設定できる。
入力範囲は-1.0～+1.0。

### ジョイスティック

Xbox360ジョイパッド
左スティック左右 getAxis X Axis 左マイナス
左スティック上下 getAxis Y Axis 上マイナス
右スティック左右 getAxis 5th axis (Joystick) 左マイナス
右スティック上下 getAxis 6th axis (Joystick) 上マイナス
左右トリガー getAxis 3rd axis (Joystick) 右マイナス\*
十字キー左右 getAxis 6th axis (Joystick) 左マイナス
十字キー上下 getAxis 7th axis (Joystick) 下マイナス
Aボタン getKey joystick button 0
Bボタン getKey joystick button 1
Xボタン getKey joystick button 2
Yボタン getKey joystick button 3
LBボタン getKey joystick button 4
RBボタン getKey joystick button 5
Startボタン getKey joystick button 7
Backボタン getKey joystick button 6
左スティックボタン getKey joystick button 8
右スティックボタン getKey joystick button 9

* Xbox360のパッドはLRアナログトリガーが一つの入力として扱われ、右トリガーが0～-1.0、左トリガーが0～+1.0、両方を同時押しすると相殺して0.0になってしまう。

# プレファブ

いろいろサンプル探してもどれも

public transform myPrefab;
とかやってインスペクタでプロパティに設定しているのばかりだった。
名前指定できんのかね?と思ってやっとみつけたのがこれ。
できないわけないんだよな…。

http://qiita.com/2dgames\_jp/items/8a28fd9cf625681faf87

// プレファブを取得
GameObject prefab = (GameObject)Resources.Load ("Prefabs/Shot");
// プレファブからインスタンスを生成
Instantiate (prefab, position, Quaternion.identity);
動的生成元のプレファブは Resources フォルダにまとめておく。
これはプロジェクト内のどこにあっても良いらしい。