Raspberlyのブログ

Raspberlyのブログ

Unityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。そろそろブログタイトル決めたい

MAZARIAに遊びにいってきました

閉場間際ですが、VRアミューズメント施設「MAZARIA」に行ってきました。
今回はその体験日記です。

f:id:Raspberly:20200831014242j:plain

 

 

どんなところ?

VRを使いゲームやアニメの世界に入りこめる屋内アミューズメント施設です。
池袋のサンシャインシティに2019年7月12日からオープンしましたが、2020年8月31日をもって閉場します。

アニメとゲームに入る場所「MAZARIA(マザリア)」とは?

三次元と二次元の世界をつなぐ狭間の世界、それがMAZARIAです。

MAZARIAのなかは4つのZONEにわかれ、
それぞれのZONEにアニメやゲームの世界へつながるアクティビティが存在しています。

www.youtube.com

 

 

 

体験したアクティビティ

極限度胸試しハネチャリ

足漕ぎグラインダー「ハネチャリ」に乗り遠くのお城を目指すゲームです。
操作方法は簡単ではありませんが、とても直感でスイスイ進むことができました。
景観もいいですが、いきなり突風がきたりあちこち崩れたりと

 

ホラー実体験室脱出病棟Ω(オメガ)

f:id:Raspberly:20200831020619j:plain

電動車いすに乗ったまま病棟の中を進んでいき脱出を目指すゲームです。
二人用ですが、スタッフさんと一緒に体験しました。
VR開発をやっていると割と耐性がついてしまうのであまり驚くことはありませんでしたが、
二人一緒にアクションをする場所で私がミスってしまい細切れにされました。ほんと申し訳ない( ;∀;)

 

恐竜サバイバル体験 絶望ジャングル

f:id:Raspberly:20200831021508j:plain

乗り物に乗り、恐竜のいる危険なジャングルからの生還を目指すサバイバルゲームです。
いくつかルートがあり、かなり時間に余裕をもってゴールまでたどり着けました。
ゴールにはヘリコプターのようなものが2つありどちらかにのって脱出できます。

以下ネタバレ

------

私が乗った飛行機は途中で襲われゲームオーバーになりました。
スタッフの方によるともう片方に乗っていたら生還できたかもしれないとのこと。
運ゲーすぎないこれ・・・ 見落としていただけでヒントとかあったのかも。

------

 

ゾンビサバイバルゲーム ハード・コール

f:id:Raspberly:20200831022534j:plain

車に乗ったまま迫りくるゾンビを薙ぎ倒し街からの脱出を図るサバイバルゲームです。ハウスオブザデッドみたいな。
なんどもピンチになりながらも無事脱出できました。演出もさながら映画に主人公になった感じです。

 

エヴァンゲリオンVR The魂の座:暴走

エヴァに乗って使途と戦うゲームです。
問題なくクリアはできましたが、個人的には戦闘開始前のエントリープラグ~射出までの流れがとてもよかったです。
キャラクターのボイスなど雰囲気などとてもよく表現されてました。

 

ゴジラVR

攻撃ヘリに乗りゴジラを退治するゲームです。
流れ自体は通常攻撃でゴジラの動きを止め、口の中に血液凝固弾を撃ちこんでクリアとなります。
ゴジラは見たことがなく名前しか知りませんでしたが、操作可能になりまでの街の様子や町が破壊される演出はすごかった。

 

スタッフの方も役になりきっていました。

 

大量破壊VRシューティング ギャラガフィーバー

f:id:Raspberly:20200831023758j:plain

様々な武器を使ってギャラガと呼ばれる敵を撃ちまくるゲームです。
大量の敵がでてきますが、こちらも使える武器がどんどん強くなっていくのでとても爽快感がありました。

 

急滑降体感機スキーロデオ

f:id:Raspberly:20200831024202j:plain

スキーに乗り急な斜面を高速で滑りおりるゲームです。
操作自体はスキー板の方向けのみで、そこまで慣性が強くなく難しくはないですが、
先の見えない恐怖と速度でとてもスリルがありました。

 

崖に落ちたりや壁に激突しても即ゲームオーバーにはならず、制限時間内であれば直前のチェックポイントからやり直せるのもよかったです。

 

VR-ATシミュレーター 装甲騎兵ボトムズ バトリング野郎

f:id:Raspberly:20200831024522j:plain

1対1のリアルタイムバトルが楽しめるロボットゲームです。(ボトムズは見たことがないのでわからない)
操作が難しく(開始前にスタッフさんが操作が難しい旨を伝えていました)、最初はガツンガツン壁などにぶつかっていましたが、2回戦ではミサイルの直撃が取れなんとか勝利できました。
(一人の場合はスタッフさんと対戦します)

 

マリオカート アーケードグランプリVR

マリオカートVR版です。違う点はアイテムがボックスからの取得ではなく、ステージ上に浮いているものを直接掴んで投げつけたりする点です。
そのためVive トラッカーをつけたゴーグルを装着してプレイします。

 

ゲーム自体はとてもよかったのですが、最大4人プレイの所を私一人でつぶしてしまったのがとても申し訳なく感じてしまった。

 

 

感想

アミューズメント施設自体行くのが久しぶり(修学旅行以来)でしたがとても楽したっかです。
複数人だったらもっと楽しかったのかも。(ドラクエなどは一人だとできなかったので)
午前中からいきましたが混雑もなく快適に遊ぶことができました。当日券も並ぶことなく購入できました。

 

全体的にスタッフさんの雰囲気がとてもよく、アクティビティに合わせて口調を変えていたり、体験後にアドバイスや良かった点を教えてくれたり、一人でも楽しく過ごせました。

パックマンゴーラウンドでは周囲に音楽が流れますが、近くのスタッフさんが踊っているのもよかった。

 

 

正直こういう施設に一人で行くのはかなり抵抗がありましたが、行って本当に良かったです。

f:id:Raspberly:20200831030721j:plain



 

 

ちなみに先日あった#にしかわの部屋でMAZARIAの裏話などがありました。
興味のある方はぜひぜひー

live2.nicovideo.jp

 

【2周年】ブログを開設してから2年経ちました【記念】

 

🎉2020年8月22日をもちまして、このブログは2周年を迎えました🎉

今回は去年からの振り返りと、転職した時のお話を書き留めます。

去年の1周年の振り返りはこちら

raspberly.hateblo.jp

 

 

 

 

1年間の振り返り

技術系記事の投稿

この1年間で56記事投稿してきました。
去年は1年で93記事書いていたので、投稿ペースがかなり落ちました。これは大きな反省点です。

春は転職や引っ越しなどが重なり、体調も崩しやすかったのでこれから挽回していきたいところ。

 

