ヤマコーブログ

五流ゲームプログラマー山木光石がUnityでなんかゲームを作るブログ。 なお言語はC#がメインです。 基本的に備忘録とかになります。

2014年01月

UnityのUIアセットの代名詞(らしい?)、NGUIを購入しました。 


そしてImport!



使い方がわからん。 



とりあえず参考リンクを貼ることにします。要勉強 。

http://terasur.blog.fc2.com/blog-entry-100.html

http://memodoro.blog.fc2.com/blog-entry-17.html 

 

親オブジェクトにOnMouseOverなり、OnMouseDownなりを実装した時、
それの子オブジェクトも反応して欲しいって場合がありますよね。
親オブジェクトだけにOnMouseDownを組むと、子オブジェクト上では反応しません。

そこで、子オブジェクトのスクリプトにこれを入れます。

    void OnMouseOver()
    {
        transform.parent.gameObject.SendMessage ("OnMouseOver");
    }


子オブジェクトのMouseOverをそのまま親オブジェクトのスクリプトに送ります。
これでOK!他にも応用が効きそうですね。

参考
http://unitygeek.hatenablog.com/entry/2012/11/16/165807 

キー入力はゲームの実装には必須です。

とりあえず、キーボード入力の上下左右を取得する内容になります。
Input.GetAxis("Horizontal")は、入力時間で徐々に0から1(あるいは-1)まで増加していきます。ですので、このデバッグログには0から1の値が表示されることになります。


    void Update () {
        
float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");

        if (horizontal != 0) {
            Debug.Log ("hori" + horizontal);
        }

        if (vertical != 0) {
            Debug.Log ("ver " + vertical);
        }
    }



オブジェクトを動かすときはこんな感じにすると、なめらかに動きます。
ただし、このやり方ではオブジェクトにぶつかった時に貫通します。
カメラの移動とかにはちょうどいいかも。
    
public float speed;
    
void Update () {
        
float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");

        transform.position  += new Vector3(horizontal * speed0vertical*speed);
    }





参考
http://neareal.net/index.php?ComputerGraphics%2FUnity%2FTips%2FBasicInput
http://www40.atwiki.jp/spellbound/pages/1333.html 

Unityでゲームデータを保存するのは非常に簡単。

PlayerPrefs.SetInt("GOLD"gold);

なんとこれだけ!
この場合、goldというint型の変数を保存します。

データの読み込みは、

void Awake () {
        gold = PlayerPrefs.GetInt("GOLD");
    }

このように、起動時に読み込むようにしてやれば復帰できます。


これだけでゲームデータのセーブはできますが、突然クラッシュした場合は保存されません。
データの保存されるタイミングは「正常に終了した」タイミングだそうです。

なので、
    public float INTERVAL = 300.0f;
    public float timer ;
    private void Update()
    {
        timer -= Time.deltaTime;
        if (timer <= 0)
        {
            PlayerPrefs.Save();
            timer = INTERVAL;;
        }
    }


5分に一回、PlayerPrefs.Save()を呼び出せばOK!(かな?)
インターバルは好きに編集できますので適当にどうぞ。

参考
http://d.hatena.ne.jp/nakamura001/20110712/1310441315
http://terasur.blog.fc2.com/blog-entry-291.html 
 

↑このページのトップヘ