Edited at

UnityをC#で超入門してみる #4 GUIの章

More than 5 years have passed since last update.

UnityをC#で超入門してみる #3 計算の章

http://qiita.com/hiroyuki_hon/items/3326206dcedb4e5013d4

の続きです。


目次 超入門#4 GUIの章


GUI

 ラベルで文字列を表示しよう

 座標をRectクラスから指定しよう

 GUITextに文字列を代入しよう

 GUITextureを表示しよう

 GUITextureについてのメモ


シーン遷移

 シーンを移動しよう

 シーン間を移動をするためのボタンを作ろう


GUI


ラベルで文字列を表示しよう

UnityのGUIはOnGUI()の中に書くのが基本となります。

OnGUIは毎フレーム描画されている(オーバーロード関数)のだと考えると理解しやすいです。

GUIのラベルにRectで文字列の座標を指定して表示してみます。

Rectクラスは(x,y,width,height)で定義される座標系です。

従って以下の場合だとx = 0, y = 0, width = 100, height = 30 となります。

public class label1 : MonoBehaviour {

void OnGUI() {
GUI.Label (new Rect (0, 0, 100, 30), "Hello World!");
}
}

これでx = 0,y = 0 にHello World!が表示されます。


座標をRectクラスから指定しよう

二次元の座標を定義するのはRectクラスを用いると便利です。

Rectクラスの型で変数を作り、座標を決めてみます。

    public Rect zahyou = new Rect (0, 0, 100, 50);

void OnGUI()
{
GUI.Label ( zahyou, "Hello World!");
}
//出力: Hello World!

同様

    public Rect zahyou1 = new Rect (     0,   0, 100, 50);

public Rect zahyou2 = new Rect ( 50, 0, 100, 50);
public Rect zahyou3 = new Rect ( 100, 0, 100, 50);

void OnGUI()
{
GUI.Label ( zahyou1, "SCORE");
GUI.Label ( zahyou2, "Time");
GUI.Label ( zahyou3, "Cube");
}

Rectクラスを用いる例。

//Rectクラスは(x,y,width,height)で定義される座標系。

//従って以下の場合だとx = 0, y = 0, width = 100, height = 50 となる。
public class GUISetRectLabel : MonoBehaviour
{
public Rect rectTest = new Rect (0, 0, 100, 50);

void OnGUI()
{
GUI.Label ( rectTest, "Hello World!1");
//一行でも可能
GUI.Label (new Rect (0, 20, 100, 50), "Hello World!2");
}
}


GUITextに文字列を代入しよう

タグ名"kazu"で数えて、

GUITextに数値を入れて

表示

    public GUIText guitext;

private GameObject[] gameObjects;
private string s;

void Update () {

gameObjects = GameObject.FindGameObjectsWithTag("kazu");
s = gameObjects.Length.ToString();

guitext.text = s;


GUITextureを表示しよう

Create > GUITextureでGUIデクスチャが表示できる。

photoshop等でピクセル単位でテクスチャを生成して

Unityに持ってくれば

同じピクセル数のテクスチャで生成できる。


GUITextureについてのメモ

カメラの位置からの影響を受けない。

GUITextureの場所はカメラから映る場所に影響を与える。

GuiTextureのTransform 0,0,0 でカメラ画面左下に焦点が合う。

InspectorのPixelInset 0,0   でカメラ画面左下に焦点が合う。

W,Hで指定する。カメラ画面にうまく表示されない。実機で確認。


Nexus7でのテスト例

800,1280ピクセルの画像をGUITextureに入れてW800 H1280として

Nexus7(800、1280)でテストしてみたところ操作パネル部の部分を抜く必要があったので

800,1205ピクセルの画像をW800H1205 で置いてみたところピッタリはまった。


シーン遷移


シーンを移動しよう

シーン間を移動するには

Applicationクラスを利用します。

Application.LoadLevel("シーン名"); と書きます。

シーンの移動は、

File > BuildSettings で

Scenes in Buildの中に移動したいシーンを入れておく必要があります。

例えばコードはこうなります。

scene1とscene2を作成し、scene1に以下のコードを貼り付け、

ビルド画面のScenes in Buildに各シーンを入れて再生を行うと、

シーンが移動します。

    void Start () {

Application.LoadLevel("scene2");
}


シーン間を移動をするためのボタンを作ろう


public class UnitySceneMoveCS : MonoBehaviour
{

void OnGUI()
{
if (GUI.Button(new Rect(10, 20, 100, 200), "Click"))
{
Application.LoadLevel("scene2");
}
}
}


つづきます

UnityをC#で超入門してみる #5 時間と入力の章

http://qiita.com/hiroyuki_hon/items/17e573842faf39bb3d21