56記事の中で特にアクセス数の多かった記事は以下の5つでした。

raspberly.hateblo.jp

raspberly.hateblo.jp

raspberly.hateblo.jp

raspberly.hateblo.jp

raspberly.hateblo.jp

 

勉強会レポ

情勢なども相まって春頃から勉強会レポを書けていません。オンライン上ですがUnityステーションや、
clusterで多くの勉強会が開催されているのでこちらもやっていきたいところ。

 

ちょうど近くにunity1weekのオンラインイベントがありますね。

meetup.unity3d.jp

 

 

 

 

 

 

 

 

転職しました

🎉🎉🎉🎉🎉🎉実は今年の春にゲーム会社に転職しました。🎉🎉🎉🎉🎉🎉

 

ゲーム会社に入社するのも転職するのも初めてだったので色々大変でしたが、落ち着いてきたので書き留めておきます。

転職活動自体は1年前くらいからゆるくに始めていましたが、去年冬から本格的に動き始めました。

 

簡単な経歴

学生時代からアプリのリリースやマスコットアプリ文化祭など実績は重ねていましたが、
就職活動で大爆死してしまい、結局ゲーム開発とは程遠いシステム開発を行う会社に入社しました。
これに絶望してUnityをさわらない日々が続いていましたが、たまたま参加したGotanda.unityでゲーム会社に所属していなくとも、個人で開発していたり活躍している方々とたくさん交流でき意識が大分変りました。
学生時代は学生向けの勉強会やインターンの参加が多く、社会人と交流できたことはとても新鮮でした。

それからはUnity開発も始め、ブログやLTなどアウトプットメインで活動を再開しました。

 

 

転職先を探すのに使った手段

Wantedly
・転職エージェント(サポーターズ、シリコンスタジオエージェント)
・勉強会(Gotanda.unityなどの企業紹介があるもの)

Wantedlyの場合

良さそう会社さんがあったら、「話を聞いてみたい」ボタンから登録していきました。
人事の方が良さそうだと思ってくれたら面談に進みます。
ただし返信がないことも多いですので、気にせずバンバン応募した方がいいです。

転職エージェントの場合

登録をした後担当者の方と面談をして、希望する会社・年収などを話し合った後、ピックアップしていただいた所を受けていきます。
面接のセッティングや会社とのやり取りは全てエージェントさんがやってくれます。
エージェントさんが面接に同席することもありました。

勉強会経由

Gotanda.unityなどでは、会場提供・懇親会支援の企業紹介タイムが毎回ありますので、
懇親会の時に名刺交換やお話を持ち掛けていきました。
面談まではほぼ確実に行けます。

 

 

面談・面接でされた質問まとめ

・この業界を目指すきっかけはなんですか?
・業界に入って何がしたい?
・どんなものが作りたい?
・数学に抵抗はありますか?
・ツールやライブラリはたくさんありますが、なぜUnityを選びましたか
・Unityはどのバージョンが慣れていますか?
・これ(自作ゲーム)を作る時に力を入れた所はどこですか?
・ご自身でリリースされたアプリはどのくらいダウンロードされましたか?
・現職の不満点は何かありますか?
・現職で身についたことはなんですか?
・様々な勉強会に参加していますが、一番おもしろかった勉強会はなんですか?
・弊社の製品を遊んだことはありますか?
・○○と○○(具体的なアプリ名)のプロジェクトではどちらに興味がありますか?
・好きなGitコマンドはなんですか?
・ずっとC#で開発してきたとのことですが、「C#のここがイケないなぁ」と思う所は何かありますか?
・ご自身の開発ではデザインパターンを利用していますか?

 

「好きなGitコマンド」と「C#のイケてない所」のベストな回答誰か教えて...

 

 

成績

到達数などはこんな感じ(面談なしで1次面接にいくところもありました)
応募数:27
面談到達数:6
1次面接到達数:8
2次(役員)面接到達数:2
内定数:1

 

 

転職活動を終えて

完走した感想ですが未経験だとほんとうにきついです
個人開発をしていたり何らかの実績があろうとも実務経験がないだけで半分は落ちます
もちろん実務経験よりも熱意やスキルを見てくれる会社さんもあるので、そういう所を選ぶのも重要です。
xR系も興味ありましたがなかなかご縁がありませんでした・・・

xR業界に関してはこちらが参考になりました。
私の場合、しっかりとした「ビジョン」を持てなかったのが敗因です。

note.com

 

ちなみに面接の時GGJ2020で作ったゲームを、担当箇所やプレイを交えながら紹介することがありましたが、
内容がかなりアレなゲームだったので、ストーリーの説明とかすごい恥ずかしかった・・・

↓は転職活動時に作ったポートフォリオです。

scrapbox.io



 

おまけ

転職活動時、面接面談合わせて8名のエンジニアとお話しする機会がありましたが、Gotanda.unityの知名度がかなりありました
ほとんどの方が知っていて、過去参加したことある方が3名も(内登壇者1名)。

 

一方UnityRoomを知ってる方は3人でした。
ポートフォリオの紹介時に「こういうのがあるんですねー」という反応がほとんどでしたので、
unity1weekと合わせてバッチリ宣伝しておきました。

 

 

 

 

今年の抱負

記事投稿ペースがかなり落ちてきたので、バンバン書いて投稿することを目標にします
書きかけのVR開発やアセット紹介記事があるのでそれらを消化していきたいです。

 

 

 

 

長々と書いてきましたが、このブログが2年も続いたのは
読者様そして勉強会やUnity開発コミュニティ皆様のおかげです!
これからもどうぞよろしくお願い致します!

 

 

 

就活の失敗から立ち直れてゲーム会社に転職できたのも、全てGotanda.unityのおかげです
やっぱごたゆには神

【アセット紹介】R.A.M 2019 - River Auto Material 2019で川を作る【Unity】

これはUnity アセット真夏のアドベントカレンダー 2020 Summer!13日目の記事です。
昨日はJaol-Industryさんによる、「え!!5分で38言語対応を!? できらあっ!【AutoLocalization】」でした。

f:id:Raspberly:20200811195441p:plain

ハッシュタグ : #アセットアドカレ2020

 

今回はアセットの紹介をしていきます。
紹介するのは「R.A.M 2019 - River Auto Material 2019」。
川や湖を自動的に作成するアセットです。

f:id:Raspberly:20200812231509p:plain

このアセットはR.A.M - River Auto Materialのリニューアル版です。

どんなアセット?

通称R.A.Mと呼ばれるアセットで、高品質な川や湖を作成できるアセットです。
川周辺の地形の調整や、川のカスタマイズ(速度、泡、水深、滝)を細かく調整できます。

