8.14.2011

GUI作成 その1

GUIを作成しようと思ったので触ってみました。
以下のスクリプトを記述し、ボタンと垂直スライダーバー を表示してみました。

using UnityEngine;
using System.Collections;

public class GUITest : MonoBehaviour
{
	public GUISkin gui_skin = null;
	private float scroll_vertival = 0;
	
	// Use this for initialization
	void Start ()
	{
		
	}

	// Update is called once per frame
	void Update ()
	{
		
	}
	
	void OnGUI ()
	{
		if (gui_skin != null)
		{
			GUI.skin = gui_skin;
		}
		if (GUI.Button(new Rect(10, 10, 100, 100), "Button"))
		{
			print("Click");
		}
		scroll_vertival = GUI.VerticalScrollbar(new Rect(200, 10, 100, 100), scroll_vertival, 10, 0, 100);
	}
}
結果はこんな感じに
メンバーのgui_skinをpublicにしたのでスキンを変えたいときはプロジェクトに追加したGUISkinをドラッグして追加するだけなので結構簡単にさまざまなバリエーションが作れそうです。
もう少し触ってみたいと思います。

8.08.2011

複数のカメラの配置

複数のカメラの配置してみました。
カメラの切り替え
各カメラのTagを[MainCamera]にしました。
特にこのTagでないとだめということはありませんが、以降のスクリプトで使用するためそうしています。

GameObject-CreateEmptyでカメラコントロール用のオブジェクトを配置し、スクリプトを設定します。

以下のスクリプトを記述してみました。
using UnityEngine;
using System.Collections.Generic;

public class GameController : MonoBehaviour
{
    private List<GameObject> cameras = new List<GameObject> ();
    private int current_camera_index = 0;

    // Use this for initialization
    void Start ()
    {
        var objects = GameObject.FindGameObjectsWithTag ("MainCamera");
        foreach (GameObject game_object in objects)
        {
            if (objects != null)
            {
                cameras.Add (game_object);
            }
        }
    }

    // Update is called once per frame
    void Update ()
    {
        if (Input.GetKeyDown (KeyCode.Keypad5))
        {
            //参照カメラ切り替え
            ++current_camera_index;
            if (cameras.Count <= current_camera_index)
            {
                current_camera_index = 0;
            }
            for (int i = 0; i < cameras.Count; ++i)
            {
                cameras[i].camera.enabled = i == current_camera_index;
            }
        }
    }
}
これで実行すれば5キーを押すたびにカメラが切り替わります。

画面分割
おまけで画面分割を。
カメラのNormilizedViewPortRectを編集すれば画面分割ができます。
例えばカメラを2つ配置し、
片方はX:0,Y:0,W:0.5,H:1、
もう一方をX:0.5,Y:0,W:0.5,H:1にすれば
簡単に画面を縦に割ることができます。

8.07.2011

SceneViewでオブジェクトが表示されない

Unity3D3.4にしてからSceneViewにObjectが表示されないというのに悩まされていたのですが、解決しました。なぜかレイヤーの「Default」のチェックが外れており、表示されないようになっていました・・・なぜ・・・UnityAnswersでも結構そういう人いたみたいなので一応メモって置こうとおもいました。

8.04.2011

StringComparison.Ordinalについて

StringComparison.Ordinalでカナがどういう順番に並ぶのか必要になったので少し調べてみました。
using System;
using System.Collections.Generic;

namespace Ordinal
{
    class Program
    {
        static void Main(string[] args)
        {
            //3.0以降はコレクション初期化が楽で良いですね
            var targets = new List<String>
            {
               "ア", "ァ", "イ", "ィ", "ウ", "ゥ", "エ", "ェ", "オ", "ォ",
               "カ", "ガ", "キ", "ギ", "ク", "グ", "ケ", "ゲ", "コ", "ゴ",
               "サ", "ザ", "シ", "ジ", "ス", "ズ", "セ", "ゼ", "ソ", "ゾ",
               "タ", "ダ", "チ", "ヂ", "ツ", "ッ", "ヅ", "テ", "デ", "ト", "ド",
               "ナ", "ニ", "ヌ", "ネ", "ノ",
               "ハ", "バ", "パ", "ヒ", "ビ", "ピ", "フ", "ブ", "プ", "ヘ", "ベ", "ペ", "ホ", "ボ", "ポ",
               "マ", "ミ", "ム", "メ", "モ",
               "ヤ", "ャ",  "ユ", "ュ", "ヨ","ョ",
               "ラ", "リ", "ル", "レ", "ロ",
               "ヮ", "ワ", "ヰ", "ヱ", "ヲ", "ン",
               "ヴ", "ヵ", "ヶ", "ー"
            };
            //ソート
            targets.Sort((String rhs, String lhs) => String.Compare(rhs, lhs, StringComparison.Ordinal) );
            foreach (var str in targets)
            {
                System.Diagnostics.Debug.Write(str);
            }
        }
    }
}

これの実行結果が
ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶー
となりました。
てっきり、清音・撥音・濁音・半濁音の順なのかと思っていたのですが、撥音・清音・濁音・半濁音の順なのですね。unicode順だから当然と言えば当然ですが

それと今回ソースコードを貼るに当たって 自分用メモブログ:blogger でソースコードを綺麗に表示する方法を参考にさせていただきました。
これで<pre class="brush:csharp"> </pre>
で囲めばc#ハイライトが適用されるわけです。

UnityでLua

Unity3DでLuaInterfaceを呼び出しているのを見たので同じようにやってみました。Unity3d in gameenginejp : Windows で C# から Lua をつかう
dllの配置と配布時にさえ気をつければ簡単に動かせるのでほかのライブラリでもいろいろと試してみようと思います。しかし、Unityなんでもできるね。

心機一転

新しいPCが手に入ったので3.4もでたので改めてUnity3DインストールしたらMonoDevelopが使いやすくなっている気がする。バージョンがあがったからということにしておこう。