さけのさかなのブログ

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

過去作をブラウザで動くようにする

enue.github.io

ナニコレ

  • もともと2015年の例大祭で出したゲームです。
  • HDDの肥やしになってたのでせっかくだからブラウザで動くようにした。
  • 元ネタのゲームの都合で、キャラがファイヤーとかボンバーとか言う。
  • 勢いで作ったゲームなので色々アラはあるけど、今回は単にブラウザ移植ということで変更は最低限にしてあります。
  • (でも弾幕部分は意外とそれっぽくできてるな?)

技術的なあれこれ

 Unityのバージョンで言うと5.1から2019.1.2への移行。

修正点

  • Application.CaptureScreenshot -> ScreenCapture.CaptureScreenshot
  • Graphics.DrawProceduralIndirect -> Graphics.DrawProceduralIndirectNow
  • Camera.hdr -> Camera.allowHdr
  • フォントがArialだったのをNotoFontに差し替え
    • これは元々の作りが悪くて、フォントはインポートしたものを使うべきだった。
  • EventSystemオブジェクト作り直し
    • どこかでフィールドの追加があったっぽくて、オブジェクトを作り直さないと動かなくなってた
  • BaseVertexEffect -> BaseMeshEffect
  • 文字のグラデーションがおかしくなったので手動で直す

【Unity】Tilemapの拡張機能を導入する

やること

 UnityのTilemapは機能が物足りなくて、たとえばアニメーションするタイルが使えない。

 が、github2d-extrasリポジトリ拡張機能が公開されており、アニメーションタイルなんかもこれで使えるようになる。この記事はこれの導入方法について。

手順

 PackageManagerに登録する。

 やり方としては、プロジェクトのPackages/manifest.json

"com.unity.2d.tilemap.extras": "https://github.com/Unity-Technologies/2d-extras.git#package",

を追記すれば良い。

 こんな感じ。

f:id:enuenupi:20190508065414p:plain

 するとこうなる。

f:id:enuenupi:20190508070056p:plain

リポジトリ

 ぜんぶここにかいてある

github.com

例大祭と、GWセールのこと

4/25~ GWセール

 Switch版MSTがGWセールで20%オフになってます。Switch版の値下げは初ですので、この機会にどぞ。

ec.nintendo.com www.famitsu.com

5/5 例大祭

 サークル参加です。スペースはG20b オートリ電子。

 出し物は……間に合わない。ペーパー頒布(無料)になります。

 当初のもくろみとしては、事前にSteamでリリースして、イベントではDLカード頒布!だったものの、思いのほか開発に時間がかかったので間に合わずです。

これからの予定

  • 例大祭までに:Steamストアページ公開
  • 例大祭:ペーパー頒布
  • 例大祭後:Steamでリリース。早くて5月中旬ぐらい。
  • 遊宴雀(6/23):DLカード頒布

開発中画面

f:id:enuenupi:20190428164025p:plain f:id:enuenupi:20190428164159p:plain

イラストはプーアカちゃんさんにお願いしました。

楽屋裏

  • なんで時間がかかってるかというと、元々作ろうとしたやつが結局あんまりおもしろくならなかったので潰して作り直したから。
  • DLカード自体は例大祭時点でも作れるんだけど(キーの発行は可能なので)、さすがにリリース前のゲームのコードを会場頒布するのは、ちょっと、なあ……ということで頒布物はペーパーにしときます。

NotoFontでフランス語に対応するときの注意事項

www.google.com

 日本語のゲームを出すうえで、NotoSansCJKjpを使う人も多いんではなかろうか。

 このフォントには当然アルファベット26文字も含まれるので、英語版を開発する場合にも同じフォントで充分で、差し替える必要はない。

 ではフランス語版はどうだろうか?このままNotoSansCJKjp一本で済ませられればラクできるわけだが。

NotoSansCJKjpに含まれないフランス語アルファベット

 フランス語アルファベットの構成文字は以下の通り。

ABCDEFGHIJKLMNOPQRSTUVWXYZÉÀÈÙÂÊÎÔÛËÏÜŸÇŒÆ
abcdefghijklmnopqrstuvwxyzéàèùâêîôûëïüÿçœæ

 そしてNotoSansCJKjpの中には、Ÿだけが含まれていない。(小文字のÿは含まれている。)

 このため、フランス語を完璧にサポートしようとするとNotoSansCJKjpでは不足で、フォントを差し替えるか、別のフォントを使う必要が出てくる。アチャー。

Ÿという文字について

 ただし、Ÿはフランス語でも使われることがかなり珍しい文字で、せいぜい20個程度の単語でしか見られず、しかもそれらは固有名詞なんだそう。

 なので、ゲーム内に使う文字を調べてみて、Ÿが必要ないということは有りえる。そうなればめでたくNotoSansCJKjpでフランス語版を組むことができるわけだ。(実際MSTでは必要なしと判断した)

 とまあ、イマイチ座りの良くない結論になってしまうんだけど、完璧を目指した場合にやるであろうランタイムでのフォント差し替えはとてつもなくめんどいので、これはしゃーなしよな。