f:id:Raspberly:20200813031318p:plain

 

公式サイト

残念ながら私は旧バージョンのR.A.Mをさわったことはないので、変更点などはわかりません。
この記事では初めての方向けに基本的な使い方を紹介します。

 

 

サポートされているUnityのバージョン

以下の通りになっています。

Pack support unity:
- Unity 2018.3+
- Unity 2019 +
- Unity 2018.3 HD RP 4.9
- Unity 2019.1+ LW RP 5.7+
- Unity 2019.1+ HD RP 5.7+
- Unity 2019.2 HD RP 6.9
- Unity 2019.2 LW RP 6.9+
- Unity 2019.3 HD RP 7.18
- Unity 2019.3 URP 7.18
- Unity 2019.3 URP 7.2+
- Unity 2019.3 HD RP 7.2+
- Unity 2019.4 LTS HD RP
- Unity 2019.4 LTS URP
- New Unity Terrain 2018.3+ support
- SRP Batcher support at HD and URP 7.18+ Unity 2019.3+;

 2018.2より古いUnityでは、旧バージョンのみ動作します。

 

 

 

開発環境

Unity2019.4.6f1

R.A.M 2019 ver1.3.9

URP ver7.3.1

 

 

 

 

セットアップ

URPサポートファイルのインポート

インポート完了後に、NatureManufacture Assets/River Auto Material*1サポートパックがあるのでインポートします。

f:id:Raspberly:20200809022546p:plain

今回はURP 7.2のパックをインポートします。7.2とありますがこれは7.2と7.3をサポートします。
インポートすると、Shader、Prefab、Meshが置き換えられます。

f:id:Raspberly:20200809023818p:plain

 

URPアセットの変更

URPアセットのOpaque TextureとDepth Textureを有効化します。
しないと↓のようなエラーがでます。

f:id:Raspberly:20200809025449p:plain

 

URPアセットはAssets/Settingフォルダにあります。

f:id:Raspberly:20200809025410p:plain

現在のURPアセットはProjectSettingから確認できます。

f:id:Raspberly:20200809030139p:plain


デフォルトだとUniversalRP-HighQualityなので、これのOpaque TextureDepth Textureを有効化します。

f:id:Raspberly:20200809030346p:plain

 

 

 

デモシーンの確認

デモシーンはNatureManufacture Assets/River Auto Material/Demoにあります。
「URP」とついたものがURP用のデモになります。最後にMobileとついているものがモバイル用です。

f:id:Raspberly:20200809124541p:plain

 

URP RAM 2019 Demo Offsetシーンを開いてみるとこのような感じです。
テレインと川と海、さらに浮遊大陸まであります。

f:id:Raspberly:20200809130746p:plain

シーン内にはところどころにインフォメーションが置いてあります。

f:id:Raspberly:20200809135437p:plain

川の様子

f:id:Raspberly:20200809142222g:plain

流れの早い場所の様子

f:id:Raspberly:20200809144828g:plain

謎の浮遊大陸 端から水が落ちています

f:id:Raspberly:20200809154336g:plain



 

 

 

 

実際に試してみる(クイックスタート)

デモシーンにあるTerrainに川を作ってみます。

f:id:Raspberly:20200812221833p:plain

River Splineの作成

Create/3D Object/Create River SplineでRiver Splineを作成します。

f:id:Raspberly:20200812030952p:plain

f:id:Raspberly:20200813011930p:plain

RiverSplineには、SamSplineというコンポーネントがアタッチされていますが、
これのパラメータを調整して川を作成していきます

f:id:Raspberly:20200813012520p:plain

 

スプラインの作成

ポイントを作成しスプラインを作成します。

 

Ctrl+左クリックでポイントを追加。
Shift+左クリックでポイント間にポイントを挿入。
Ctrl+Shift+左クリックでポイントの削除を行います。

f:id:Raspberly:20200812223712g:plain

 

スプラインを作成したら、Basic/Set object pivot to centerでpivotの位置を中央にしておきます。

f:id:Raspberly:20200812223612p:plain

こうすることでSceneビューからさわりやすくなります。

f:id:Raspberly:20200812224132g:plain

 

 

川幅と位置を調整

Basic/Mesh settings/River widthで川幅を一括で調整できます。
数値を変えた後は横のChange width dor whole riverボタンを押さないと反映されません

f:id:Raspberly:20200812224629p:plain

幅を全て統一したくない場合は Add with noiseでノイズを加えましょう。

f:id:Raspberly:20200812225002p:plain
幅をそれぞれランダムに増減します。

f:id:Raspberly:20200812224750p:plain

 

また、Sceneビューから位置や角度、幅を直接変更もできます。

f:id:Raspberly:20200812233050g:plain

 

Pointsタブからポイントごとに細かく設定することも可能です。

f:id:Raspberly:20200812231143p:plain

 

 

 

ポリゴン数の変更

ここはお好みで。
Basic/Triangles densityのUVスクロールからポリゴン数を変更できます。

f:id:Raspberly:20200812230124p:plain

この時Sceneビューをワイヤーフレームに変えるとわかりやすいです。

f:id:Raspberly:20200812225821p:plain

 

 

 

スプラインのプロファイルを設定

Mesh settingのSpline profileからスプラインのプロファイルを設定できます。
青々した川、エメラルドな川、沼や道路など用意されているもので10種類ほどあります。

f:id:Raspberly:20200812232949p:plain

f:id:Raspberly:20200812233207g:plain

ちなみに川は斜面があると自動的に小さい滝などが作成されます

 

 

UV設定

Basic/UV settingsからUVスケールやテクスチャ全体の回転などを変更できます。

f:id:Raspberly:20200813001608p:plain

 

川にペイントする

Ram SplineのVertex Colorから頂点カラーを変えることができます。

f:id:Raspberly:20200813001258p:plain

RチャンネルはSlow Water(よくわからなかった)をペイントします。
Gチャンネルは小さな流れをペイントします。
Bチャンネルは大きな流れをペイントします。
Aチャンネルは、アルファを使用して他の水アセットとブレンドする時に使います。

f:id:Raspberly:20200813000918g:plain

ここで頂点カラーを変えていない所は、川の角度などに応じて自動的に流れがつけられます。

 

 

地形へのスナップ

BasicにあるSnap/Unsnap mesh to terrainボタンから、スプラインを地形に合わせてスナップすることができます。

f:id:Raspberly:20200813002231p:plain

下のような地面から浮いている川でも。

f:id:Raspberly:20200813001934p:plain

ボタン1つで地形に合わせることができます。

f:id:Raspberly:20200813002007p:plain

