開発中タイトルの紹介
試遊展示も近いので、ちょっと次回作のシステムの紹介です。基本システムとしては横スクロールSRPGなんですが、ここではMST(MagicScrollTactics)とどう違うのかを重点的に紹介しようと思います。こんなところ読んでる人はわりとディープだからね。
ターン制
MSTでは敏捷値に応じてユニットごとに行動が回ってくるシステムでしたが、次回はちょっと変えてあります。ターンという概念があり、全ユニットにそれぞれ敏捷順に一回ずつ行動がまわってきて1ターンが経過、という具合。普通のターン制だ。左上に行動順が表示されます。
行動前/行動後という概念が生まれるので、ユニットの動かし方は変わってくるかも。
(敏捷値の高いキャラがバリバリ行動するのが楽しいじゃん、みたいなのは今回パス)
クラス:サムライ
サムライは近接に特化したクラスです。刀を装備し、攻撃力が高く、パーティの主力アタッカーとなります。
サムライは行動が遅く、敵の攻撃を受けてしまいがちです。が、「行動前防御」というアビリティがあり、行動が回ってくるまでは防御状態をとることができます。敵の攻撃を耐えきり、強力な一撃をお見舞いしましょう。
クラス:メカ
今回はメカ系ユニットがいる! 武器は銃。遠距離アタッカーです。
同じ遠距離武器の弓とは違い、銃は高所に対しても命中率が下がらない特性を持ちます。ただし、銃の射線は敵ユニットや地形を貫通できないため、ステージによっては思うように活躍できないかもしれません。
(MSTでは銃の射線は敵味方に関わらずユニットを貫通できない仕様でした。プレイヤーが使うなら味方ぐらいは貫通してくれないと不便すぎるなあ、ということで変更してあります)
megabitconvention 02参加と、取材拒否のこと
来たる8/25、メガビットコンベンション02でサークル参加します。
展示予定
MagicScrollTacticsの2……ではない! えーと、同じ横スクのSRPGなのでシステム的には延長上ではあるんだけど、シリーズではない、というやつ。SaGaからロマサガみたいな……いやあれはシリーズじゃん。するとブラックマトリクスからサモナイみたいなもんですね。
取材拒否します
megabitconvention(以下メガビット) 02において、当サークルに対して行われる取材を一切拒否します。
対象
基本的に、誰によるものであってもイベントにおける当サークルの取材および撮影はすべて禁止です。ブログやツイッターに展示内容を公開するのもダメ(個人/法人問わず)。もちろん展示なわけですからゲームの説明や雑談ぐらいはやるんですが、その内容を公開してはいけない。
(「基本的に」というのは、もちろん私自身は撮影するし、イベント主催による会場の撮影等の例外はありますからね)
なお、これがこうなったら取材拒否を撤回する、みたいな条件設定は一切ありません。
趣旨(一般参加者は読まなくていいです)
メガビット02の参加資格は、かつて以下のように記述されていました。
★参加資格
インディーゲーム/同人ゲーム/フリーゲームが好きな方。
一般参加料金:500円制服女子高生割:-2000円/(先着50名) ※1時間滞在プラン
この「制服女子高生割」について、Twitterにおいて否定的な意見が出るということがありました。2019/06/16のことです。
個人が意見を表明することについては自由の範疇だと思いますが、問題はこちらのツイートです(すでに削除されているので文字に起こしています)
https://twitter.com/shinimai/status/1140210333065207808
*死に舞 @shinimai
普通に謝ればいいのに人のRTでお茶を濁す@MEGABIT_CONは最悪だと思いますね。あのような差別的な入場条件を課しているイベントは取材したくないし、参加する開発者も取材したくないと思います。頭を冷やして謝罪すればいいと思う
「制服女子高生割」は、前回の開催までは存在した規定です。抵触している法が提示されたわけでも誰かが被害を被ったという話が出たわけでもありません。ですので修正する義務はないのですが、それに対してメディアが「取材をしたくない」と言及しています。これは制裁をちらつかせての不当な圧力です。あまつさえ対象はイベントだけでなく参加する開発者にまで及んでおり、主催者としてはたまったものではないでしょう。
制服女子高生割が削除されたあと、ツイートの削除が以下のように行われました。
主催が検討した結果、修正したようなのでこの件に関しては終わりにします。無事に良いイベントにして下さい。
— *死に舞 (@shinimai) 2019年6月16日
当該ツイートもいくつか削除します。
— *死に舞 (@shinimai) June 16, 2019
削除の意図はわかりかねますが、少なくとも発言の撤回として行ったものではないようです。
その後、私(@_enu)に対して返信をいただいています。
むしろ法に触れていたならば、私が出てくるまでもなく、問題があるので、触れてないからこそ個人的にコメントしたまでです。「取材したくない」と公言したのがそれほど重すぎるかどうかはわからないが、仕事としては「したくない」仕事もしますが、確かにインディーに関しては個人のしたいことが重要
— *死に舞 (@shinimai) 2019年6月16日
あとから「したくない仕事もします」はないでしょう。すっかり自分の願望どおりになってから発言を取り繕ったところで何になるのかと。これでそうなんですねーとホイホイ納得できるものではありません。
(なお、私の判断する限りですが、@MEGABIT_CON氏のツイートに謝罪するべき内容のものはありません。炎上している話題の渦中で適切に対応できる人間は少ないと思いますし、即時対応が不十分だったところで「最悪」と評されるいわれはないでしょう。@MEGABIT_CON氏の発言数は多くはないので、今からでも遡れると思います。)
確かに、メディアが全てのイベントを網羅し取材することは難しいのでしょう。どこかで選定する必要があり、そこに主観的な判断が入り込むのは仕方ないのかもしれません。しかし、取材したくないというなら、ただ単に取材しなければいいだけなのです。「取材しない」はメディア側が己の限界として背負うべきことです。ペナルティとして振りかざし、イベントの在り方を変えさせるための行為ではないはずです。
メディアが「取材したくない」のなら、対するカウンターは「取材されたくない」で良いでしょう。簡単に見せていいカードではないと思っていたんですが、どうやら気軽に切ってもいいようです。
今回は以上の意思表明として、取材拒否を行うものです。
結局、制服女子高生割は修正され、なくなってしまいました。イベントの在り方は主催者や参加者によって決められるべきことであり、外部の圧力によるものではあってはなりません。もはや入場料の項目において下品なジョークを言うことはできないでしょう。「上品になったからいいじゃん」ではないのです。失われたものは何なのか考えて欲しい。
今回の件は「小規模イベントに存在した伝統に対し、メディアが一方的に差別的であると断じ、その権力をもって消し去ろうとした、あるいは実際に消し去ってしまった」ものです。その影響は、大多数にとっては取るに足らないことなのかもしれません。しかし、多様性というものは、こういった末節の部分から奪われていくものなのでしょう。
メガビット02の参加資格は現在以下のようになっています。(2019/06/18)
★参加資格
インディーゲーム/同人ゲーム/フリーゲームが好きな方。
一般参加料金:500円学生割引:高校生以下/無料
※ 当日学生証を受付にお見せください。
※ 小学生以下は学生証の提示は要りません。
謝辞
このような当サークルの行動は、ゲームを発表する場としてのイベントの主旨からは外れるものです。イベント主催ならびに他のサークル参加者、一般参加者の皆様に対しましては、ご迷惑をおかけいたしますことをお詫び申し上げますと共に、あらゆるサークルがもつ当然の権利として行うものであることをご理解いただければ幸いです。
【Unity】2019.2のAssertは例外を投げる
Unity2019.2を試したところ、どうも処理が途中で止まっているっぽい?ということで見てみたところ、Assert
で警告が出るとそれ以降の処理が為されていない模様。
この警告、例外をスローしている。
変更
2019.1
2019.2
という感じ。前からもAssert.raiseException
をtrue
にすることで例外を投げるように設定できたんですが、2019.2ではこれがデフォルトでtrue
になり、いずれ固定値になるとのことです。
代替
Debug.Assert
を使いましょう。Assertions.Assert
と同じく[Conditional("UNITY_ASSERTIONS")]
が設定されているので、ビルドすれば引数の評価処理ごと消えます。
ただしbool値しか渡せない。Assert
にあった評価メソッド群を手放すというのは逆行してる感があるんだけど…。
四倍剣^2 サントラリリース
【Unity】フェードつき文字送り
フェードで文字表示 pic.twitter.com/OgozmHdjPm
— enu@遊宴雀2 雀-17 (@_enu) 2019年7月23日
packge
コード
- 本文用の
Text
コンポーネントを作成する。- 本文用のオブジェクトに
FadeInQuadByQuad
をアタッチする
- 本文用のオブジェクトに
- ルビ用の
Text
コンポーネントを作成する- ルビ用のオブジェクトに
RubyText
をアタッチする。RubyText
は↑の本文用オブジェクトを参照しておく。
- ルビ用のオブジェクトに
TypingEffect
をアタッチする
- ルビ用のオブジェクトに
- 二つのオブジェクトのrectは一致させておく。(ルビと本文は親子関係ににしとくのが自然でしょう)
- コード実行
[SerializeField] RubyText ruby; [SerializeField] Text body; [SerializeField] TypingEffect rubyTypingEffect; [SerializeField] QuadByQuad bodyTypingEffect; IEnumerator Start() { var message = "{吾輩:わがはい}は猫である。<color=red>名前はまだ無い</color>。\nどこで生れたかとんと{見<color=red>当:けんとう}がつか</color>ぬ。何でも薄暗いじめじめした所で<color=red>ニャーニャー</color>泣いていた事だけは記憶している。"; var stringWithRuby = StringWithRuby.Parse(message) .FoldTag() .WrapWithHyphenation(body, new HyphenationJpns.Ruler()) .UnfoldTag(); var typingEffect = new RubyTextTypingEffect(stringWithRuby, ruby, body, rubyTypingEffect, bodyTypingEffect); var startedTime = Time.time; while (true) { var elapsedTime = Time.time - startedTime; typingEffect.Update(elapsedTime); if (elapsedTime > typingEffect.duration) { break; } yield return null; } }
【Unity】UI.Textで禁則処理つき改行
ルビ表示+リッチテキスト+禁則処理つき改行+文字送り。 pic.twitter.com/IcZt1Nzglh
— enu@遊宴雀2 雀-17 (@_enu) 2019年7月22日
Package
コード
[SerializeField] RubyText ruby; [SerializeField] Text body; IEnumerator Start() { var message = "{吾輩:わがはい}は猫である。<color=red>名前はまだ無い</color>。\nどこで生れたかとんと{見<color=red>当:けんとう}がつか</color>ぬ。何でも薄暗いじめじめした所で<color=red>ニャーニャー</color>泣いていた事だけは記憶している。"; var stringWithRuby = StringWithRuby.Parse(message) .FoldTag() .WrapWithHyphenation(body, new HyphenationJpns.Ruler()); while (true) { for (int i = 0; i < stringWithRuby.body.Length; ++i) { if (stringWithRuby.body[i] == '\n') { continue; } var sub = stringWithRuby.Substring(0, i).UnfoldTag(); ruby.Set(sub); body.text = sub.body; yield return new WaitForSeconds(0.05f); } yield return new WaitForSeconds(1f); } }
【Unity】TextMeshProでルビ表示
やること
TextMeshProのラベルにルビを表示する。
TextMeshProでのルビ表示。
— enu@遊宴雀2 雀-17 (@_enu) July 19, 2019
上がUnityUI、下がTextMeshPro pic.twitter.com/HOpubc3FTo
コード
Unity2019.1.10
使い方
インポート
- TextMeshPro(2.0.1)をインポートする。
- PackageManagerを使ってインポート
- メニューのWindow->TextMeshPro->Import TMP Essential Resources
- メニューのAssets->Create->TextMeshPro->FontAssetで日本語フォントを作成しておく(まあ動かすだけなら英字フォントでもいいんですが)
Unity_TSKT_UI
とUnity_TSKT_Container
をインポートするmanifest.json
に↓を追記すれば良い
{ "dependencies": { "com.github.enue.tskt_ui": "https://github.com/enue/Unity_TSKT_UI.git", "com.github.enue.tskt_container": "https://github.com/enue/Unity_TSKT_Container.git", } }
実行
- 本文用の
TextMeshPro
もしくはTextMeshProUGUI
コンポーネントを作成する。 - ルビ用の
TextMeshPro
もしくはTextMeshProUGUI
コンポーネントを作成し、TMP_RubyText
をアタッチする。TMP_RubyText
は↑の本文用オブジェクトを参照しておく。 - 二つのオブジェクトのrectは一致させておく。(ルビと本文は親子関係ににしとくのが自然でしょう)
- コード実行
[SerializeField] TMP_RubyText ruby; [SerializeField] TMPro.TMP_Text body; void Start() { var message = "{吾輩:わがはい}は猫である。<color=red>名前はまだ無い</color>。\nどこで生れたかとんと{見<color=red>当:けんとう}がつか</color>ぬ。何でも薄暗いじめじめした所で<color=red>ニャーニャー</color>泣いていた事だけは記憶している。"; var stringWithRuby = StringWithRuby.Parse(message); ruby.Set(stringWithRuby); body.text = stringWithRuby.body; }
文字送りのやり方
IEnumerator Start() { var message = "{吾輩:わがはい}は猫である。<color=red>名前はまだ無い</color>。\nどこで生れたかとんと{見<color=red>当:けんとう}がつか</color>ぬ。何でも薄暗いじめじめした所で<color=red>ニャーニャー</color>泣いていた事だけは記憶している。"; var stringWithRuby = StringWithRuby.Parse(message).FoldTag(); for (int i = 0; i < stringWithRuby.body.Length; ++i) { var sub = stringWithRuby.Substring(0, i).UnfoldTag(); ruby.Set(sub); body.text = sub.body; yield return new WaitForSeconds(0.05f); } }
開発中です
- 既知のバグとして、FontSizeをAutoにしているとルビの位置がおかしくなります。
- TextMeshProの機能を追いきれてないので多分ほかにもなんかある