なぜかUnityでtransform.Translateができなかった

なんでかわからないけどできなかった。

前は、Animatorでtransformを変えていたからできなかったれど、

今回は違った。

gameObject.transform.Translate(10, 10, 0);

こんな感じになっていたコードを、

var vec3 = gameObject.transform.position;
vec3.x += 10;
vec3.y += 10;
gameObject.transform.position = vec3;

こうしたらできた。

TypeScriptで、関数を型にする

Typescriptの型として、
「number」「string」「boolean」などとありますが、
実は、関数も型にできます!

var function1:(arg1:number, arg2:string)=>boolean;

こんな感じ。

(引数名:型, 引数名:型 .....)=>戻り値

戻り値がないときは、voidを指定できます。

どんなときにつかうの?

コールバック引数を使いたい

function progressA(callback: (msg:string)=>void) {
  callback("hoge");
}

progressA((msg) => {
  console.log(msg);
});

関数を配列とする

var fnArray:Array<(msg:string)=>void> = [];
fnArray.push((msg) => {
  alert(msg);
});
fnArray.push((msg) => {
  console.log(msg);
});
fnArray.forEach(i => {
  // 関数だから呼び出せる
  i("Hello, TypeScript!");
});

AddEventListenerの引数にも!

lib.d.tsを見てみると、

addEventListener(type: "click", listener: (ev: MouseEvent) => any, useCapture?: boolean): void;

引数listenerの型にも使われています!

TypeScript楽しい!奥深い!

Unity2D用のアニメーションするスプライト作った

(移動はjsにて)

Unity2Dのゲームを作っています

その時に作ったキャラクターをアニメーションさせてみました!

初めてのアニメーションで、データ間違えたりとかして難しかったです。

ソフトは、Edgeを使わせていただきました。

画像はこちらです。

UnityでSliceしたとき、隣同士の画像の端っこが見えてしまうので、

1px間隔を開けています。

Huemanテーマで、トップページの日付の形式を変えたい

このサイトのトップページですが、

日付が、「日 月 年」になっています。

これでは、「2016年11月」と読めてしまいます。

なぜそうなるの?

これは、このサイトのテーマ「Hueman」の設定のせいです。

早速直しましょう。

解決策

テーマファイルを変更します。この変更は、テーマの更新によって消えてしまうので、

ずっと残したいときは、子テーマを利用しましょう。

子テーマの作り方は、こちらのサイトがわかりやすかったです。

content.phpを修正

<?php the_time('j M, Y'); ?>となっているところを、
<?php the_time('Y年n月j日'); ?>に変更します。

変更すると、次のようになります。

<div class="post-meta group">
  <p class="post-category"><?php the_category(' / '); ?></p>
  <p class="post-date"><?php the_time('Y年n月j日'); ?></p>
</div><!--/.post-meta-->

content-featured.php

先ほどの編集で、一番新しい記事以外は直りました。

content-featured.phpも同じように、<?php the_time('j M, Y'); ?>の部分を変更します。

変更すると、次のようになります。

<div class="post-meta group">
  <p class="post-category"><?php the_category(' / '); ?></p>
  <p class="post-date"><?php the_time('Y年n月j日'); ?></p>
</div><!--/.post-meta-->

これで直りました!

【WordPress】MarkdownでSyntaxHighlighter Evolvedを使うとき、「<」などと変換されてしまう

WordPress - MarkdownとSyntaxHighlighterを併用する。 - Qiita
WordPressでMarkdownを利用している間にソースコードを記述しようとすると、 **<code><</code>**や<strong><code>></code></s...

まさにドンピシャでした!ありがとうございます!!


このようになっているコード。

