はじめに
VTuberとして初めてunity1weekに参加しました。
ゲームを開発している時に得た知見2つについて書きたいと思います。
開発の思い出話
今回のテーマは「ふえる」でした。最初は「ふるえる」と読み間違えました。 初日に大枠のコンセプトを決め、cubeなどでコンセプトの動作を検証しました。 2日目は初日に作ったロジックだとうまくいかないことが判明したので、1から作り直しました。 3、4日目はゴリゴリと実装しました。ほとんどがUniRxの使い方を調べてた気が。 navmeshは初めて使うので、当たり判定などについても調べて実装しました。 ググれば大抵のことは分かったので、良かったです。 ただ、情報が古いこともあったので、そこは注意しました。 5日目でUI以外は完成したと思ったので、unityroomにアップロードして確認しました。 この日から断食してたので、頭が回らなかったです。早めに作ってて良かったなと実感しました。 6日目はUI追加したり、BGMつけたり、ゲームバランス整えたり。 コード書くのは得意なんですが、こーいう細かい調整は不得意ですね。 AIが良きに計らってくれる日を待ってます。 7日目は前の日に思いついたminimapを実装し、紹介動画をyoutubeにあげて、この記事を書いてます。キー入力が一定時間ないことを検知
「プレイヤーは一定時間キューの入力がないとウエイトモードになる」
という処理をUniRxでやる場合、以下のようなコードを書けばOKです。
this.UpdateAsObservable()
.Where(_ => Input.anyKeyDown)
.Timeout(TimeSpan.FromSeconds(0.5)) //0.5秒入力がなかったら、
.OnErrorRetry((Exception e) => animator.SetBool("isWalk", false)) //アニメーションをOFF
.Subscribe();
Tweet機能
ゲームのスコアなどTweetさせる機能を入れていたのですが、unityroomで実行すると
「twitter.com で接続が拒否されました。」
というメッセーが出ました。
void Tweet() {
string esctext = UnityWebRequest.EscapeURL($"感染率{attak.value}%\n残り時間{remainingTime}秒\n{count}/{number.value}のぬこがお友達になったにゃん(「ФДФ)「");
string esctag = UnityWebRequest.EscapeURL("unity1week");
string url = UnityWebRequest.EscapeURL("https://unityroom.com/games/");
string TweetURL = "https://twitter.com/intent/tweet?text=" + esctext + "&hashtags=" + esctag + "&url=" + url;
Application.OpenURL(TweetURL);
}
自分のマシンなら、windowsでもwebglでも動作するのですが、
このApplication.OpenURL(TweetURL)がunityroomのwebglでは動かないみたいです。
以下のように修正して、動くようになりました。
void Tweet() {
string esctext = UnityWebRequest.EscapeURL($"感染率{attak.value}%\n残り時間{remainingTime}秒\n{count}/{number.value}のぬこがお友達になったにゃん(「ФДФ)「");
string esctag = UnityWebRequest.EscapeURL("unity1week");
string url = UnityWebRequest.EscapeURL("https://unityroom.com/games/");
string TweetURL = "https://twitter.com/intent/tweet?text=" + esctext + "&hashtags=" + esctag + "&url=" + url;
#if UNITY_WEBGL && !UNITY_EDITOR
Application.ExternalEval(string.Format("window.open('{0}','_blank')", TweetURL));
#elif UNITY_EDITOR
System.Diagnostics.Process.Start(TweetURL);
#else
Application.OpenURL(TweetURL);
#endif
}
おわりに
今回は「自分のコンセプトを締め切り内で完成させる」を目標としました。
なので、かなり荒削りなゲームになりましたが、無事完成させることはできました(バグはあるかも)。
「ここをこうしたい!」という思いはあったのですが、その部分はコンセプトに影響せず、時間を考えて、バッサリなくしました。
わからないときは、ググって先人の知識をお借りしました。
この記事が、あとに続く人たちの参考になれば幸いです。
あと、UniRxはほんといいです。