【Unity/C#】2Dオブジェクトの平行移動や回転とか。
主機能+αで、オブジェクトを動かしてみる
『時計の機能だけでは、なんとなくさみしい...』
右の画像が今作っているモノの途中経過。
時計が主機能で、後々にアラート設定ができるようにしたいなーなんて考えています。
これを踏み台に、みんなの嫁が朝起こしに来る...的なのを作りたいなと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#でまたまた遊んでいたときに"処理を中断し、やることやったら元の処理に戻る"という文献を見つけまして。
PHPやMySQL、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が表示されないときに当てはまるかも。
初日ですし。
はてなブログデビュー
取り急ぎ目標は「3日坊主」回避!w
目的というより、大きな目標として、
- プログラマでもないボクが、それっぽいことが作れるようにするため。
- いっぱいあるコードやライブラリを覚え続けられるようにするため。
- アドバイスとかもらえるようなスペースを作るため。
...なんてコトを、ぼやっと考えてつくりましたー。
具体的な話題は、UnityとかC#とかPHPとかMySQLとか。
その辺りの話題になりそう。あとは、それっぽいゲームとかシステムをつくるまでをお送りしたい。
手探りで作ったもの
やっぱ他文献はありがたいなぁ、と思いました。何時間もかけて作ったのはこちらだよ!
作ったユニティちゃん2D
Space:ジャンプ、十字キー:移動(★ GAMEOVER!時は、Spaceキーでリスタート)
ご留意いただきたいこと
ユニティちゃんのライブラリを使用しています。簡単だね!ありがたいね!(http://unity-chan.com/) |