また途中にCapsuleなどを置くと、オブジェクトに沿ってスナップすることもできます。

f:id:Raspberly:20200813002739p:plain

 

 

 

流れを制御する

Ram SplineのFlow Mapから川の流れを制御できます。

f:id:Raspberly:20200813003552p:plain

Flow Map Manual

手動で川の流れを設定します。Terrainと同じ要領でSceneビューでドラッグすると流れを変えられます。
Flow U Speedが縦方向、Flow V Speedが横方向の流れになります。
Uをマイナスにして流れが逆方向にすることも。

f:id:Raspberly:20200813010458g:plain
Show flow directionsボタンを押すことで川の流れを矢印で視覚化できます

f:id:Raspberly:20200813010416p:plain

もちろんこのまま流れを変えることもできます。

Flow Map Automatic

ある程度自動で流れを設定します。
Add noiseでは、それぞれのスケールに流れの加速や減速など自然に見える影響を与えます。
マニュアルによると強くしすぎない方がいいらしい。

 

 

 

川周辺のTerrainを書き換える

f:id:Raspberly:20200813012901p:plain

このままでは斜面に川のテクスチャが貼られているだけにしか見えないので、
周囲のTerrainを調整します。RAMにはこれを自動で行う便利な機能が用意されています。

 

Terrainのカーブ

Ram SplineからTerrainを選び、Terrain carve/Shor terrain shapeボタンを押します。

f:id:Raspberly:20200813013201p:plain

 

Terrainへの影響範囲が緑で表示されます。 

f:id:Raspberly:20200813013948p:plain

Inspectorからカーブ曲線や、影響範囲を設定できます。
問題なければCarve terrainボタンを押します。


※この時LayersがTerrainのLayerを含んでいることを確認しましょう。含まれていないとTerrainに影響がでません。デフォルトでNothingになっています

f:id:Raspberly:20200813015613p:plain

 

すると平坦だった斜面を見栄えの良い地形に自動で整形してくれます。

f:id:Raspberly:20200813020016p:plain

川の中も底ができています。

f:id:Raspberly:20200813020220p:plain

 

Terrainのペイント

かなり川っぽくなりましたが、川の中もその周辺も、Terrainのテクスチャが全て一緒です。
しかし、テクスチャも自動で書き換えてくれる機能も用意されています。
Terrain carveの下にあるTerrain paintがそれにあたります。

f:id:Raspberly:20200813020853p:plain

Splat idが書き込むテクスチャです。

f:id:Raspberly:20200813021029p:plain

とりあえず初期設定のまま、Paint Terrainボタンを押してみます。

f:id:Raspberly:20200813021210p:plain

無事、川周辺のテクスチャを自動で調整してくれました。
今回は使いませんでしたが、周囲にある草や木を自動で削除する機能もあります。

 

 

 

 

シミュレートで簡単作成

ここまで記事を読んでいただいた方で「なんだか難しそう」「複雑そう」と感じた方いらっしゃると思います。
しかし、いままで解説した機能を把握しなくとも、手っ取り早く川を作る機能があります
その名もシミュレート機能です。

 

 

とりあえずまずはRiver Splineを作成します

f:id:Raspberly:20200812030952p:plain

 

Ram SplineにSpline profileを設定します。

f:id:Raspberly:20200813023426p:plain

 

Ram SplineをSimulateに切り替えます。

f:id:Raspberly:20200813023545p:plain

 

Terrain上に川の始点となる所を決めてCtrl+左クリックでポイントを作成します。

f:id:Raspberly:20200813024117p:plain

Show simulated Riverボタンを押すと、Sceneビューに作成する川の図が緑色で表示されます。

f:id:Raspberly:20200813024339p:plain

問題なければ、Generate Simulated Riverボタンを押します。

f:id:Raspberly:20200813024441p:plain

 

すると、Terrainに沿って自動で川が作成されます

f:id:Raspberly:20200813024609p:plain

 

Ram SplineからTerrainを選択し、
LayersをDefaultにし、Carve terrainPaint Terrainボタンをします。

f:id:Raspberly:20200813025120p:plain

 これで完了です。

f:id:Raspberly:20200813025557p:plain

地形も自動でいい感じにしてくれます。

f:id:Raspberly:20200813025639p:plain


シミュレート機能を使うことで、数回クリックするだけで簡単に川を作成することができました。
自動生成のためおかしい箇所があるかもしれませんが、その場合はパラメータを変えたり、
ポイントの移動やノイズを混ぜるといいでしょう。

 

 

 

 

最後に

一通り川を作る方法についてまとめました。

付属のマニュアル通りに進めましたが、複雑なため省いた箇所がいくつかあり、
まだ多くの使っていない機能もあるので去年のWeather Makerと同様に続編を出す予定です。

 

難しそうと思った方はとりあえずシミュレート機能から始めてみることをオススメします。
最短4クリックで川と周辺の地形を生成することができます。

 

以上となります。

明日のUnity アセット真夏のアドカレさとやんさんによる、「UnityのPanda BTでシンプルにBehaviour Treeを実装する」です。

 

 

 

参考資料

www.youtube.com

www.asset-sale.net

Universal Render Pipeline Asset | Universal RP | 7.1.8

 

 

 

他のアセットの紹介記事はこちら↓

raspberly.hateblo.jp

 

 

他、間違っている箇所、わかりにくい所がありましたらコメントにお願いします。

※本記事にはAssetStoreアフィリエイトリンクが含まれています。

*1:ドキュメントだとHD and LW RP supportフォルダにあるとのことですがそんなフォルダはない

【小技】Unityのコンパイルを無効化する【Unity】

今回は久々にTwitterネタをやっていきます。
このようなツイートを見つけました。

私も複数のアセットをインポートした時はAsset/AssetStoreというフォルダを作りまとめたりしますが、
フォルダを移動するたびにコンパイルが走るのが実に煩わしいところ。

 

そこで、Unityのコンパイルを無効化する方法についてまとめました

 

開発環境

Unity 2020.1.0f1

 

 

 

方法1 Auto Refreshを切る(うまくいかなかった)

同ツイートのリプライにあった方法です。

Preferences/General/AutoRefreshのチェックを外し、アセットのリフレッシュを無効化します

f:id:Raspberly:20200807015320p:plain

※リフレッシュとはアセットの変更をAssetDatabaseにコミットして、プロジェクト内のアセットを最新の状態にすることです

 

リフレッシュ自体はCtrl+Rや、Assets/Refreshで実行できます。

f:id:Raspberly:20200807022101p:plain

 

 

 

ただし、この方法ではうまくいきませんでした
Scriptの編集、及びフォルダやファイルの移動でコンパイルが走りました

 

 

 

 

 

