表紙:2Dローグライク公式tutorial解説【Unity2018】

2018/7/4(水) ~ 8月中旬までの期間

→サボってしまいました!けど、再開しまっす。9月半ばまでやります!!

unity公式チュートリアル「2D Roguelike tutorial」の解説記事をアップ中!
※全11記事予定。毎週月・水の朝7:00にアップします。(初日のみ2記事更新)

続きを読む

一枚絵をそこそこどの端末でもきれいに出したい【解像度対応】

今回やりたいこと。

一枚絵をどの端末でもある程度綺麗に表示したい。

  • 一枚絵のうち真ん中からの一定範囲(下の絵だと16:9領域)はどの画面比の端末でも表示したい。
  • 一定範囲よりも縦幅や横幅が広い端末(下の絵だとiPhoneXやipad)では、その分広く表示したい。

f:id:snoopopo:20180424103256p:plain

続きを読む

Routationしてたらタッチイベントが取れなかった【Unity】【uGUI】

今回は、

UnityEngine.EventSystemsにあるIPointerDownHandlerだったりIPointerUpHandlerの実装クラス作って、 作ったスクリプトを適当なゲームオブジェクトにアタッチしたのにイベントが取れない!(タッチが反応してくれない!)

…ということがあったのでそれについてです。

続きを読む

Anima2d 〜恐竜の足を動かすまで編。【Unity】

今回は、2DボーンアニメやIKなどがunity上で作成・設定できるというAnima2dの記事です。

今回は初回なので、Anima2dに付いてる TRex という恐竜サンプルの足を動かすまでを目指します。

f:id:snoopopo:20180301103541g:plain

  • 導入
  • スプライト(またはスプライトアトラス)からSpriteMeshを作る
  • SpriteMeshを設定したゲームオブジェクトを作る
  • ボーン(骨)を設定する
  • ボーンの位置を合わせる
  • SpriteMesh EditorでBindする
  • IK CCD を設定する
  • アニメーションを設定する
続きを読む

TextMeshPro - ことはじめ的なやーつ!【Unity】

この記事での環境

  • Unity 2017.3.0f3 Personal(64bit)
  • TextMemsh Pro - Beta 0.1.44
  • 導入
    • ~ unity2018の場合 ~
  • UGUIのTextに代わるTextMeshProのUI用Text
  • Font Asset Creator フォントアセットを作る
  • TEXT INPUT BOX
    • Rich Text タグ
  • FONT SETTINGS
    • Color Gradient でグラデーション
    • マテリアルを使う
    • 縁取り
    • スクリプトから縁取りの色を変える
  • 関連
続きを読む

今日のjavaおっかけ(20170929):ラムダ〜streamAPIのざっくり

基本

Runnableインタフェースをラムダの書き方で実装した場合。

            Runnable runnable1 = () ->{
                System.out.println("lambda!");
            };
            runnable1.run();
  • 結果
lambda!

Runnableはご存知の通りrunメソッドしかない。 戻り値と引数もない。

なので、上記のように、runメソッドの処理を特にrunというメソッドを宣言せずに実装できた。

関数型インタフェース 「引数とか戻り値ある場合はどうなる?」

関数型インタフェースという仕組みを使う。

この後のstreamAPIも絡むので、よく使われるであろう3つについてかく。

Function<T,R>

https://docs.oracle.com/javase/jp/8/docs/api/java/util/function/Function.html

T は引数の型。R は戻り値の型を指定する。

Function<Integer, String> asterisker = (i) -> { return "*" + i; };
String result = asterisker.apply(10);
System.out.println(result);
  • 結果
*10

上記は10という数字を引数で渡して、アスタリスクの文字列を先頭に足して文字列を返す処理。

引数2つ渡したい!なんて場合は、BiFunctionなんてのもある。

https://docs.oracle.com/javase/jp/8/docs/api/java/util/function/BiFunction.html

BiFunction<Integer, Integer, String> asterisker = (i, i2) -> { return "*" + (i * i2); };
String result = asterisker.apply(10, 2);
System.out.println(result);
  • 結果
*20

Consumer

https://docs.oracle.com/javase/jp/8/docs/api/java/util/function/Consumer.html

T は引数の型。Functionの戻り値がない版?

Consumer<String> buyer = (goods) -> {
  System.out.println(goods + "を購入しました");
};
buyer.accept("おにぎり");
  • 結果
おにぎりを購入しました

Predicate

https://docs.oracle.com/javase/jp/8/docs/api/java/util/function/Predicate.html

T は引数の型。testメソッドは評価した結果をbooleanで返してくれる。

Predicate<String> buyer = (goods) -> {
  return goods.equals("おにぎり");
};
boolean result = buyer.test("おにぎり");
System.out.println(result);
  • 結果
true

Comparator として使う

関数型インタフェース、そもそもどういう使い方するの?ってところ。。

int[] numbers = {-1, 2, 0, -3, 8};
List<Integer> numbersList = new ArrayList<>();
for(int n : numbers){
  numbersList.add(n);
}

前提

まず数字が入ったリストを適当に用意した。この数字の順番をソートしたい。

Collections#sort の第二引数では、ソートする方法をComparatorで定義することができる。

本題

下記は、Comparatorをラムダで、小さい値→大きい値にソートするように書いた例。

Collections.sort(numbersList, (a, b) -> { return a - b; });

for(Integer n : numbersList) {
  System.out.print(n + ",");
}
  • 結果
-3,-1,0,2,8,

streamAPI

まず、リストなどの大元であるCollectionsstreamというメソッドがjava8から追加された。

Stream<E>を戻り値で返してくれる。

https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Stream.html

先ほどと同じように、数値型のリストに適当な値を入れておきました。

int[] numbers = {-1, 2, 0, -3, 8};
List<Integer> numbersList = new ArrayList<>();
for(int n : numbers){
  numbersList.add(n);
}

forEarch

numbersList.stream().forEach((i) -> {
    System.out.print(i + ",");
});
  • 結果
-1,2,0,-3,8,

リストの中身が変数i に入ってくるので、それをsysoutしているだけのプログラム。

forEarchConsumerを受け取るので、 今回の数値の場合だと、Constumer<Integer>を受け取っていることになる。

filter

numbersList.stream().filter((i) -> {
    return i > 0;
}).forEach((i) -> {
    System.out.print(i + ",");
});
  • 結果
2,8,

意味の通り、フィルタリングしてくれる。

filterPredicateを受け取るので、 Predicateの中で評価してbooleanの値を返しtrueのものだけ抜粋する。

map

numbersList.stream()
  .filter((i) -> { return i > 0;})
  .map((i) -> {
    return "*" + i + "*"; })
  .forEach((s) -> {
    System.out.print(s + ","); });
  • 結果
*2*,*8*,

mapFunctionを受け取るので、 Functionの中で受け取った数値を文字列として返している。