余談:NotoSansCJKに含まれる文字

 こっから先は余談。

 ところでNotoSansCJKに含まれる文字セットってどういうものか?

www.google.com

 公式にはこう書いてある

This includes the full coverage of CJK Ideographs with variation support for 4 regions, Kangxi radicals, Japanese Kana, Korean Hangul, and other CJK symbols and letters in the Basic Multilingual Plane of Unicode.

 韓国語日本語中国語以外の文字については、「Unicode基本多言語面にある文字」と書かれている。が、さきほどのŸ(U+0178)はというと、まさに基本多言語面に含まれている文字なのである。えー。つまり。基本多言語面にある文字のうち、なんらかの基準で選定した文字セットがNotoSansCJKには採用されている、と。そんなことある?

 結局、使いたい文字が含まれているかどうかは実際に確認しとけっつーことですわな!

Ÿがハブられる文字セット

 さらに余談の余談。

 小文字のÿが含まれるのに大文字のŸがないとか不自然だろ、と思うんだけど、実際にそういう文字セットが存在する。Latin-1(ISO 8859-1)というラテンアルファベット文字コードがそうだ。MySQLを触ってる人には見おぼえがあるんじゃなかろうか。まあ好きではないだろうけど。

 わざわざNotoSansCJKjpの文字セット策定にあたってLatin-1を参考にしたわけではないとは思うけど、ともかく、文字コードまわりはなかなか複雑怪奇なことが多くてしんどいすなあ。

【Unity】UI.Textの禁則処理・V2

前回

toriden.hatenablog.com

 禁則処理リポジトリをforkして性能を上げた。

今回 V2ブランチを作る

 設計を自分になりに使いやすくしていきます。

 コア部分の処理にTextコンポーネントは必要ないのでMonoBehaviourから独立。自動改行処理がAPIとして柔軟に使えるように。

 あとはちょいちょいバグっぽいところを潰したり。

 さしあたり今から導入するならこっちのほうがいいんじゃないかなあと。

github.com

issue

RichTextタグの処理がうまくいかない場合がある

 たとえば<color>タグ。これはUI.Textにおいては閉じタグがない場合はタグ扱いせず普通に文章として表示されるんですが、HyphenationJpnではこの場合もタグとして処理してしまい(つまり文字幅ゼロとしてしまう)齟齬により変なところで改行が発生してしまう。具体的には行が適切に改行されず、はみ出してしまうという現象が発生します。

 しかしこれをどうにかするのは骨。きっちりUnityの内部処理と同様にタグを処理しなきゃいけない。

latin文字だけの行が横幅をオーバーする

 禁則処理として数字・アルファベットが連続する場合は改行で分断しないようになっています。そのためたとえばAAAAAAAAA....みたいなアルファベットのみの長ーい1行がある場合、改行せず横幅がオーバーします。めんどいですね。

【Unity】UI.Textの禁則処理、改良版

tsubakit1.hateblo.jp

 上の記事で禁則処理に関しては紹介されているんですが、コードを見るともうちょっと良くできそうだなあ、ということでforkして直してみた。Unity2018.3.6f1。

コード

github.com

修正内容としては

 です。とりあえず軽くなるぞって感じ。

 ちなみに、元バージョンについてはArray.ExistGC負荷が高く、そこをIndexOfに差し替えるだけでかなりマシになったりします。

 インターフェースはちょっと気になるところがありつつ(文字列を渡すのがGetTextメソッドなんだけど、そこはSetTextでは?)、ひとまず互換性優先でそういうのは直さず。なので元バージョンを使ってるという人は差し替えで動くはず。

そもそも

 けっこう古いプロジェクトで更新もないので、禁則処理についてはみんな別の方法でやってたりするんでしょうかね?

techblog.kayac.com

追記

 そもそもこの処理、Textコンポーネントがなくてもできるじゃん(Fontがあれば十分)、なのでコア部分を別クラスに分けたほうが良さそう。

 というわけで次回、ブランチを切ってアレンジしていく。

toriden.hatenablog.com

サイト作成

 サークルサイトなんですが、いいかげんhtmlで書くのもかなりしんどいな、ということで移行していこうと思います。といっても旧サイトは更新停止するだけでそのまま残す方針です。

新URL

enue.github.io

 機能としてはストアページや作品紹介ページへのハブになればいいのでデザインはシンプルでいい、はず。アイコン画像ぐらいはあると見やすくなったりはするんだけど、そういうのは気になったら追々やるとして。

メールアドレス

 ちなみにですがシレっとメールアドレスも新しいのになってます。古いやつはちょっとプライベート用と混同しててあんまり良くないなあ、ということで。古いアドレスも引き続き有効なので気にしなくていいです。

使ってるサービス

 GitHub Pages。markdownで書いたらウェブページとして公開できる、便利。スマホ対応とかはエンジンに任せとくのが楽ね。