@Coddee.

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

【はてな】”はてな記法”でソースコードにハイライト!

お世話になってます、はてな記法

ソースのハイライト機能、これが使いたくて、はてなを始めたと言ってもいいかも。
備忘録に残しておきますね。
(言えない…今までの記事を書くのに、ハイライトのやり方を毎回調べていたなんて、絶対に言えない…!!)
 

はじめに「>|python|」終わりに「||<」で囲むだけ

他にもやり方はあるみたいですけど、はてな記法だと、このやり方。
もちろん、一からその仕組みを組み上げるのもいいかもだけど、そのためだけのブログじゃないからね。
…本当、備忘録だわこれ…

【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";
}

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

【PHP】CodeIgniterのActiveRecordクラス「get_where」で取得した値の取り出し方

簡単で導入しやすいライブラリ「CodeIgniter」

今まで「Perl」とか「CakePHP」とかにお世話になっていたけれど、最近はCodeIgniterで満足しています。
導入も削除も簡単で、しかも日本語ライブラリがすごく充実している。
参考までにこちらから、ご確認くださいね。

少し前、CodeIgniterを使っていたときに迷ってしまったのが、
ActiveRecordクラスを使ったときの値の取り出し方。

// 駄目だったやつ
$query = $this->db->get('tableName');
var_dump($query);

こんな感じにやっても、お望みの値が取得できなかった...
そんな若かりし頃、これもまた1時間ほどかけようやく解決したことを今でも思い出せますね...

解決方法は「result()」

$query = $this->db->get('tableName')->result();

実は、get()の先に「result()」をつけることで、オブジェクトとして値を取り出せることが判明。
また、配列が良い!ってヒトには『array』とつけるだけで、配列形式で取得も可能。なんと便利で簡単だった!

// 配列化する場合は"array"を入れる。(何もなければオブジェクト)
$query = $this->db->get('tableName')->result("array");

これ知ってからは、もうDBを扱うことも簡単でした。
やっぱり値が取得できたときの快感は昔もいまも変わらないですね!

【PHP】implode()、explode()、文字列を配列化するのはどっち?

配列化⇔文字列化(explode/implode)

いつも手を止めてしまうポイントが、implode関数とexplode関数。
「どっちだっけかなあ…(ググる)」が、いつの間にか、とんでもないタイムロスになっていました…そろそろ覚えます。

implode関数

配列の値を一つの文字列型に変換/格納する。配列の要素と要素の間に、指定した区切り文字を挟む。
(区切り文字指定を""にした場合には、区切らず要素の値をそのまま結合)

implode("区切り文字", "文字列化する配列");

$productCsvData = array("AAA", "BBB", "CCC");

$string = implode(",", "$productCsvData");

/**
 * $stringの中身は「"AAA,BBB,CCC"」となる
 */

PHP: implode - Manual

explode関数

一つの文字列型の値を配列型に変換し、要素に格納する。要素に格納するとき区切り文字を検出し、格納要素をふり分ける。
(区切り文字指定が""の場合には、区切らず一つの要素に打ち込む)

explode("区切り文字", "配列のためのインデックス");

$memberData = "AA-BB-CC";

$array = explode("-", "memberData");

/**
 * $arrayの中身は「array("AA", "BB", "CC")」となる
 */

PHP: explode - Manual

ちなみに

  • explode = 「爆発する」
  • implode = 「崩壊する」

という意味なのだが...なんとなくイメージに結びつかなかったので、あくまでも参考まで。

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

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

ハマっちゃったので。

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

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

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

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

f:id:yadukkii:20150928012303g:plain

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

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

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

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