方法2 LockReloadAssembliesとUnlockReloadAssembliesをエディタ拡張から叩く

同ツイートのリプライにあった方法です。

Editor拡張でLockReloadAssembliesを呼ぶとコンパイルがロックされ、
UnlockReloadAssembliesを呼ぶとアンロックされるようです。


今回は以下のScriptをEditorフォルダに置きました。

using UnityEngine;
using UnityEditor;

public class CompileLock : MonoBehaviour
{
	[MenuItem("Compile/Lock", false, 1)]
	static void Lock ()
	{
		Debug.Log("コンパイルしなくなります");
		EditorApplication.LockReloadAssemblies();
	}

	[MenuItem("Compile/UnLock", false, 1)]
	static void Unlock ()
	{
		Debug.Log("コンパイルするようになります");
		EditorApplication.UnlockReloadAssemblies();
	}
}

 

すると、UnityエディターのメニューバーにCompileという項目が増えます。
さらにCompile/Lockを押すとコンパイルがされなくなり、Compile/UnLockで解除されます

f:id:Raspberly:20200807021550p:plain

 

Lockしている時にScriptを編集すると、Unityエディターの右下に鍵マークが表示されました
コンパイル中だとクルクル回る所ですね。鍵マークが表示されている時はコンパイルされないようです

f:id:Raspberly:20200807005921p:plain

同じく、ファイルやフォルダの移動でもコンパイルは走りませんでした
※アセットのインポートではコンパイルが走ります。

 

 

追記 8月7日

@deco_c_さんが改良版のEditorScriptを作成してくださいました!

 

 

 

 

 

方法3 Playモード中を利用する

同ツイートのリプライにあった方法です。

 

Playモード(ゲーム実行)中スクリプトなどが変更された場合の挙動は、
Preferences/General/ScriptChangesWhilePlayingから変更できます。

f:id:Raspberly:20200807010923p:plain

これには3つのモードが用意されています。

Recompile And Continue Playing

プレイモード中にScriptが変更された場合、プレイモードを続行したままコンパイルします
Unityにはホットリロードと呼ばれる、Scriptの変更をゲームを終了させずに反映できる機能があります。
ホットリロードを有効にするのがこのモードです。

Recompile After Finished Playing

プレイモード中にScriptが変更された場合、プレイモードはそのまま続行できますがコンパイルはされず、
プレイモードの終了後にコンパイルされるモードです。

Stop Playing And Recompile

プレイモード中にScriptが変更された場合、プレイモードを即終了しコンパイルを行うモードです。

 

 

今回は、プレイモード中にコンパイルしないようにしたいので、
Recompile After Finished Playingに設定します

f:id:Raspberly:20200807021034p:plain

実際にプレイモード中にScriptを編集したところ、
方法2と同じように鍵マークが表示されコンパイルされませんでした
ファイルやフォルダの移動をしても同じようにコンパイルが走りません

f:id:Raspberly:20200807005921p:plain

 

ただし、プレイモード中はアセットのインポートができないので注意しましょう。

f:id:Raspberly:20200807013143p:plain



 

 

 

 

まとめ

以下の2つの方法でUnityのコンパイルを無効化できる。
LockReloadAssembliesとUnlockReloadAssembliesをエディタ拡張から叩く
ScriptChangesWhilePlayingをRecompile After Finished Playingにする

 

 

 

 

参考資料

farcepeace.wixsite.com

naichilab.hatenablog.com

trapezoid.hatenablog.com

docs.unity3d.com

ekulabo.com

 

 

 

 

 

他わかりにくい所、間違っている所がありましたらコメントまでおねがいします!

【DOTween】DOText 開発メモ まとめ【Unity】

TextMeshProとDOTweenを使って開発する時の自分用メモです。
最近DOTextをさわる機会が多いので、やったことなどをまとめておきます

DOTextの表示速度を一定にする方法と、タップされたら即座に表示する方法~などなど。

 

 

8月1日
他にもいくつかメモを追加しました

 

 

 

DOTextについてはこちら。

kan-kikuchi.hatenablog.com

www.hanachiru-blog.com

 

 

 

開発環境

Unity 2020.1.0f

Text Mesh Pro v3.0.1

DOTween Pro v1.0.244

 

 

前提

DOTweenをTextMeshProで使うにはDOTween PRO(有料版)が必要です。
また、最初のセットアップ時にTextMeshProのモジュールを追加する必要があります。

f:id:Raspberly:20200731001945p:plain

知らないうちにDeAudioとDeUnityExtendedというのが新しく追加されていますね。

 

 

 

 

---------ここから本題---------

1. デフォルトのEaseタイプを変える

DOTextに関わらず、DOTweenはSetEaseでEaseタイプを設定できますが、
何も設定されていない場合はOutQuadになります

 

解決方法

ユーティリティパネルから変更できます。

UnityEditorのTools/Demigiant/DOTween Utility Panelから開くことができます。

f:id:Raspberly:20200801010528p:plain

パネルが表示されたら、右上のPreferencesを押します。

f:id:Raspberly:20200801010644p:plain

すると様々な設定を変更できるようになるので、Easeからデフォルトに設定したいEaseを設定しましょう。

f:id:Raspberly:20200801010756p:plain



 

 

 

 

 

 

2. テキスト表示速度を一定にする

DOTextは第二引数の値でduration(持続時間)を設定できます。
持続時間とは表示を完了するまでの時間です。つまり、このdurationは表示速度ではありません

        TextMeshProUGUI tmpro = GetComponent<TextMeshProUGUI>();
        string mes = "これは1つ目のメッセージです。\n約25文字あります。";
        tmpro.DOText(mes, 10);
        TextMeshProUGUI tmpro = GetComponent<TextMeshProUGUI>();
        string mes = "これは2つ目のメッセージです。\n1つ目から10文字も増え約35文字になります。";
        tmpro.DOText(mes, 10);
        TextMeshProUGUI tmpro = GetComponent<TextMeshProUGUI>();
        string mes = "これは3つ目のメッセージです。\n2つ目から更に文字数が増えてしまい、\nなんとだいたい50文字まであります。";
        tmpro.DOText(mes, 10);

durationが同じ値であっても、文字数が25と50の場合では表示速度に差が出てしまいます
同じタイミングで表示を終了させたい場合はこれでもいいかもしれませんが。

f:id:Raspberly:20200730030230g:plain

解決方法

文字数を考慮した第二引数を与えると解決します。
文字数 * 1文字の表示時間 を代入しましょう。1文字あたり0.1秒で表示します。

        tmpro.DOText(mes, mes.Length * 0.1f);

 

