Unity入門おぼえがき

Unityのキャッチアップ中に得た知識を覚書として記す。順次更新予定✋
スクショめんどいので文字のみで✋
やる気でたらスクショする👍

## 1. スクリプトで扱う変数の値をGUI上でいじりたい
手順
1. 使いたいオブジェクトに適応させたいスクリプトをアタッチ
2. スクリプトに以下のように記述

```csharp:ImageBackgound.cs
using UnityEngine;
using System.Collections;

public class ImageBackground : MonoBehaviour {
    //回転速度
	public float rotateRate; //<-ココ！この部分がinspector上で編集可能になる

	void Update () {
        //背景画像を回転
		transform.Rotate (0.0f, 0.0f, rotateRate);
	
	}
}

```

## 2. 自前のフォントを利用したい
手順
1. フォントファイル(ttfやotfファイル)をAsset/Fontsなど、適当なフォルダに配置
2. 「スクリプトで扱う変数の値をGUI上でいじりたい」のrotateRate変数と同じように、クラス中に
`public GUIStyle guiStyle;`というように記述
3. 上記が記入されたスクリプトがアタッチされたinspectorを参照し、1.で配置したフォントを指定

これでフォントの種類やサイズなどを指定できるようになる


>Unity: iOS上でGUILayout.Labelのフォントサイズを大きくしたい
http://hamken100.blogspot.jp/2012/04/unity-iosguilayoutlabel.html

## 3. タイミングを細かく指定して何かのアクションをさせたい
コルーチンつかう。

## 4. スワイプやダブルタップ、ロングタップなどのジェスチャーを使いたい
AssetStoreから買うしか無い。
> Input.Touches - Asset Store
https://www.assetstore.unity3d.com/jp/#!/content/3283

もしくはこれを改造か？
> Unity 2D 画面タッチでカメラ移動する
http://qiita.com/shell/items/b8d6bd2c4bd42913189e

## 5. シーン遷移時にフェードイン・アウト演出をしたい
以下を導入すれば可能
デバッグモードをオフにするときはプレハブのinspectorからDebug Modeのチェックを外す
> 【Unity】シーン遷移時のフェードイン・フェードアウトを実装してみた
http://naichilab.blogspot.jp/2013/12/unity.html

## 6. Unityのゲーム画面を綺麗にするライティング
> Unityのゲーム画面を綺麗にするライティング - テラシュールブログ
http://tsubakit1.hateblo.jp/entry/2014/09/14/170753

##7.スクリプト上でオブジェクト（のコピー、あるいはプレハブ）を生成したい
instantiate命令を使う
> Unity - スクリプトリファレンス:: Object.Instantiate
http://docs.unity3d.com/ja/current/ScriptReference/Object.Instantiate.html

##8. スクリプト上で別オブジェクトを取得したい

**方法その1. Find系命令でオブジェクト名(or タグ)から探して取得**
自発的にオブジェクトを取得したい場合はコレ。
`GameObject object = GameObject.Find("ObjectName");`
`GameObject object = GameObject.FindWithTag("Tag");` etc...

**方法その2. public変数を実装してインスペクタで指定しておく**
最初からオブジェクトが明白な場合はコレ。
`public GameObject object;`

**方法その3. イニシャライザ（のようなもの）を実装してオブジェクトを渡す**
プレハブから生成したオブジェクトに初期値として渡したい場合はコレ。
GameObject以外の値もモチロン渡せる

```csharp:foo.cs
private GameObject gameObject;
private bool isInitialized=false;

void Initialize(GameObject object){
     this.gameObject = object;
     this.isInitialized = true;
}

void Update(){
     if (!isInitialized){
          return;/*イニシャライズが終わるまでupdateしない*/
     }
     /*ここにupdate処理*/
}
```
```csharp:bar.cs
public Foo foo; /*インスペクタで指定したプレハブ*/

void createFoo(){
      Foo object = Instantiate (foo);
      object.Initialize(this);
}
```
## 9. ブレイブフロンティアみたいなUIの動き
>iTween.MoveFromとMoveToでブレイブフロンティアっぽい動きのあるUIを作ってみる
http://bribser.co.jp/blog/itween-movefrom-and-moveto-make-ui-animation-like-brave-frontier/

## 10. iTweenによる任意な値の変化付け
`iTween.ValueTo()`を用いる
以下にオブジェクトのスケールを断続的に変化させ、伸縮を繰り返すサンプルコードを載せる

```csharp:Action.cs
using UnityEngine;
using System.Collections;

public class Action : MonoBehaviour {

	// Use this for initialization
	void Start () {
		iTween.ValueTo(gameObject,
　　　　　　　　　　　　　iTween.Hash(
　　　　　　　　　　　　　　　　"from",1,"to",0.9f,"time",1.0f, //1秒かけて1~0.9の間で変化
　　　　　　　　　　　　　　　　"easeType", "easeOutQuart",　   //動きの種類
　　　　　　　　　　　　　　　　"looptype","pingpong",　　　    //ループの種類
　　　　　　　　　　　　　　　　"onupdate","ScaleChange"       //呼び出す関数
　　　　　　　　　));
	}

	void ScaleChange(float value){
		FirstStarGrow.transform.localScale = new Vector3(value, value, 1);
	}

}
```
>【Unity】Unity&Orthelloによる２Ｄゲーム作成⑤ - ハルシオンシステムの気ままBlog
http://halcyonsystemblog.blog.fc2.com/blog-entry-36.html