さけのさかなのブログ

同人ゲーム開発やってます。Unity使ったりする。

【Unity】テキストにルビを表示する

追記

コードが更新されたので新しい記事。 toriden.hatenablog.com

やること

 UnityのUI.Textにルビを表示する。

コード

Unity 2019.1

github.com

使い方

 リポジトリはUnity packageとして使えるのでmanifest.jsonに追記することでインポートできる。README.MD参照。まあ大したコードじゃないのでコピペでもいいんじゃないかな。

 インポートしたら

  • 本文用のTextコンポーネントを作成し、RubyBodyTextをアタッチする。
  • ルビ用のTextコンポーネントを作成し、RubyTextをアタッチする。RubyTextは↑の本文用オブジェクトを参照しておく。
  • 二つのオブジェクトの位置は一致させておく。(ルビと本文は親子関係ににしとくのが自然でしょう)
  • コード実行
[SerializeField]
RubyText rubyText;

[SerializeField]
Text body;

void Start()
{
    var message = "{<color=red>上等</color>だ:ハイ・クラス}!! ";
    var stringWithRuby = StringWithRuby.Parse(message);
    rubyText.Set(stringWithRuby);
    body.text = stringWithRuby.TaggedBody;
}

 リッチテキストは使えません。 更新。本文のリッチテキストに対応しました。

仕組み

 ルビ表示にはBaseMeshEffectを使っている。描画はいつものTextコンポーネントなんだけど、各文字を良い感じの位置に移動させてやればルビっぽく見えるという寸法。

参考

leedcafe.com

遊宴雀おつかれさまでした、とサマーセール

store.steampowered.com

 というわけで会場ではDLカードで頒布してましたが、Steamに置いてあります

Steamサマーセール

 やってます

store.steampowered.com

store.steampowered.com

個人でSteamに開発者登録する

概要

 Q. Steamって個人でもリリースできるの? A. できます

 Steamの開発者向けドキュメントが公開されているので、これに沿って登録手順を説明する。

partner.steamgames.com

参照ページ

 ここにすべて書いてある。

Onboarding (Steamworks Documentation)

1.会社情報の登録

 個人で登録する場合にはこのように記述されている。

個人でコンテンツを所有している場合、Sole Proprietorshipと入力し、会社名には本名を記入してください。 通称やニックネームなどは入力しないでください。

2.支払い情報の登録

Steam での売上に基づく支払いの送金先となる銀行情報 (ルーティング番号、口座番号、銀行の住所等) が必要です。

 つまり、Steamからの外国送金を受け取る銀行口座が必要。そのSWIFTコードや店名、所在地のアルファベット表記を要求される。「銀行名、SWIFTコード、外国送金」あたりで検索すれば出ると思う。

 例えば三菱UFJ銀行にはこのように案内がある。

外国送金のお受け取り | 三菱UFJ銀行

 ちなみに、銀行の登録をミスっても次回の支払いに繰り越されるだけなので死なない(一敗)

3.税金情報の登録

米国と租税条約を結んでいる国の個人と法人は、W-8BEN フォームと同様の情報が必要です。

 ここでマイナンバーを使えるらしい。らしいというのは私はEINで登録してしまったので、実際にマイナンバーを使ってはいないから。「W-8BEN マイナンバー」 あたりでググるとそれっぽい記事が出るのであとは各自で判断して……。

 EINの取得は時間や労力がかかるのでお勧めしない。

4.100ドル支払う

 ちょっと記憶があいまいだけど、登録する前にまず100ドルの支払いが必要だったはず。これはゲームの売り上げが1000ドルを超えると回収できるようになるアプリ登録料というもので、ようするに回収さえできればチャラ。

Steam App Fee (Steamworks Documentation)

 よくわからんままいきなり支払いを要求されるのはギョッとするけど、とかく手続きに関してはどこで時間をとられるか分からないので、土壇場になる前に済ませておくことをお勧めします。

あとは

 ゲームごとの個別設定になる。ここまでくればあとは大したことは……あー、アップロードツールはちょっとだけ使いづらいかもしれない。きがむいたらかく。

東方遊宴雀2のこと

yuenjaku.com

 来たる23日、遊宴雀2にサークル参加します。スペースは雀-17。

store.steampowered.com

 出し物はEthanol in dungeonというゲーム。アクションゲームなんですが難産していて、どれぐらい難産かというと例大祭でリリースするつもりが伸びてまだ完成していない。ひどいな!

 具体的な進捗としてはいまSteamのレビュー待ち。レビューが通ればリリースできるんですが、通らなければ間に合わない可能性がある……。ひょっとするとリリース前のゲームのSteamカードが机に並んでいる可能性。そんな感じの瀬戸際です。ひっでえな!

 値段は300円の予定ですが、リリース間に合わなかったら金額は下げるかも。

夏コミのこと

 落選。

megabitconventionのこと

megabitconvention.com

 サークル参加申し込みした。スペースがもらえるかどうかは分かんないけど、もらえた場合は当日は取材類を拒否する予定。めんどくさいけどこれはあとでかく。

【Unity】onValueChangedを発火させずにSliderの値を変える

 Unity2019.1でSetValueWithoutNotifyメソッドが追加された。

slider.SetValueWithoutNotify(value);

// normalizedValueには対応してないのでこう書く
slider.SetValueWithoutNotify(Mathf.Lerp(slider.minValue, slider.maxValue, normalizedValue));

// toggleにも似たようなのがある
toggle.SetIsOnWithoutNotify(true);

以前は

 こう書くととりあえず動く

var tmp = slider.onValueChanged;
slider.onValueChanged = new Slider.SliderEvent();
slider.normalizedValue = value;
slider.onValueChanged = tmp;

コード

bitbucket.org

【Unity】Packageを自作する

 Unityのpackageはgithubリポジトリを参照することができる。ということで自分用のpackageを作ってみる。

github.com

github.com

f:id:enuenupi:20190529073957p:plain

 汎用的に書けてる部分ということでさしあたりコレクションと数学まわり。ファイルやインプットまわりもいけそうだけど、コンシューマ機のコードが入るので、公開リポジトリに置くとアカンのだ。

メモ

  • packageにはAssemblyDefinitionを置かないといけない。
  • packageリポジトリにpushがあってもバージョンアップを検知してくれないっぽい? つらい。

【Unity】範囲が無制限な二次元配列

やること

 負の方向にも要素を持てて、リサイズ可能な(というか勝手にリサイズされる)二次元配列を実装する。

 やりたいこととしてはDictionary<Vector2Int, T>でいいんだけど、パフォーマンス的にもうちょいマシなものを目指す。

コード

gist.github.com

こうやって使う

var array2 = new UnlimitedArray2<string>(0, 0, 8, 8); // 8x8サイズの配列
var array2[1, 2] = "hoge"; // 二次元配列感覚で使う
var array2[50, 50] = "fuga"; // 範囲外にアクセスしても勝手にリサイズされる
var array2[-1, -1] = "piyo"; // 負の値を入れても動く

// 要素をなめる。
// この場合、i : [-1, 50], j : [-1, 50]の範囲をとる。
for (int i=array2.MinX; i<=array2.MaxX; ++i)
{
    for (int j=array2.MinY; j<=array2.MaxY; ++j)
    {
        Debug.Log(array2[i, j]);
    }
}

なお

 リサイズが起こるSetを連発されると辛くなるのは見えてるんだけど、そのへんは生成時のサイズ指定で良い感じの値を入れておいてほしい。(Listみたいに多めにキャパシティを獲得しておく手はあるんだけど、二乗で利くのでさすがに怖い)