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

今回やりたいこと。

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

  • 一枚絵のうち真ん中からの一定範囲(下の絵だと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の中で受け取った数値を文字列として返している。

Xcode8.3でxvimを使う

この記事は

https://github.com/XVimProject/XVim

xvimとはxcodevimが使えるようにするプラグインのことです。

今回はこれをxcode8.3に入れます。

xcodeをバージョンアップしたらxvimが使えなくなってしまったので、それの解消方法をまとめときます。

この記事は以下の記事から今回自分が必要だった部分だけ抜粋させていただきました。感謝。

www.ie-kau.net

qiita.com

試した環境

macOS sierra  Xcode8.3.2(8E2002)

本題

まず古いのが残っている場合は消します。

cd ~/XVim  // Xvimを置いてるディレクトリへ移動。このディレクトリは適宜変更してください。
make uninstall
rm -r ~/XVim

証明書を作って、それを登録します。

https://github.com/XVimProject/XVim/blob/master/INSTALL_Xcode8.md

証明書を作る手順は上の通り。

ここでは上の手順の通りに XcodeSigner という名前で作ったので、それを登録します。違う名前で作った人は XcodeSignerの部分を変えてください。

sudo codesign -f -s XcodeSigner /Applications/Xcode.app  

keith さんのコードを使う

xcodeを8.3にした時点で何度かインストールをしてみたのですが、make自体が通らなくなってしまいました。

issueに上がっていたみたいですでに対応してくれた人がいるらしいのでそちらのソースでコンパイルすることにします。

github.com

git clone https://github.com/keith/XVim.git
git fetch origin xcode-8.3-release
git checkout xcode-8.3-release
make

これでmakeが通るようになりました。

UUIDを登録する

github.com

手動でやってもいいんですが、一括でやってくれる上のツールをインストールします。

gem install update_xcode_plugins
update_xcode_plugins

自分の場合、これでうまく行かなかったので以下をしたところ、無事xvimが有効になりました。

update_xcode_plugins --unsign