【Unity】テキストにルビを表示する
追記
コードが更新されたので新しい記事。 toriden.hatenablog.com
やること
UnityのUI.Text
にルビを表示する。
ルビ表示テスト pic.twitter.com/IRpOPGLTnm
— enu@遊宴雀2 雀-17 (@_enu) 2019年7月10日
コード
Unity 2019.1
使い方
リポジトリは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
コンポーネントなんだけど、各文字を良い感じの位置に移動させてやればルビっぽく見えるという寸法。
参考
遊宴雀おつかれさまでした、とサマーセール
というわけで会場ではDLカードで頒布してましたが、Steamに置いてあります
今日の遊宴雀でenuさん(@_enu)制作のゲームが【雀-17】で頒布されるよ!あたいは霊夢さんとみすちーのイラストでお手伝いしました。よろしくね! pic.twitter.com/AjjxjXkntY
— プーアカちゃん🌰 (@puakachan) June 22, 2019
Steamサマーセール
やってます
個人でSteamに開発者登録する
概要
Q. Steamって個人でもリリースできるの? A. できます
Steamの開発者向けドキュメントが公開されているので、これに沿って登録手順を説明する。
参照ページ
ここにすべて書いてある。
Onboarding (Steamworks Documentation)
1.会社情報の登録
個人で登録する場合にはこのように記述されている。
個人でコンテンツを所有している場合、Sole Proprietorshipと入力し、会社名には本名を記入してください。 通称やニックネームなどは入力しないでください。
2.支払い情報の登録
Steam での売上に基づく支払いの送金先となる銀行情報 (ルーティング番号、口座番号、銀行の住所等) が必要です。
つまり、Steamからの外国送金を受け取る銀行口座が必要。そのSWIFTコードや店名、所在地のアルファベット表記を要求される。「銀行名、SWIFTコード、外国送金」あたりで検索すれば出ると思う。
例えば三菱UFJ銀行にはこのように案内がある。
ちなみに、銀行の登録をミスっても次回の支払いに繰り越されるだけなので死なない(一敗)
3.税金情報の登録
米国と租税条約を結んでいる国の個人と法人は、W-8BEN フォームと同様の情報が必要です。
ここでマイナンバーを使えるらしい。らしいというのは私はEINで登録してしまったので、実際にマイナンバーを使ってはいないから。「W-8BEN マイナンバー」 あたりでググるとそれっぽい記事が出るのであとは各自で判断して……。
EINの取得は時間や労力がかかるのでお勧めしない。
4.100ドル支払う
ちょっと記憶があいまいだけど、登録する前にまず100ドルの支払いが必要だったはず。これはゲームの売り上げが1000ドルを超えると回収できるようになるアプリ登録料というもので、ようするに回収さえできればチャラ。
Steam App Fee (Steamworks Documentation)
よくわからんままいきなり支払いを要求されるのはギョッとするけど、とかく手続きに関してはどこで時間をとられるか分からないので、土壇場になる前に済ませておくことをお勧めします。
あとは
ゲームごとの個別設定になる。ここまでくればあとは大したことは……あー、アップロードツールはちょっとだけ使いづらいかもしれない。きがむいたらかく。
東方遊宴雀2のこと
来たる23日、遊宴雀2にサークル参加します。スペースは雀-17。
出し物はEthanol in dungeonというゲーム。アクションゲームなんですが難産していて、どれぐらい難産かというと例大祭でリリースするつもりが伸びてまだ完成していない。ひどいな!
具体的な進捗としてはいまSteamのレビュー待ち。レビューが通ればリリースできるんですが、通らなければ間に合わない可能性がある……。ひょっとするとリリース前のゲームのSteamカードが机に並んでいる可能性。そんな感じの瀬戸際です。ひっでえな!
値段は300円の予定ですが、リリース間に合わなかったら金額は下げるかも。
夏コミのこと
落選。
megabitconventionのこと
サークル参加申し込みした。スペースがもらえるかどうかは分かんないけど、もらえた場合は当日は取材類を拒否する予定。めんどくさいけどこれはあとでかく。
【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;
コード
【Unity】Packageを自作する
【Unity】範囲が無制限な二次元配列
やること
負の方向にも要素を持てて、リサイズ可能な(というか勝手にリサイズされる)二次元配列を実装する。
やりたいこととしてはDictionary<Vector2Int, T>
でいいんだけど、パフォーマンス的にもうちょいマシなものを目指す。
コード
こうやって使う
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
みたいに多めにキャパシティを獲得しておく手はあるんだけど、二乗で利くのでさすがに怖い)