f:id:Raspberly:20200730030152g:plain

 

 

 

 

 

3. 表示中にタップされたら即座に表示させる

やりたいこと

DOTextで表示中に画面がタップなりクリックされたらTweenを終了し即座に文字を表示したい。

解決方法

タップされたらKillを呼んでtextに即座に書き込む
KillはTweenを即座に終了させるコマンドです。あとはそのままtextに書き込んで終わり!

    TextMeshProUGUI tmpro;
    string[] mes = new string[3];
    int mesNum = 0;
    string mesText;

    void Start()
    {
        tmpro = GetComponent<TextMeshProUGUI>();
        mesNum = 0;
        mes[0] = "これは1つ目のメッセージです。\n約25文字あります。";
        mes[1] = "これは2つ目のメッセージです。\n1つ目から10文字も増え約35文字になります。";
        mes[2] = "これは3つ目のメッセージです。\n2つ目から更に文字数が増えてしまい、\nなんとだいたい50文字まであります。";
    }


    //画面とかタップされたらよばれる関数
    public void OnDown()
    {
        //tmproがTweenしているかどうか
        if(DOTween.IsTweening(tmpro))
        {
            //Tween中なら即終了
            tmpro.text = mes[mesNum - 1];
            tmpro.DOKill();
        }
        else
        {
            if(mesNum > mes.Length - 1) return;
            mesText = mes[mesNum];
            //一度textを無にしてから書き込もうね
            tmpro.text = "";
            tmpro.DOText(mes[mesNum], mes[mesNum].Length * 0.1f);
            mesNum++;
        }
    }

 

f:id:Raspberly:20200801002620g:plain

 

 

 

 

4. 文字列を不規則に揺らす

参考元

game-ui.net

 

Undertaleで見た・・・ような気がする演出。
似たような機能をピンポイントで実装する機会があったので、Undertale風にして書き残します。

f:id:Raspberly:20200730005608g:plain

以下コード

    void Start ()
    {
        TextMeshProUGUI tmpro = GetComponent<TextMeshProUGUI>();
        DOTweenTMPAnimator tmproAnimator = new DOTweenTMPAnimator(tmpro);
        Sequence seq;

        for(int i = 0; i < tmproAnimator.textInfo.characterCount; ++i)
        {
            // '*'は揺らさないよ
            if(tmpro.textInfo.characterInfo[i].character == '*') continue;

            //文字ごとにSequenceを作る
            seq = DOTween.Sequence();
            seq.SetDelay(Random.Range(3f, 6f));
            seq.Append(
                tmproAnimator.DOShakeCharOffset(i, 0.1f, 5f, 0)
            );
            seq.SetLoops(-1);
        }
    }

 

ちなみにこれはまだ改善点があります。
SetDelayに乱数を与え揺らすタイミングを文字ごとにずらしているわけですが、
これはSequenceを実行した時点で固定されます
同じく揺れる向きも固定されるので、実は不規則に揺れてはいないんですよね。

いろいろ試してもうまく改善できなかった。。。

 

 

 

 

5. 文字に表示される枠を消す

TextMeshProで表示する文字に枠が表示される問題がたまにおきます。

f:id:Raspberly:20200730025700p:plain

ちなみにFontSizeを大きくすると枠が消えます

f:id:Raspberly:20200730032450g:plain

ちゃんとした原因はわかりませんが解決方法はあったので書き残します。

 

解決方法

Font Assetの作成時、Sampling Point SizeをAuto Sizingにせず、CustomSizeにして値を設定しましょう

f:id:Raspberly:20200730030916p:plain

↓Auto Sizeの場合、Sizeが255になっていました

f:id:Raspberly:20200730031144p:plain

これを60にしてジェネレートしなおすと解決します。 

f:id:Raspberly:20200730032429p:plain

 

これは作成するフォントの文字数が少なく、文字数に対してAtlas Resolutionが大きい場合に発生するようです。
(とても大きな文字が作られるため)
 

Sizeはいくつがいいのかはプロジェクトによると思いますが、テラシュールブログさんによると60前後がいいそうです。

tsubakit1.hateblo.jp

 

Unityゲーム開発者ギルドで似たような話題を見た気がしますが忘れちゃった。。。


 

 

6. 縦書きで表示したい

Undertaleのパピルスのように縦書きで表示したい場合
すでに先駆者がいらっしゃったのでそちらで。

www.cg-method.com

 

 

 

 

7. ボタンが反応しない時

Text Mesh ProのRaycastが有効になっていると起こります。

例えば↓の図の場合、TextMeshProの範囲(黄色い枠内)は下にButtonがあっても反応しません。

f:id:Raspberly:20200731025215p:plain

これはTextMeshPro-TextのExtra Setting/Raycast Targetのチェックを外すことで解決します。

f:id:Raspberly:20200731025639p:plain

これ以外にも、TextMeshProをButtonの子オブジェクトにすることでも解決します。

 

 

 

 

参考資料

