@Coddee.

Unity/C#とか、PHP/MySQLとか。ぺーぺーがプログラムの備忘録も兼ねて。

【Unity/C#】2Dオブジェクトの平行移動や回転とか。

主機能+αで、オブジェクトを動かしてみる

f:id:yadukkii:20151005234006p:plain:w150:right
『時計の機能だけでは、なんとなくさみしい...』

右の画像が今作っているモノの途中経過。
時計が主機能で、後々にアラート設定ができるようにしたいなーなんて考えています。
これを踏み台に、みんなの嫁が朝起こしに来る...的なのを作りたいなとw

で、実は図の中のちびキャラが背景で回転するようになっているのですが、これがまた詰まったトコロ。
というより、初めて使う関数や処理とかは、全部詰まってる気がする...

平行移動は「transform.Translate()」

public class moveChar : MonoBehaviour
{
    Rigidbody2D rb;
    void Start ()
    {
        rb = GetComponent<Rigidbody2D>();
    }
    void Update ()
    {
        var v = new Vector2(0.5f, rb.velocity.y);
        transform.Translate(v);
    }
}

このimageオブジェクトには Inspector>Physics>Regidbody 2D を設定した後、上記プログラムを組むと動くようにはなります。
「Vector2( X, Y )」のX軸に対し、1フレームに 0.5f ずつ進むようになっています。
これで横には進むようになったのですが、画面外に行ったり、スッスと横切るだけになったため、回転させてランダムに進むよう更に調整します。

回転は「transform.Rotate()」

    void Update ()
    {
        transform.Rotate(new Vector3(0.2f,0.1f,0.4f));
    }

「Vector3( X, Y, Z )」なので、薄っぺらい2Dオブジェクトが複雑な回転をするような動きになります。
組み合わせることで、背景にimageオブジェクトが回転しながらランダムに宙を回っているような動きが再現できました。

..まぁここまで来て、目覚まし機能が全然進んでいないことに気づき、今。
反省の念ばかり...w

【Unity/C#】現在時刻を年月日-時分秒をそれぞれ取得

目覚ましアプリを作るために、やるしかなかったんだ!

...ってことで、時刻を取得するためにめっちゃ苦戦したので、備忘録をば。

基本は System.DateTime.Now

現在時刻を取得したり、時間を扱う場合 System.DateTime.Now を使います。

using System;
public class getTime : MonoBehaviour
{
    private string datetimeStr;
    void Update ()
    {
        datetimeStr = System.DateTime.Now.ToString();
        Debug.Log(datetimeStr);
    }
}

年月日-時分秒に分解

さらに時間を限定し、それぞれ取得することができるよー。

// 取得する値: 年
datetimeStr = System.DateTime.Now.Year.ToString();
// 取得する値: 月
datetimeStr = System.DateTime.Now.Month.ToString();
// 取得する値: 日
datetimeStr = System.DateTime.Now.Day.ToString();
// 取得する値: 時
datetimeStr = System.DateTime.Now.Hour.ToString();
// 取得する値: 分
datetimeStr = System.DateTime.Now.Minute.ToString();
// 取得する値: 秒
datetimeStr = System.DateTime.Now.Second.ToString();
// 取得する値: コンマミリ秒
datetimeStr = System.DateTime.Now.Millisecond.ToString();

これを見つけるまでにどれだけ時間かけてんだよ...ってくらいですw
しかしながら、この試行錯誤の時間すら楽しくなってきたのでね。

ちなみに、表示はこんな感じ。

private void OnGUI()
{
    GUI.Label(new Rect(90, 150, 100, 50), datetimeStr, style);
}

これで現在時刻を表示する部分は出来上がりましたー。
次は、UIを充実させて、見た目をそれっぽくしてみるよ!

【Unity/C#】OnGUI関数でボタンやラベルを表示する

作成したUIオブジェクトの出力はOnGUI関数を使う

基本的に作成したオブジェクトをどうこうするには、OnGUIという関数を使うみたい。

void OnGUI()
{
    // ココに実際の処理を列記
}

関数内に、サイズや位置を調整するGUIコントロールの記述をしますー。

void OnGUI()
{
    // ラベルの出力
    GUI.Label(new Rect( X座標, Y座標, width, height ), "任意の出力テキスト");
    // ボタンの出力
    GUI.Button(new Rect( X座標, Y座標, width, height ), "任意の出力テキスト");
    // ボックスの出力
    GUI.Box(new Rect( X座標, Y座標, width, height ), "任意の出力テキスト");
    // チェックボックスの出力
    GUI.Toggle(new Rect( X座標, Y座標, width, height ), "任意の出力テキスト");
}