() => { の、>の部分が見事に&gt;になってしまうんです。

そんなときは、次のように書きましょう。

ポイントは、‘‘‘と書いていたところを、divタグとショートコードで書くところです。

これで解決!budougumiさんありがとうございます。

C#で、asyncを利用した別タスクから、UIコントロールをさわる

C#で、重い処理をしているときなどに、マルチスレッドで、

別タスクからUIをさわりたいときがあるのですが、エラーが出てしまいます。

そんなときは、`Task型の関数を、awaitで実行すればいいのです。

using System.Threading.Tasks;

// 省略

async void Main()
{
    var heavyResult = await runTask(); // 1.
    label1.Text = heavyResult;
}
async Task<string> runTask()
{
    await Task.Delay(1000); // 2.
    return "hogehoge"; // 3.
}

番号はコード内のコメントの番号と対応しています。

  1. 非同期でrunTask関数を実行
  2. 別Taskでの動作の確認のために、1秒間止める。この間もUIは動作する。
  3. 1秒間たった後、文字列hogehogeを返す。
  4. 戻り値をlabelに書きだす。

別タスクで処理を行っているため、1秒待っている間も、UIは応答します。

もっとコンパクトに

別の関数に分けなくてもできます。


using System.Threading.Tasks;

// 省略

async void Main()
{
    var result = await Task.Run(async () =>
    {
        await Task.Delay(1000);
        return "hogehoge";
    });
    label1.Text = result;
}

繰り返し行う

繰り返し行うときは、一回一回、別のタスクとして実行します。
次の例は、1秒経って hogehogeと表示し、さらに1秒後に fugafugaと表示します。


using System.Threading.Tasks;

// 省略

async void Main()
{
    label1.Text = await Task.Run(async () =>
    {
        await Task.Delay(1000);
        return "hogehoge";
    });
    label1.Text = await Task.Run(async () =>
    {
        await Task.Delay(1000);
        return "fugafuga";
    });
}

応用して、「何% 完了しました」のような処理もできます。


using System.Threading.Tasks;
// 省略
async void Main()
{
    for (var i = 0; i < 100; i++)
    {
        label1.Text = await progress(i);
    }
}
async Task<string> progress(int percent)
{
    await Task.Delay(100); // 何らかの処理
    return $"{percent}% 完了しました";
}

追記
Qiitaで、NetSeedさんに教えていただきました。

  • Invokeメソッドとasync/awaitが一緒になっていたので、async/awaitの良さがわかりにくい。
  • Labelに書きだすタスクと文字列を送るタスクを分けたほうがよい。

ということだったので、変更しました。

Unity2DでRaycastを使って座標からGameObjectを取得する

Raycastの練習として、やってみました。
ほかの取り方もあるかもしれません。

Vector3 pos = new Vector3(/* 好きな値 */);
RaycastHit2D hit = Physics2D.Raycast(pos, new Vector3(0, 0, 1), 100);

// 可視化
Debug.DrawRay(pos, new Vector3(0, 0, 100), Color.blue, 1);

// コンソールにhitしたGameObjectを出力
Debug.Log(hit.collider);

このhit.colliderでGameObjectを取れます。

マウス座標からもとれるよ

このやり方だと、遠回りになるかもしれませんが、
マウス座標からとるのも簡単です!
上のコードの最初の行を、次のように変えるとできます。

Vector3 pos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

Javascriptでアニメーションを簡単に使える「move.js」を使ってみる

簡単な記法で、アニメーションをすることができます。

中では、transition-delayとかを使っているようです。

インストール

bower i move.js
  • i と書くと、installを略すことができます。

普通にやると怒られる!

中でonload時にdocument.bodyを呼び出しているので、

普通にscriptタグで読み込んでもエラーが出てしまいます。

次のように読み込みましょう!

アニメーションしよう!

まず構文。

move("クエリ")/*..... アニメーション処理 */.end();

move()からend()の間に処理を書くわけです。
処理は、公式サイトにたくさん書いてあります。
ここでは一部を紹介します。

cssプロパティを指定する

.set("CSSプロパティ名", 値)

例:

move("div.box")
  .set("opacity", 0)
  .end();

アニメーションの時間を指定する

.duration("秒数")

例:

move("div.box")
  .set("opacity", 0)
  .duration("1s");
  .end();

移動する

.translate(x, y)

例:

move("div.box")
  .translate(100, 80)
  .duration("0.5s")
  .end();

アニメーションが終わった後に実行する

.then()/* 処理 */.pop()

例:

move("div.box")
  .translate(100, 80)
  .then()
  .set("opacity", 0)
  .pop()
  .end();

例では、移動をしてから、opacityを0に指定します。

便利なので、使ってみてください!

Unity2Dでspriteがぼやける

こちらのサイトを参考にしました。

キャラクターがかわいい!!

上のブログの通りで、

Assets ビューでSpriteを選択したとき、
Filter ModeをBilinearからPoint (no filter)に変えます。

ありがとうございます!