(:3[kanのメモ帳]

DOTweenに関してはKanさんの記事でまとめられています。

kan-kikuchi.hatenablog.com

kan-kikuchi.hatenablog.com

kan-kikuchi.hatenablog.com

 

ゲームUIネット

実はDOTweenは最近アップデートされました。
そちらについてはゆーじさんゲームUIネットがとても学びになります。

game-ui.net

game-ui.net

game-ui.net

本日開催のyokohama.unityでも登壇されていました。

 

Unity使いこなし術

天神いなさんの投稿しているUnity使いこなし術シリーズでDOTweenが解説されています。

youtu.be

youtu.be

 

 

 

 

 

他、わかりにくい所、間違っている所がありましたらコメントまでお願いします!

【アセット紹介】ユニティちゃんSunny Side Up(URP版)

 

7月10日にユニティちゃんの新モデルが公開されました。

★遂に登場!HDRPとURPで使えるユニティちゃんアセット « UNITY-CHAN! OFFICIAL WEBSITE

是非ちゃん」という通称があるようです。 (アウターに是非と書かれている)

 

今回は新しくなったユニティちゃんの3Dモデルの動作確認から、
プロジェクトに持っていくところまでやってみます。

 

開発環境

Unity2020.1.0f1

UnityChanSSU_URP v1.0.1

2021年1月28日追記

Unity2020.2以上だと付属のシェーダーが動かないようです。
Unity2020.1.17f1 (URP 8.3.1)では正常に動いています。

 

 

プロジェクトのダウンロード

オフィシャルサイトからダウンロードできます。

f:id:Raspberly:20200725163537p:plain

 

f:id:Raspberly:20200725163737p:plain

他の3Dモデルのようにunitypackageではありません
ダウンロードしたzipにはUnityChanSSU_URPというプロジェクトが入っています。

 

ちなみにこのプロジェクトはUnity2019.4.2f1で作成されていますが、今回はUnity2020.1.0f1で開いてみます。

 

 

デモシーンの確認

フォルダ構成はこんな感じ

f:id:Raspberly:20200725175129p:plain

デモシーンはScenesの中に入っています。

f:id:Raspberly:20200725175628p:plain

開いてみるとステージの上にユニティちゃんが配置されています。

f:id:Raspberly:20200725180359p:plain

 

そのまま再生すると踊ってくれます。アニメーションはTimelineで制御されています。
(なぜかデフォルトでフェイスアニメーションのTimelineがミュートになってました)
揺れ物はUnityChanSpringBoneでできています。

f:id:Raspberly:20200725182436g:plain

 

ユニティちゃんのインナーがキラキラ光っていますが、これはShaderGraphでできているようです。

f:id:Raspberly:20200726001757p:plain
これはMeshRoot/ShirtLEDを無効化すると表示されなくなります。

f:id:Raspberly:20200725232333p:plain

 

 

自分のプロジェクトにユニティちゃんをインポートする

デモとモデルを確認したので次は、自分のプロジェクトに持って行ってみます。
ここでいう自分のプロジェクトとは、あなたが個人的に作成しているプロジェクトのことを指します。

ユニティちゃんをエクスポート

自分のプロジェクトに持っていきやすいようモデルのunitypackageを作成します。
ProjectビューのUnityChanSSUフォルダを右クリック、Export Packageを選びます。

f:id:Raspberly:20200726015845p:plain

エクスポート対象は、ModelsPrefabsShaderです。(ProfilesとRPSettingsはあってもよい。)

f:id:Raspberly:20200726015853p:plain

名前はUnityChanSSU_URPとします。

f:id:Raspberly:20200726154401p:plain

f:id:Raspberly:20200726194028p:plain

これでunitypackageの完成です。

 

ユニティちゃんをインポート

先ほどのunitypackageを、自分のプロジェクトにインポートする際に
Unity Chan Spring BoneUniversal Toon Shader for URPも導入する必要があります。
UnityChanSSU_URPプロジェクトのPackagesにある2つのフォルダを自分のプロジェクトのPackagesフォルダにコピーしましょう。

f:id:Raspberly:20200725215408p:plain

これでインポートは完了です。

 

インポート後は、UnityChanSSU/Prefabs/UnityChanSSU_DynColをシーンに置いてみます。

f:id:Raspberly:20200726194620p:plain

無事表示されました。

f:id:Raspberly:20200726005355p:plain

 

キャラクターコントローラー系アセットで動かすこともできます。

ゲームのキャラクターとして活用できそうですね。

f:id:Raspberly:20200726224821g:plain

 

 

 

 

その他 Built-inプロジェクトで使う場合

URPではなく従来のビルトインプロジェクトで使う場合、そのままだとシェーダーエラーが起こるので使えません。

f:id:Raspberly:20200726165115p:plain
マテリアルのシェーダーを変えたりして対応しましょう。
↓は全てのマテリアルにUnlit/Textureシェーダーを適応しています。

f:id:Raspberly:20200726171053g:plain

マテリアルを調整すれば問題なく動かすことができます。

 

 

 

その他 ユニティちゃんのギズモがうるさい時の対処法

Sceneビュー上でのギズモ(ライトのアイコンや、可視化されたコライダー)が邪魔に感じる場合の対処法です。

f:id:Raspberly:20200726214148p:plain

これは設定を変えるだけで解決できます。
Sceneビュー上にあるGizmosボタンを押すと全てのギズモを非表示にできます。

f:id:Raspberly:20200726220608p:plain

 

Gizmosの▼ボタンから細かい設定を変えることができ、
3D Iconsのスクロールバーを動かすことでアイコンの大きさを変更できます。

f:id:Raspberly:20200726224327g:plain

 

他にも、SpringCapsuleConlliderやSpringManagerなどのチェックを外すことでかなり見やすくなります。
必要に応じて切り替えましょう。

f:id:Raspberly:20200726224354g:plain

 

 

 

 

 

以上となります。
新しく誕生したユニティちゃんモデル、是非活用してみてください!

 

 

 

参考資料

tsubakit1.hateblo.jp

www.asset-sale.net

 

 

 

 

f:id:Raspberly:20200726232527p:plain

この記事はユニティちゃんライセンス条項の元に提供されています

【メタ演出】Windowsのメッセージボックスを出す【Unity】

今回はUnityネタをやっていきます。
ゲームでたまに見るメタ演出を再現する試みで、WindowsのメッセージボックスをUnityから出してみます。

 

メタ演出をやろうと思ったきっかけ

現在Steamで開催中のサマーセールで面白いゲームを見つけました。その名も「OneShot

こちらは斬新な演出が特徴のゲームでメタ演出が盛り込まれています。
プレイ中も「これUnityでできるのかなぁ」といろいろ考えていました。
そこで今回は、ゲーム内の序盤から使われているメッセージボックスをUnityで出してみます

 

※この記事にOneShotのネタバレは含んでいません。

 

 

 

メタ演出とは

いわゆるメタフィクションのことを指します。
簡単に表すとゲーム内で「これはゲームである」ことを表現することです。
ゲームキャラクターが、自分がNPCであることを自覚していたり、第四の壁を越えようとしてくるなど。

おもしろい演出ができる一方、うざがられたりするので全てのゲームで使える演出ではありません

今回扱うメッセージボックスは、
ゲームの主人公ではなく画面の前にいるプレイヤーに直接メッセージを伝えるために使われますね。

 

 

開発環境

Unity 2019.4.0f1
Windows10

 

 

下準備

調べてみたところ、System.Windows.Forms.dllを使うと簡単にメッセージボックスを出せるそうです。
さっそくやってみます。

DLLを探す

C:Windows/Microsoft.NET/Framework64/vX.X/System.Windows.Forms.dll」を探します。

f:id:Raspberly:20200703003324p:plain

PCによって違うと思いますが私はこちらを。

f:id:Raspberly:20200703015855p:plain

 

DLLをPluginsフォルダに格納する

Assets/Pluginsフォルダを作り、そこにSystem.WIndows.Forms.dllを格納します。

f:id:Raspberly:20200703022717p:plain

 

usingに記述

Scriptに「using System.Windows.Forms;」を記述します。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Windows.Forms;

public class MsgBox : MonoBehaviour
{
------

 これで使う準備は完了です。

 

 

 

 

メッセージボックスを出す

ここからが本題です。下準備はできたのでメッセージボックスを出していきます。
下記のOpen関数をStart()やOnClick()で呼んであげましょう

最もシンプルなメッセージボックス

テキスト本文が表示され、OKボタンがあるだけの簡単なものです。
OKボタンを押すとそのまま終わります。

    public void Open()
    {
        MessageBox.Show
        (
            "メッセージ"
        );
    }

f:id:Raspberly:20200703224317p:plain

 

 

 

 

キャプション付きメッセージボックス

キャプション(タイトル)がついたメッセージボックスを作ります。
やることは変わらず、MessageBox.Showに第二引数を足すだけです。

    public void Open()
    {
        MessageBox.Show
        (
            "メッセージ",
            "タイトル"
        );
    }

 

f:id:Raspberly:20200703222702p:plain

 

 

 

表示するボタンを変える

表示するボタンを変えてみます。
第三引数にMessageBoxButtonsを追加します。

    public void Open()
    {
        MessageBox.Show
        (
            "メッセージ",
            "タイトル",
            MessageBoxButtons.OK
        );

デフォルトは「OK」です。

f:id:Raspberly:20200703222702p:plain

このMessageBoxButtonsは全部で6種類あります。
自由に組み替えられるものではなく、形式が決まっています。

f:id:Raspberly:20200703225809p:plain

MessageBoxButtons.OKCancel

f:id:Raspberly:20200703230332p:plain

MessageBoxButtons.AbortRetryIgnore

f:id:Raspberly:20200703225947p:plain

MessageBoxButtons.YesNoCancel

f:id:Raspberly:20200703230443p:plain

MessageBoxButtons.YesNo

f:id:Raspberly:20200703230518p:plain

MessageBoxButtons.RetryCancel

f:id:Raspberly:20200703230548p:plain

 

 

 

アイコンを表示する

アイコンを表示してみます。

第四引数にMessageBoxIconを追加します。

    public void Open()
    {
        MessageBox.Show
        (
            "メッセージ",
            "タイトル",
            MessageBoxButtons.OK,
            MessageBoxIcon.None
        );
    }

 デフォルトは「None」です。

f:id:Raspberly:20200703222702p:plain

MessageBoxIconは全9種類ある・・・かと思いきや実は5種類です。

f:id:Raspberly:20200703231200p:plain

MessageBoxIconの定義を見てみるとこんな感じ。
実は同じアイコンが使いまわされています。

namespace System.Windows.Forms
{
    public enum MessageBoxIcon
    {
        None = 0,
        Hand = 16,
        Stop = 16,
        Error = 16,
        Question = 32,
        Exclamation = 48,
        Warning = 48,
        Asterisk = 64,
        Information = 64
    }
}

 

MessageBoxIcon.Hand .Stop .Error

f:id:Raspberly:20200703231341p:plain

MessageBoxIcon.Question

f:id:Raspberly:20200703232326p:plain

MessageBoxIcon.Exclamation .Warning

f:id:Raspberly:20200703232349p:plain

MessageBoxIcon.Asterisk .Infomation

f:id:Raspberly:20200703232140p:plain

 

 

 

 

 

押されたボタンに応じて処理をする

押された結果は、 MessageBox.ShowからDialogResultとして取得できます。
ここではresultに値を格納しています。

    public void Open()
    {
        var result = MessageBox.Show
         (
             "メッセージ",
             "タイトル",
             MessageBoxButtons.AbortRetryIgnore,
             MessageBoxIcon.None
         );

         switch(result){
            case DialogResult.None:
                Debug.Log("基本呼ばれないと思う これいる?");
                break;
            case DialogResult.OK:
                Debug.Log("OKボタンが押された");
                break;
            case DialogResult.Cancel:
                Debug.Log("Cancelボタンが押された");
                break;
            case DialogResult.Abort:
                Debug.Log("Abortボタンが押された");
                break;
            case DialogResult.Retry:
                Debug.Log("Retryボタンが押された");
                break;
            case DialogResult.Ignore:
                Debug.Log("Ignoreボタンが押された");
                break;
            case DialogResult.Yes:
                Debug.Log("Yesボタンが押された");
                break;
            case DialogResult.No:
                Debug.Log("Noボタンが押された");
                break;
        }
    }

 

 

閉じるボタンを押すとどうなるの?

閉じるボタンを押すと何が通知されるのでしょうか?
これはMessageBoxButtonsによって変わります

f:id:Raspberly:20200703234400p:plain

MessageBoxButtons.OKの場合は閉じてもOKが押されたと判定されます
MessageBoxButtons.YesCancelの場合はCancelが押されたと判定されます
MessageBoxButtons.YesNoCancelの場合はCancelが押されたと判定されます
MessageBoxButtons.RetryCancelの場合はCancelが押されたと判定されます

 

MessageBoxButtons.AbortRetryIgnore.YesNoの場合はそもそも閉じれない

f:id:Raspberly:20200703225947p:plain

f:id:Raspberly:20200703230518p:plain

 

全部触ったわけではありませんが、MessageBox.Showはオーバーロードが20個もあるのでいろいろできそう。

 

 

 

 

PCのユーザーネームを取得

次は少し変わった演出、PCのユーザーネームを取得しメッセージボックスで表示してみます。
本名を登録している人はそんなにいないと思いますが、初見の人はびっくりするかも。
ユーザーネームは「Environment.UserName」で取得できます。

    public void Open()
    {
        MessageBox.Show
         (
             "やぁ  " + Environment.UserName + "  見てるかい?"
         );
    }

 

f:id:Raspberly:20200703235808p:plain

 

 

 

まとめ

・System.WIndows.Forms.dllをインポートするとメッセージボックスを出せる
・タイトルとメッセージは自由に設定できるがボタンはある程度固定
・PCのユーザーネームも取れる

 

 

ちなみにSteamサマーセールは7月10日までやっているようなので気になる方は要チェック!
その4日後の7月14日はデスストランディングがSteamでリリースされるのでそっちも気になる・・・

 

 

 

 

参考資料

コガネブログさんの方では、EditorフォルダにDLLを格納していますがうまくいきませんでした。
Alpaca Tech Blogさんの方ではPluginsフォルダに格納していまして、こちらだと動作しました。
もしかしたら環境によって違うのかも。

baba-s.hatenablog.com

alpacatech.hateblo.jp

 

w.atwiki.jp

 

 

Unity外でC#を使ったことがそんなにないのでいろいろタメになったけども、
よくよく考えたらUnityというよりも.NET Frameworkの記事だこれ・・・
C#に詳しい方から見たら内容が初歩的すぎてつまらなかったかも・・・

 

 

間違っている所、わかりにくい所がありましたらコメントまでお願いします。