オーバーロード関数みたいなもんなんで注意!

上記、OnGUIは毎フレーム描画されているオーバーロード関数。
ソレを知らなかったボクは、つい繰り返し処理なんか入れちゃったもんで、
MacちゃんのCPUがMAX100%になっちゃいました...w
まぁなんとかなったのですがね。ちなみに作りたかったのはこちら。

void OnGUI()
{
    for(int togglePosY = 25; togglePosY <= 100; togglePosY += 25)
    {
        toggleBool = GUI.Toggle (new Rect (25, togglePosY, 100, 30), toggleBool, "Toggle");
    }
}

動的に個数を出力したかっただけなんですが、いろいろ意味の違う文献なんかあさっちゃって...
結構時間かかっちゃったな...。

【Unity】「yield」とコローチンという仕組み

衝撃の"処理中断"という仕組み

C#でまたまた遊んでいたときに"処理を中断し、やることやったら元の処理に戻る"という文献を見つけまして。
PHPMySQL、Webサイトの言語などを扱っていましたが、そんなことができるってなると、だいぶワクワクしていました。
備忘録も兼ねて、記述方法などをば。

「yield return」という書き方

void Start()
{
    StartCoroutine("AAA");    // 実装の際、StartCoroutineメソッドが便利。
}
IEnumerator AAA()
{
    yield return new WaitForSeconds(3);    // 3秒間、処理を中断し停止します。
    yield return new WaitForSeconds(2);    // 2秒間、処理を中断し停止します。
    yield return new WaitForSeconds(1);    // 1秒間、処理を中断し停止します。
}

例えば「3秒間待って1処理、これを繰り返す」みたいな処理をつくる場合に活かせるのかも。
ちなみにボクの場合、『カウントする処理』に使用しました。

void Start()
{
    StartCoroutine("Coroutine");
}
IEnumerator Coroutine()
{
    countDown = 3;
    yield return new WaitForSeconds(1);
    countDown = 2;
    yield return new WaitForSeconds(1);
    countDown = 1;
    yield return new WaitForSeconds(1);
    countDown = 0;
    status = "GAME_START";
}

こんな感じ。
何かと使えそうだから覚えておきます。

【Unity5】Debug.Logが表示されないときに当てはまるかも。

デバッグを使いたい、のに出てこない?

ハマっちゃったので。

  • ボタン押されてます?
  • 変数に格納された値を取り出したいのです。

いろんな用途で使われるデバッグログ。C#は、まるで初めてのボクでしたが「とりあえず値が取れているか確認したい」と思い、デバッグ方法を模索。

良い方法「Debug.Log」があったので、早速ボタンに設置しトライ...が、駄目ッ!!
悩んだ挙句、呆気無く解決したのですが、その解決方法を記録しておきます。

原因は『表示のON/OFF』機能

f:id:yadukkii:20150928012303g:plain

原因はこれ。
実は、コンソール内のエラーには『表示のON/OFF』ができるようでしてですね...
こんなんに30分ぐらい要しました...

なお、これをONにしたところ、正常にデバッグできましたー、嬉しいね。
ちなみに、以下のコードでデバッグしました。

/* オブジェクトクリック時 */
public void OnClick()
{
    Debug.Log(「ここに表示したい文字列を入れてね!」);
}

..とか言いつつ忘れるので、あくまでも備忘録として。

初日ですし。

はてなブログデビュー

取り急ぎ目標は「3日坊主」回避!w

目的というより、大きな目標として、

  • プログラマでもないボクが、それっぽいことが作れるようにするため。
  • いっぱいあるコードやライブラリを覚え続けられるようにするため。
  • アドバイスとかもらえるようなスペースを作るため。

...なんてコトを、ぼやっと考えてつくりましたー。

具体的な話題は、UnityとかC#とかPHPとかMySQLとか。
その辺りの話題になりそう。あとは、それっぽいゲームとかシステムをつくるまでをお送りしたい。

手探りで作ったもの

やっぱ他文献はありがたいなぁ、と思いました。何時間もかけて作ったのはこちらだよ!

作ったユニティちゃん2D
Space:ジャンプ、十字キー:移動(★ GAMEOVER!時は、Spaceキーでリスタート)


ご留意いただきたいこと

ユニティちゃんのライブラリを使用しています。簡単だね!ありがたいね!(http://unity-chan.com/)