<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>VRChat | ユガラボ</title>
	<atom:link href="https://yugalab.net/archives/tag/vrchat/feed" rel="self" type="application/rss+xml" />
	<link>https://yugalab.net</link>
	<description>pursue the beauty with yuga lab.</description>
	<lastBuildDate>Sat, 22 Mar 2025 04:58:04 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.7.7</generator>
	<item>
		<title>【メルスト/VRChat】原初の森を作りました</title>
		<link>https://yugalab.net/archives/50739</link>
					<comments>https://yugalab.net/archives/50739#comments</comments>
		
		<dc:creator><![CDATA[ユーリ]]></dc:creator>
		<pubDate>Sat, 22 Mar 2025 05:00:04 +0000</pubDate>
				<category><![CDATA[pleasant]]></category>
		<category><![CDATA[pleasure]]></category>
		<category><![CDATA[VRChat]]></category>
		<category><![CDATA[メルクストーリア]]></category>
		<guid isPermaLink="false">https://yugalab.net/?p=50739</guid>

					<description><![CDATA[<p>すみません。この前メルストの記事ラストって言いましたけど…、うそでした〜！！！！！HappyElements/コンテンツ利用ガイドラインに基づく表示当ページは、Happy Elements株式会社「メルクストーリア」の画 [&#8230;]</p>
<p>The post <a href="https://yugalab.net/archives/50739">【メルスト/VRChat】原初の森を作りました</a> first appeared on <a href="https://yugalab.net">ユガラボ</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>すみません。この前メルストの記事ラストって言いましたけど…、うそでした〜！！！！！<br /><span id="more-50739"></span><span class="bold f_red f060 inlineblock lh_default">HappyElements/<a href="http://www.happyelements.co.jp/contents-guideline/" target="_blank" rel="noopener">コンテンツ利用ガイドライン</a>に基づく表示<br />当ページは、Happy Elements株式会社「メルクストーリア」の画像を利用しております。 <br />該当画像の転載・配布等は禁止しております。 ©Happy Elements K.K</span><br /><br /><div class="post_linker" data-href="0">作りました、VRChatで</div><div class="post_linker" data-href="1">作業手順紹介</div><br /><h3 class="section_title putit_caption l_green">作りました、VRChatで</h3><br />こんにちは、ユーリです！ これはTwitterアイコンの元ネタ、わたしのアバター<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_a01.jpg"><img loading="lazy" class="alignnone size-full wp-image-50750" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_a01.jpg" alt="" width="624" height="323" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_a01.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_a01-300x155.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />以前にも記事をあげましたが、3年ほど前からVRChatをやっています。<br /><br />VRC側でもメルスト関連のお友達に来てもらったり、メルストと並行して楽しく過ごしてたのですが…。<br />先月メルストがッ、完結してしまいまして…。<br /><span class="f120">ぐわ〜〜ッ！！耐えられないッッ！！！！！<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_a02_.jpg"><img loading="lazy" class="alignnone size-full wp-image-50752" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_a02_.jpg" alt="" width="624" height="352" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_a02_.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_a02_-300x169.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />メフテルハーネなくなるのやだよぉ〜〜！！ ずっとあの世界にいたかったぁ〜〜！！</span><br /><br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_a03_.jpg"><img loading="lazy" class="alignnone size-full wp-image-50753" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_a03_.jpg" alt="" width="624" height="328" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_a03_.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_a03_-300x158.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />メルストが完結した2日後の朝のこと。<br />メルストつながりからVRChatに来てくれたフレンドさんがいまして、その方はかねてよりVRChat側でもメフテルハーネの再現ワールドをいつか作りたいと言っていました。<br />それまではわたしも「すごい、がんばってね！」て姿勢でいたのですが…。<br /><br />実際にメルストが完結したショックがあまりにも大きく、ふつふつと気持ちが湧いてきたのです。<br /><br /><span class="f120">わたしも、作るか……メフテルハーネを……。</span><br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_a04.jpg"><img loading="lazy" class="alignnone size-full wp-image-50754" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_a04.jpg" alt="" width="624" height="305" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_a04.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_a04-300x147.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />元々は再現のアバターやワールドを作ってよいものか迷ってて乗り気じゃなかったのですが、ハピエレさんのガイドラインを確認すると問題なさそうだった。だ、大丈夫なのか〜〜！！ じゃあやるしかない。実はわたしはモデリングもできる。<br /><br />その時点ではなんも作ってない真っさら状態でしたが、狂気的没頭により所要期間約19日。<br /><span class="f120">できました。原初の森が。</span><br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_a05.jpg"><img loading="lazy" class="alignnone size-full wp-image-50755" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_a05.jpg" alt="" width="624" height="351" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_a05.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_a05-300x169.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br /><span class="under l_blue"><a href="https://vrchat.com/home/world/wrld_7e1b7651-ffbf-4121-9e84-93a66e06bbac/info">ワールドのリンクはこちらです！！</a><br /><a href="https://vrchat.com/home/world/wrld_7e1b7651-ffbf-4121-9e84-93a66e06bbac/info"><img loading="lazy" class="alignnone wp-image-50743 size-medium" src="https://yugalab.net/wp-content/uploads/2025/03/gensho_thumb-300x225.png" alt="" width="300" height="225" /></a><br /></span><br /><br />原初の森なのでもちろん緑精ちゃんがいます。キャワイイね〜！！！<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_a06.jpg"><img loading="lazy" class="alignnone size-full wp-image-50756" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_a06.jpg" alt="" width="624" height="351" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_a06.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_a06-300x169.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />目が合うとよちよち着いてきます。ほんとにかわいいです。すごい。みんなに見てほしい。<br />よちよち着いてくる挙動はAvatarNPCというアセットで簡単に実現できました。<br /><br />森に生えている草や木は今回のために頑張ってモデリングしたり描いたりしました。フルスクラッチだよ！<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_a07.jpg"><img loading="lazy" class="alignnone size-full wp-image-50757" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_a07.jpg" alt="" width="624" height="351" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_a07.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_a07-300x169.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />トトンさんも優雅に空を泳いでます。VRで行くとデカッッッて感じますが、ユウくんを丸呑みできるサイズなので実際相当大きいはず。<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_a10.jpg"><img loading="lazy" class="alignnone size-full wp-image-50758" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_a10.jpg" alt="" width="624" height="290" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_a10.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_a10-300x139.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />メルストが元ネタなので元気の水や勇気の水も置いてあります。中身はQVPenです。<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_a12.jpg"><img loading="lazy" class="alignnone size-full wp-image-50759" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_a12.jpg" alt="" width="624" height="350" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_a12.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_a12-300x168.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />原初の森に居るはずのあの方の気配を感じるコーナーもあります…。今はたまたま留守にしてるみたい。<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_a08.jpg"><img loading="lazy" class="alignnone size-full wp-image-50760" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_a08.jpg" alt="" width="624" height="351" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_a08.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_a08-300x169.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />また、フレンドさんが共有してくださった<ruby><rb>世界鐘</rb><rp>(</rp><rt>ウルラレ</rt><rp>)</rp></ruby>3Dモデルも設置してあります！<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_a11.jpg"><img loading="lazy" class="alignnone size-full wp-image-50761" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_a11.jpg" alt="" width="624" height="352" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_a11.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_a11-300x169.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />メイン二部植物の国編によると原初の森にも<ruby><rb>世界鐘</rb><rp>(</rp><rt>ウルラレ</rt><rp>)</rp></ruby>が生えたけど、シェンルゥさんが破壊しちゃったので作中には登場しなかった…て話だったはず。たしかそう。<br /><br /><span class="f120">こんな感じで、二次創作ではありますがメルストを感じられるワールドが勢いでできちゃいました〜！！<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_a09.jpg"><img loading="lazy" class="alignnone size-full wp-image-50762" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_a09.jpg" alt="" width="624" height="351" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_a09.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_a09-300x169.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />VRChatはVR機器がなくてもPCがあれば無料で遊べますので、是非遊びにきてください！</span><br /><br />動画で見たい方はこちら<br /><div class="youtube"><iframe src="https://www.youtube.com/embed/nlbWG2asQGc?rel=0&amp;start=0" width="624" height="351" frameborder="0" allowfullscreen="allowfullscreen"></iframe></div><br />また、<span class="under"><a href="https://yugalab.booth.pm/items/6625959">メルストっぽいアバター用のアクセサリー</a></span>も出しています。<br />アバターいじれる人はよかったらつけてみて！<br /><br /><h3 class="section_title putit_caption l_green">作業手順紹介</h3><br />せっかくですので、今回やった作業を振り返りつつ紹介します。<br />使ったツールはUnity(無料)、Blender(無料)、Photoshop(有料)です。この3つで概ね全てを作ることができます。<br /><h4 class="section_subtitle putit_caption">DAY 1</h4>フレンドさんと話して、作るぞ〜！って決めた日にさっそく緑精ちゃんのモデリングを開始。この時点では完全に勢いでやってたので何も資料見ずに勘でやってました。<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_b01.jpg"><img loading="lazy" class="alignnone size-full wp-image-50767" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_b01.jpg" alt="" width="624" height="422" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_b01.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_b01-300x203.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />ひととおりできた後で資料を見てなんか目がデカいなと気づき、目をやや小さくする微調整をしました。<br /><br /><h4 class="section_subtitle putit_caption">DAY 2</h4>緑精ちゃんにボーン(アバターの骨のようなもの)をいれて設定すれば、アバターの中に入って動かせるようになります。この時点で概ねアバター完成。いい感じに木が生えてて森っぽいワールドに行って動画撮影。<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_b02.jpg"><img loading="lazy" class="alignnone size-full wp-image-50768" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_b02.jpg" alt="" width="624" height="350" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_b02.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_b02-300x168.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />Twitterにアップしたところ想定以上に反応がもらえたため、俄然やる気がでてきて完全に火がつきました！！みなさまご反応ありがとうございます！！！あの時にたくさんいいね貰えたおかげでエンジン全開になったところはある。<br /><br /><h4 class="section_subtitle putit_caption">DAY 5</h4>3~4日目はジャンプの感想書いてたりしたのでお休み。ここからはワールド作りの作業となります。<br />まずは木を作成。原初の森の木は葉っぱがついていません。Blenderでそれっぽい木を作ります。<br />Mtreeというアドオン(無料)をインストールし、木の長さや枝の多さ、太さなどを入力するとパラメータを元に木が生成されます。<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_b05.jpg"><img loading="lazy" class="alignnone size-full wp-image-50769" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_b05.jpg" alt="" width="624" height="395" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_b05.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_b05-300x190.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />生成された木はこの時点ではメッシュ化していないパラメータ上の存在なので、メッシュ化→サブディビジョンサーフェスでハイポリゴン化。<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_b06.jpg"><img loading="lazy" class="alignnone size-full wp-image-50770" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_b06.jpg" alt="" width="624" height="419" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_b06.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_b06-300x201.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />大きさの参考に横にマネキン置きます。めっちゃデカイ！ 枝まわりは近距離で眺めることはないはずなのでローポリのままでOKとしました。<br />ハイポリ化した状態でサブディビジョンサーフェスを適用し、Sculptingという粘土こねこね機能をつかって木っぽいデコボコを作ります。<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_b07.jpg"><img loading="lazy" class="alignnone size-full wp-image-50771" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_b07.jpg" alt="" width="624" height="415" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_b07.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_b07-300x200.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />形を整えたらデシメートを適用してローポリに戻せば木が完成！<br /><br /><h4 class="section_subtitle putit_caption">DAY 6~7</h4>次にワールドの土台作りです。屋外のフィールドなので自然な起伏のある地面が必要です。<br />当初はUnityのTerrainを使おうとしたのですが、細かい調整がしにくいため土台もBlenderで作ることにしました。<br />まずはグリッド(平面)を追加し、分割数を多めにとってハイポリゴンな平面を作ります。<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_b08.jpg"><img loading="lazy" class="alignnone size-full wp-image-50772" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_b08.jpg" alt="" width="624" height="422" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_b08.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_b08-300x203.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />それから、見せたいビューポイントエリアの想定。<br />・ワールドに入ってすぐ、原作背景再現の画角<br />・大きな森を見上げるスチルを再現する画角<br />・マトリクスさんとシアノさんが過ごしてそうな場所<br />・<ruby><rb>世界鐘</rb><rp>(</rp><rt>ウルラレ</rt><rp>)</rp></ruby>の3Dモデルを置く場所<br />あたりを念頭において地形を決めます。<br /><br />ポリゴンを投げ縄範囲選択して高さ軸だけ変更し、大まかに「低くて侵入できない地面」「ユーザーが歩く想定の地面」「高くて越えられない壁」の3つの高さにエリアを分けて高低差をつけます。<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_b09.jpg"><img loading="lazy" class="alignnone size-full wp-image-50773" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_b09.jpg" alt="" width="624" height="410" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_b09.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_b09-300x197.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />3つの高さに分けたポリゴンを「メッシュ→分離→選択」で分離して別メッシュに分けます。Terrainだとこういう処理がしにくいので、このほうが個人的にはやりやすい！<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_b10.jpg"><img loading="lazy" class="alignnone size-full wp-image-50774" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_b10.jpg" alt="" width="624" height="413" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_b10.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_b10-300x199.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />メッシュを分割したらSculpting粘土こねこねで軽く起伏をつけます。<br /><br />さらにユーザーが歩く用の地面をコピーして、外周部分のみ選択し真上に延長して裏返したポリゴンを作ります。これを透明化すれば歩けるエリアをぐるりと囲む形の侵入禁止壁ができます。<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_b11.jpg"><img loading="lazy" class="alignnone size-full wp-image-50775" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_b11.jpg" alt="" width="624" height="396" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_b11.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_b11-300x190.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />実際のワールドで一段下のエリアに降りられないのは、このような透明壁を設置しているからなのです。<br /><br /><h4 class="section_subtitle putit_caption">DAY 8~9</h4>できあがった土台と木をワールドに仮配置。特にワールド入ってすぐの原作再現画角はこだわって配置！<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_b16.jpg"><img loading="lazy" class="alignnone size-full wp-image-50780" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_b16.jpg" alt="" width="624" height="211" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_b16.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_b16-300x101.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />緑精のモデルを流用してパーティクルを作り、遠くが霞んで見える&#8221;Fog&#8221;や色味を調整する&#8221;PostProcessing&#8221;も設定すると、早くもそれっぽい見た目に近づいてきてテンションが上がり、モチベが補給できます。このサイクルに入るともう無敵です。<br /><br />それから原作のユニット絵を参考にしながら、それっぽい草を描いて設置します。<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_b12.jpg"><img loading="lazy" class="alignnone size-full wp-image-50778" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_b12.jpg" alt="" width="624" height="370" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_b12.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_b12-300x178.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />草は手動で一本一本植えるのは大変なので、ポリゴンから草をある程度自動で生やしてくれるシェーダー(ShrubberyShader)を使いました。草が生える位置を指定する用のポリゴンを切り出したりしています。これは元の地面ポリゴンの真ん中をくり抜いて外側部分だけを残したポリゴン。<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_b14.jpg"><img loading="lazy" class="alignnone size-full wp-image-50779" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_b14.jpg" alt="" width="624" height="410" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_b14.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_b14-300x197.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />このメッシュに対して草生やしシェーダーを適用すると、メッシュの位置に自動で草が生えてくれます。すばらしい。<br />また、原作のクエスト出発前のエリア画像を参考に、ワールド内で撮った写真を合成してワールドサムネイルを作成。テンションが上がる。モチベアップ。こういうの大事！<br /><br /><h4 class="section_subtitle putit_caption">DAY 12~13</h4>10と11はジャンプ読んでたのでおやすみ。<br />元気の水と勇気の水のモデルを作って設置。これが置いてあると一気にメルストっぽさアップします。メルストだ！！<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_b15.jpg"><img loading="lazy" class="alignnone size-full wp-image-50781" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_b15.jpg" alt="" width="624" height="292" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_b15.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_b15-300x140.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />メルスト成分だこれ〜てテンションが上がってさらにモチベを追加補給。永久期間が完成しちまったな！<br />そして緑精ちゃんにAvatarNPCsystemを入れたら思ってたよりめちゃくちゃいい感じに動いてくれて感動。<br />この時点で途中経過をフレンドさんに見せてドン引かれたり感動してもらったりしてさらにやる気アップ！<br /><br /><h4 class="section_subtitle putit_caption">DAY 14</h4>テンション上がったついでに、どうせなので入り口で緑精がデオイデオイするトンネルも作ろうと思って作りました。これまでの作業の応用でなんかすぐできた。すぐできすぎてしまい、よく覚えていません。<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_b17.jpg"><img loading="lazy" class="alignnone size-full wp-image-50782" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_b17.jpg" alt="" width="624" height="419" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_b17.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_b17-300x201.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br /><h4 class="section_subtitle putit_caption">DAY 15</h4>マトリクスさんの成分は取り入れたかったので、資料を見ながら剣をモデリングしました。半日で完成。資料があってめちゃくちゃ助かった！！ 資料の存在は作業スピードに直結する。<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_b13.jpg"><img loading="lazy" class="alignnone size-full wp-image-50783" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_b13.jpg" alt="" width="624" height="427" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_b13.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_b13-300x205.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />シアノさんがいそうなところはマトリクスさんと対角線上の樹の装飾でにおわせる形にしました。<br /><br /><h4 class="section_subtitle putit_caption">DAY 16</h4>フレンドさんと話した時にトトン居てほしいってなったので、トトン作るぞ〜！と朝に決意してモデリング開始、昼に完成して、夕方にワールドに設置、なんやかんや調整して夜には無事に泳ぐようになってくれました。後で振り返ってもこの日が一番狂気的に没頭してたかも。<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_b03.jpg"><img loading="lazy" class="alignnone size-full wp-image-50765" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_b03.jpg" alt="" width="624" height="420" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_b03.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_b03-300x202.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br /><h4 class="section_subtitle putit_caption">DAY 19</h4>17と18はジャンプ読んでておやすみ。並行作業してたフレンドさんから<ruby><rb>世界鐘</rb><rp>(</rp><rt>ウルラレ</rt><rp>)</rp></ruby>のモデルが完成したとのことで受け取り、あらかじめ用意しておいた設置場所に置きました。事前に寸法聞いてたおかげですっぽりはまった！ 気持ち良い！<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_b18.jpg"><img loading="lazy" class="alignnone size-full wp-image-50784" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_b18.jpg" alt="" width="624" height="424" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_b18.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_b18-300x204.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />それからワールドに馴染ませるため色味を調整、軽くギミック入れて完成。これで全ての作業が終了！！<br /><br /><h4 class="section_subtitle putit_caption">DAY 20</h4>祝日だったので、午前中にフレンドさんに事前に内覧してもらい、昼ごはん食べてから紹介動画を撮り、午後には公開にこぎつけました。<br /><a href="https://yugalab.net/wp-content/uploads/2025/03/20250320_b04.jpg"><img loading="lazy" class="alignnone size-full wp-image-50766" src="https://yugalab.net/wp-content/uploads/2025/03/20250320_b04.jpg" alt="" width="624" height="496" srcset="https://yugalab.net/wp-content/uploads/2025/03/20250320_b04.jpg 624w, https://yugalab.net/wp-content/uploads/2025/03/20250320_b04-300x238.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />3/1から作業開始して怒涛の行軍でした…。達成感がすごい！！<br />だいぶいい感じになったと思うので、是非みにきてください！<br /><br />以上です！<br />次回作は未定ですが、何かやれそうだったら何かをやるかもしれません。耐えられなくなった時、何かが生まれるのだ。</p><p>The post <a href="https://yugalab.net/archives/50739">【メルスト/VRChat】原初の森を作りました</a> first appeared on <a href="https://yugalab.net">ユガラボ</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://yugalab.net/archives/50739/feed</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
			</item>
		<item>
		<title>【VRChat】自作ワールド作りました！ いろいろメモ(作業手順、UdonSharp、軽量化など)</title>
		<link>https://yugalab.net/archives/46481</link>
					<comments>https://yugalab.net/archives/46481#respond</comments>
		
		<dc:creator><![CDATA[ユーリ]]></dc:creator>
		<pubDate>Fri, 30 Sep 2022 10:15:05 +0000</pubDate>
				<category><![CDATA[Blender]]></category>
		<category><![CDATA[technical]]></category>
		<category><![CDATA[Unity]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[VRChat]]></category>
		<guid isPermaLink="false">https://yugalab.net/?p=46481</guid>

					<description><![CDATA[<p>こんにちは、ユーリです。最近VR端末のMeta Quest2を買いまして、VRにはまってます！特にVRChatが楽しくてアバター作ったり色々してたのですが、ついにワールドも作りました。大変だったところなどをまとめました。 [&#8230;]</p>
<p>The post <a href="https://yugalab.net/archives/46481">【VRChat】自作ワールド作りました！ いろいろメモ(作業手順、UdonSharp、軽量化など)</a> first appeared on <a href="https://yugalab.net">ユガラボ</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>こんにちは、ユーリです。最近VR端末のMeta Quest2を買いまして、VRにはまってます！<br />特にVRChatが楽しくてアバター作ったり色々してたのですが、ついにワールドも作りました。大変だったところなどをまとめました。<br /><span id="more-46481"></span><br /><div class="post_linker" data-href="0">VRChatの紹介(軽く)</div><div class="post_linker" data-href="1">ワールドの土台作成</div><div class="post_linker" data-href="2">家具と小物の配置</div><div class="post_linker" data-href="3">UdonSharp製ギミックをつくる</div><div class="post_linker" data-href="4">ギミックの同期問題</div><div class="post_linker" data-href="5">仕上げ(軽量化とライトベイク)</div><br /><h3 class="section_title putit_caption l_green">VRChatの紹介(軽く)</h3><br /><span class="under l_blue"><a href="https://hello.vrchat.com/">VRChat</a></span>とは、バーチャル空間上でアバターを着て他の方とおしゃべりできるツールです！<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_b02.jpg"><img loading="lazy" class="alignnone size-full wp-image-46645" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_b02.jpg" alt="" width="624" height="332" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_b02.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_b02-300x160.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />アバターは配布されているものもありますが、自作の3Dモデルをアップできるので非常に自由度が高く、人型はもちろんケモノでも触手でもなんにでもなれちゃうのがすごいところ。<br />楽しむために頭にかぶるようなVR機器が必要だと勘違いされがちですが、デスクトップPCでもモニタに映してプレイできます。(ただし没入感は得にくいです)<br /><br />自分オリジナルの場所として「ワールド」を作って思い通りの景色に降り立つこともできるし、スクリプトを書いてギミックを置いたりもできます。<br />ゲームというよりソーシャルプラットフォームに近いものですが、VRならではの臨場感からあたかもその場にいるような感覚があり、好きな見た目になって好きなところへ行けるが魅力。<br />近い未来、バーチャル空間で暮らせるようになったらこんな感じなのかも。ギミックが作り込まれているワールドではゲームっぽい遊びもできちゃう！<br /><br />ちなみにわたしはこのアバターをつかってます。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_d01.jpg"><img loading="lazy" class="alignnone size-full wp-image-46655" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_d01.jpg" alt="" width="624" height="332" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_d01.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_d01-300x160.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><span class="l_blue under"><a href="https://vroid.com/studio">VRoidStudio</a></span>というアバター制作ツール(無料)と、モデリングソフトの<span class="l_blue under"><a href="https://blender.jp/">Blender</a></span>(無料)による小物追加で自作しました！<br />わたしは3Dモデリングは得意なほうではありませんが、今は便利なツールがたくさんあるので専門的な技術がなくても比較的とっつきやすかったです！ もしVRで見かけたらお気軽に絡んでください。<br /><br /><h4 class="section_subtitle putit_caption">自作ワールド紹介</h4>そして今回わたしが自作したワールドはこちら！「Cafe &amp; Bar 宵星」です。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_a01.jpg"><img loading="lazy" class="alignnone size-full wp-image-46629" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_a01.jpg" alt="" width="624" height="331" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_a01.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_a01-300x159.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />後述しますが、弓矢を使って夜空に星を打ち上げ、星座を作って遊べるギミックがあります。これがこのワールドの目玉！<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_b04.gif"><img loading="lazy" class="alignnone size-full wp-image-46644" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_b04.gif" alt="" width="624" height="351" /></a><br /><br />たくさん星を打ち上げればカラフルになってにぎやかです。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_a02.jpg"><img loading="lazy" class="alignnone size-full wp-image-46630" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_a02.jpg" alt="" width="624" height="351" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_a02.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_a02-300x169.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />カフェスペースではスイーツが食べ放題です。くつろげるスペースも置いてみました。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_a05.jpg"><img loading="lazy" class="alignnone size-full wp-image-46631" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_a05.jpg" alt="" width="624" height="362" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_a05.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_a05-300x174.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />Barコーナーはいい感じのシーリングファンライトがまわってます。影で雰囲気をだしてる。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_a04.jpg"><img loading="lazy" class="alignnone size-full wp-image-46632" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_a04.jpg" alt="" width="624" height="351" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_a04.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_a04-300x169.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />最近話題の画像生成AIでつくったアートを飾ったりもしてます。こういうのを配置するだけでもなんとなく見栄えがよくなるから助かる。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_a03.jpg"><img loading="lazy" class="alignnone size-full wp-image-46633" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_a03.jpg" alt="" width="624" height="351" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_a03.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_a03-300x169.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />ご興味がある方はVRChatのアカウントがあれば<span class="under l_blue"><a href="https://vrchat.com/home/launch?worldId=wrld_e9432bb9-03d7-4f5b-808b-f58c510ec6e0">こちらのリンク</a></span>からワールドを開けますので是非あそんでみてください！QUESTも対応してます。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_a06.jpg"><img loading="lazy" class="alignnone size-full wp-image-46634" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_a06.jpg" alt="" width="624" height="370" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_a06.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_a06-300x178.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />以下、ワールド作成にあたり行った作業を紹介していきます。作業開始から2週間くらいでできたけど、めっちゃ楽しくて仕事と食事以外ずっとワールド作ってました。全作業合計で40~50時間くらいやった気がする。<br />※あくまでもわたしなりのやり方ですので参考までに！<br /><br /><h3 class="section_title putit_caption l_green">ワールドの土台作成</h3><br /><h4 class="section_subtitle putit_caption">Blenderで床や柱をつくる</h4>今回のワールドはおうち+庭的な構成にするつもりでしたが、細かいレイアウトはぜんぜん考えてなかったので作りながら雰囲気で組み立てました。<br />床と柱部分を作ってからUnity上で配置しながら作る方向で進めます。<br />まずBlenderでただの立方体を作り…、<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_c01.jpg"><img loading="lazy" class="alignnone size-full wp-image-46636" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_c01.jpg" alt="" width="624" height="317" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_c01.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_c01-300x152.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />ネット上で拾ってきたフリー素材のテクスチャを貼ります。(テクスチャの貼り方はググってください)そして縦サイズを縮めて平べったくつくれば「床」の完成です。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_c02.jpg"><img loading="lazy" class="alignnone size-full wp-image-46637" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_c02.jpg" alt="" width="624" height="336" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_c02.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_c02-300x162.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a>誰がなんと言おうと床タイルです。いいですね？<br /><br />同様に細長い立方体にテクスチャを貼れば柱の完成です。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_c03.jpg"><img loading="lazy" class="alignnone size-full wp-image-46638" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_c03.jpg" alt="" width="624" height="342" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_c03.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_c03-300x164.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />柱なんです。いいですね？ 完成です。<br />本当にただの立方体で頂点が8つしかないモデリングとも呼べないシロモノですが、テクスチャを貼れば見た目がそれっぽくなるので案外大丈夫です。<br /><br />ここで大事なのは縦横の寸法を1m x 1m などキリのよい数字で、座標xyzゼロで作ることです。こうすることでUnity上で座標を打って配置する時に隙間なくピッチリ置けるようになります。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_b01.jpg"><img loading="lazy" class="alignnone size-full wp-image-46646" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_b01.jpg" alt="" width="624" height="301" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_b01.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_b01-300x145.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />中途半端な寸法で作ると配置するときに重なったりうまく繋がらなかったりするのでご注意。<br /><br />書き出す時は、対象の立体(メッシュ)を選択してからfbx形式でエクスポート。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_g01.jpg"><img loading="lazy" class="alignnone size-full wp-image-46720" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_g01.jpg" alt="" width="624" height="297" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_g01.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_g01-300x143.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />「選択したオブジェクトのみ」、「メッシュのみ」で書き出します。パーツごとに1つ1つ書き出しましょう。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_g02.jpg"><img loading="lazy" class="alignnone size-full wp-image-46721" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_g02.jpg" alt="" width="624" height="325" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_g02.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_g02-300x156.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />ついでにちょっと頑張って斜めの床も作ったりしました。ナナメパーツがあるとマイクラ的お豆腐建築から脱出でき、組み合わせバリエーションがグッと増えます。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_c04.jpg"><img loading="lazy" class="alignnone size-full wp-image-46639" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_c04.jpg" alt="" width="624" height="338" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_c04.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_c04-300x163.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br /><h4 class="section_subtitle putit_caption">Unityで配置する</h4>それからUnity側の作業に移ります。VRChatに対応しているバージョンのUnityを入手してください。無料です。<br />ワールドを作り始める前の一番大事な作業はVRCWorldSDKをインポートすること。<br />インポートができたらAssets&gt;VRChat Examples&gt;Prefabsの中にあるVRCWorldをシーンに配置しましょう。これを入れることでVRChatのワールドとしてアップロードできるようになります。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_c05.jpg"><img loading="lazy" class="alignnone size-full wp-image-46640" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_c05.jpg" alt="" width="624" height="360" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_c05.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_c05-300x173.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />SDKなどの基本ファイルをインポートできたらいよいよ制作開始です。<br />まずお家の柱などを置く前に地面が欲しいので、3DオブジェクトのCubeを作成し基底の床(地面)をつくります。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_c06.jpg"><img loading="lazy" class="alignnone size-full wp-image-46641" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_c06.jpg" alt="" width="624" height="363" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_c06.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_c06-300x175.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />作ったcubeの縦横の寸法を100倍にすれば平べったい形状になります。もうこの上を立って歩けちゃいます！<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_c07.jpg"><img loading="lazy" class="alignnone size-full wp-image-46642" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_c07.jpg" alt="" width="624" height="360" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_c07.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_c07-300x173.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />真っ白な床のままだと味気ないですが、テクスチャを貼れば地面にも草原にでもサイバーパンクSFフィールドにもなります。テクスチャは万能です。<br />テクスチャを貼るためにはマテリアルが必要なので、画面下のファイルビューで右クリックし、作成→マテリアルを作りましょう。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_h01.jpg"><img loading="lazy" class="alignnone size-full wp-image-46732" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_h01.jpg" alt="" width="624" height="353" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_h01.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_h01-300x170.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />次に作ったマテリアルを床にしたいCubeに割り当てます。Cubeを選択すると右インスペクタ内にCubeに対応する「Mesh Renderer」の設定ができます。これがCubeの描画を担当している部分です。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_h02.jpg"><img loading="lazy" class="alignnone size-full wp-image-46733" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_h02.jpg" alt="" width="624" height="436" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_h02.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_h02-300x210.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />MeshRendererはデフォルトでは真っ白なマテリアルが割り当てられていますが、編集するために新規作成したマテリアルをドラッグドロップして割り当てます。<br /><br />割り当てたら自由に編集できるようになるのでマテリアルを開き「アルベド」から床の見た目にしたいテクスチャを選択します。するとテクスチャ画像の模様が床に反映されます！<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_h03.jpg"><img loading="lazy" class="alignnone size-full wp-image-46734" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_h03.jpg" alt="" width="624" height="391" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_h03.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_h03-300x188.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />今回は草地にしました。テクスチャ画像についてはフリー素材を探してくるなりお絵かきソフトで作成するなり、AIで生成するなりしてください。<br /><br />それからBlenderで作成した床をUnityに取り込んでならべる作業です。<br />Blenderで書き出したfbxファイルをドラッグドロップでUnityのフォルダに放り込んでください。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_h04.jpg"><img loading="lazy" class="alignnone size-full wp-image-46735" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_h04.jpg" alt="" width="624" height="272" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_h04.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_h04-300x131.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />するとUnityプロジェクト内にモデリングした物体を取り込めるので、今度はそれをワールドに配置していきます。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_h05.jpg"><img loading="lazy" class="alignnone size-full wp-image-46736" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_h05.jpg" alt="" width="624" height="397" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_h05.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_h05-300x191.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />先程の手順でマテリアルとテクスチャを取り込めば見た目もBlenderで作った通りになります。ここまでくればもう後は楽しい作業しかありません。<br /><br />床をいい感じに配置して、柱をいい感じに立てます。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_b05.jpg"><img loading="lazy" class="alignnone size-full wp-image-46648" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_b05.jpg" alt="" width="624" height="380" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_b05.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_b05-300x183.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />ここはサクッとやったように見えますが1~2時間かかってます。<br /><br />次に柱の間を壁を構成する用の壁も作って、柱の間を壁で埋めたらもうそれっぽい感じがでてきます。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_b06.jpg"><img loading="lazy" class="alignnone size-full wp-image-46649" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_b06.jpg" alt="" width="624" height="383" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_b06.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_b06-300x184.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />壁部分をblenderで作ってテクスチャをさらに用意して、窓ありverも作って…といった作業でさらに2~3時間かかってます。でも一番たのしいのでやってればいつのまにか時間が過ぎちゃいます。<br /><br />床と壁ができたら、床部分をコピペして天井を作ればもう屋内化が完了。屋根をつけると真っ暗になるので、建物内に光源を置きましょう。右クリックしてライトを新規作成します。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_e01.jpg"><img loading="lazy" class="alignnone size-full wp-image-46688" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_e01.jpg" alt="" width="624" height="288" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_e01.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_e01-300x138.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />屋内用ならポイントライトなどがオススメ。<br />光源を置いたら勝手に雰囲気がでてきます。すごいですね。ここまで来たらもう勝ったようなもんです。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_b07.jpg"><img loading="lazy" class="alignnone size-full wp-image-46650" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_b07.jpg" alt="" width="624" height="383" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_b07.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_b07-300x184.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br /><br /><h3 class="section_title putit_caption l_green">家具と小物の配置</h3><br />さて、建物のガワと床と壁は自前で用意しましたが、中にある家具や小物は自力で作ろうとすると大変です。<br />ですが！ VRChatのワールドを作りたい需要はけっこうあるためか、Boothなどで探すと無料で使える3Dデータがたくさんあります！ 高クオリティで有料のものも多数。<br />いろいろと置きたい小物を集めて配置しました。めちゃくちゃ良い感じになった！(これだけで10時間とかあっという間に過ぎます)<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_b08.jpg"><img loading="lazy" class="alignnone size-full wp-image-46651" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_b08.jpg" alt="" width="624" height="383" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_b08.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_b08-300x184.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />有料のも一部買いましたが、小物をひとつひとつ作るのにかかる時間を考えたら買ったほうが早いかなって…。金で解決。買ったら置くだけだから。<br />使わせていただいたものはワールド内のクレジットにぜんぶ書いてあります！ ありがとうございます！<br />家具と小物を置いたらこれは既に「家」じゃん…。という完成度となりました。こうなったらもう勝利は確定したようなもんです。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_b09.jpg"><img loading="lazy" class="alignnone size-full wp-image-46652" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_b09.jpg" alt="" width="624" height="347" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_b09.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_b09-300x167.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />が、これだけだと来た方はワールド内をひと通り見たら満足して帰っちゃうので、なにか面白いものを置きたいですよね。このような欲がでてきたらもう沼にはまっています。<br /><br /><h3 class="section_title putit_caption l_green">UdonSharp製ギミックをつくる</h3><br />VRChatのワールド作成は、コンセプトにもよりますがプログラミングスキルがなくても可能です。景観やデザインや雰囲気で魅せるなら光源やモノの配置センスだけで十分すばらしいものができあがります。<br />ですが、VRChatではユーザーが作ったプログラムの実行が制限付きながら許されているので、スクリプトが書けると手の込んだ仕掛けをワールドに配置することもできちゃいます！<br />わたしもプログラミングで食べているSEの端くれ。ここからが腕の見せ所！<br /><br />ここからはスクリプトを一部紹介。<br />このワールドのメインの見せ物は、入り口左手に置いてある「星の弓」です。<br />持ち運べるオブジェクトとしてワールドに配置してあります。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_d02.jpg"><img loading="lazy" class="alignnone size-full wp-image-46656" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_d02.jpg" alt="" width="624" height="339" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_d02.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_d02-300x163.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />この弓には大まかに5つのギミックが設定されています。<br />・弓を持つと矢を引けるようになる<br />・矢を引いて手を離すと矢を生成して飛ばす<br />・弓に付属のボタンを押すと矢を星として固定する<br />・固定した星を線で繋いで星座にする<br />・固定した星を順番に消す<br />ひとつずつ仕組みを解説します！<br />弓は持ち手(見た目は透明)の部分、弓の見た目部分、矢を持つ部分の3パーツで構成されており、持ち手←弓←矢の順で位置と回転を追従することで見かけを制御しています。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_e02.jpg"><img loading="lazy" class="alignnone size-full wp-image-46689" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_e02.jpg" alt="" width="624" height="306" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_e02.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_e02-300x147.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />最初は弓部分と矢の部分の2パーツだけだったのですが、矢を引いている時に弓の回転ができてしまうと系の表示がえらいことになるので、一時的に弓の回転を固定する必要がでてきました。しかしプレイヤーによるPickUpオブジェクトは回転の角度制限ができないため、弓の見た目部分と透明な持ち手部分を分離し、持ち手の回転をContraintで見た目部分に反映する方式にしました。<br />持ち手→弓見た目のConstraintは矢を引いている時だけスクリプトでOFFにします。すると矢を引いている時だけ弓の見た目部分が回転しなくなります。持ち手部分は実はプレイヤーの手の動きに合わせて回転しているのですが、透明なので見えません。<br /><br /><h4 class="section_subtitle putit_caption">弓を持つと矢を引けるようになる</h4>持ち手の部分にUdon BehaviourスクリプトとVRC PickUpコントローラーを付与しています。PickUpコンポーネントを付けることでそのオブジェクトは道具のようにユーザーが持って遊んだり操作できるようになります。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_e08.jpg"><img loading="lazy" class="alignnone wp-image-46699" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_e08.jpg" alt="" width="624" height="198" /></a><br />また、オブジェクトを持った時に紐づけられたUdon Behaviour側のOnPickUp、OnDropイベントが呼ばれます。<br />このスクリプトでは弓の持ち手部分を持ったら、矢の部分のPickUpをtrueにして矢を引けるようにしています。また、弓にくっついている制御用ボタンのアクティブ化も行っています。<br /><pre><code class="&#8221;language-cs&#8221;"><br /></p>
<div>
<div>public override void OnPickup(){ //グリップ部分を掴んだ時の処理</div>
<div>  //矢の部分を掴めるようにする</div>
<div>  ((VRC.SDK3.Components.VRCPickup)myArrow.GetComponent(typeof(VRC.SDK3.Components.VRCPickup))).pickupable = true;</div>
<div>  Networking.SetOwner(Networking.LocalPlayer, this.gameObject); //自分がこの弓のオーナーになる</div>
<div>  Networking.SetOwner(Networking.LocalPlayer, myArrow); //付属の矢もオーナーになる</div>
<div>  Networking.SetOwner(Networking.LocalPlayer, bowMesh); //弓本体見た目部分もオーナーになる</div>
<div>  //各種制御用コントローラーをアクティブに</div>
<div>  controllerUp.SetActive(true);</div>
<div>  controllerRight.SetActive(true);</div>
<div>  controllerLeft.SetActive(true);</div>
<div>}</div>
<br />
<div>//手を離した時の処理</div>
<div>public override void OnDrop(){</div>
<div>  //矢の部分を掴み許可を解除</div>
<div>  ((VRC.SDK3.Components.VRCPickup)myArrow.GetComponent(typeof(VRC.SDK3.Components.VRCPickup))).pickupable = false;</div>
<div>  //各種制御用コントローラーを隠す</div>
<div>  controllerUp.SetActive(false);</div>
<div>  controllerRight.SetActive(false);</div>
<div>  controllerLeft.SetActive(false);</div>
<div>}</div>
</div>
<p></code></pre><br /><h4 class="section_subtitle putit_caption">矢を引いて手を離すと矢を生成して飛ばす</h4>新しいオブジェクトをワールド内に動的に生成するには VRCInstantiate(GameObject) を利用します。<br />生成した後に位置や回転を渡すのを忘れないようにしましょう、<br />ソース内でpublic GameObject ~~~ と書くことで、Unity側でスクリプトで直接呼び出せるGameObjectやPrefabを登録できるようになりますので、使うオブジェクトは列挙して紐付けましょう！<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_e03.jpg"><img loading="lazy" class="alignnone size-full wp-image-46690" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_e03.jpg" alt="" width="624" height="258" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_e03.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_e03-300x124.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />矢の生成処理はワールド内にいる全員で行ってもらいので、SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, &#8220;(関数名)&#8221;); で呼び出します。 ついでに最後に打った矢を変数で保持しておきます。<br /><pre><code class="&#8221;language-cs&#8221;"><br /></p>
<div>
<div>public GameObject starlightArrowPrefab; //発射用の矢のPrefab<br />
<div>
<div>private GameObject lastShootingStar; //最後に射った流れ星</div>
</div>
</div>
<br />
<div>//矢から手を離した時の処理</div>
<div>public override void OnDrop()</div>
<div>{</div>
<div>  //ローカルで引き絞り距離を計算</div>
<div>  Vector3 arrow_transform = this.gameObject.transform.localPosition;</div>
<div>  varhikishibori_y = arrow_transform.y;</div>
<div>  if( hikishibori_y &gt; 0.15f ){ //一定以上矢をひいていれば</div>
<div>    SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, &#8220;Shot&#8221;); //矢を射つイベント(全員)</div>
<div>  }else{ //矢のひきしぼりが足りない</div>
<div>    SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, &#8220;NoShot&#8221;); //矢を射たないイベント</div>
<div>  }</div>
<div>}</div>
<br />
<div>//矢を打つ</div>
<div>public void Shot()</div>
<div>{</div>
<div>  myAnimator.SetTrigger(&#8220;PositionConstraintON&#8221;); //矢を元の位置に戻す</div>
<div> </div>
<div>  GameObject ArrowShoot = VRCInstantiate(starlightArrowPrefab); //Prefabから矢を生成</div>
<div>  ArrowShoot.transform.position = this.gameObject.transform.position; //矢の位置を決める</div>
<br />
<div>  var angles = bowMesh.transform.rotation.eulerAngles; //弓部分の角度を得る</div>
<div>  ArrowShoot.transform.rotation = Quaternion.Euler(angles); //角度をセット</div>
<br />
<div>  Rigidbody ArrowShootRigidbody = ArrowShoot.GetComponent&lt;Rigidbody&gt;(); //矢の「Rigidbody」を取得</div>
<div>  ArrowShootRigidbody.AddForce(bowMesh.transform.forward * shootPower); //Rigidbodyに前方向の推進力を伝える<br /><br />
<div>
<div>  lastShootingStar = ArrowShoot; //最後に射った星として記録</div>
</div>
</div>
<div>}</div>
</div>
<p><br /></code></pre><br /><h4 class="section_subtitle putit_caption">弓に付属のボタンを押すと矢を星として固定する</h4>弓に付属のボタンは別オブジェクト&amp;別スクリプトです。このオブジェクトをInteract(使用)するとグリップ側のイベントを呼ぶようにしました。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_e05.jpg"><img loading="lazy" class="alignnone size-full wp-image-46691" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_e05.jpg" alt="" width="624" height="261" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_e05.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_e05-300x125.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />SendCustomEventで、スクリプト内から別スクリプトの関数を呼び出せます。ただし引数は設定できません。<br /><pre><code class="&#8221;language-cs&#8221;"><br /></p>
<div>
<div>//星生成ボタン側のスクリプト<br />public class StarCreate : UdonSharpBehaviour{</div>
<div>  public GameObject myGrip; //グリップ部分</div>
<div>  private UdonBehaviour gripBehaviour; //グリップのうどん</div>
<br />
<div>  void Start(){</div>
<div>    gripBehaviour = (UdonBehaviour)myGrip.GetComponent(typeof(UdonBehaviour));</div>
<div>  }</div>
<div>  public override void Interact() { //オブジェクト使用時の処理</div>
<div>    gripBehaviour.SendCustomEvent(&#8220;StarCreate&#8221;); //グリップ側のイベント発火</div>
<div>  }</div>
<div>}</div>
</div>
<p><br /></code></pre><br />グリップ側のイベントで前述の発射処理で最後に射った矢を変数で保持しているものを使います。<br />物理情報はRigidbodyが持っているので、GetComponentから矢のRigidbodyを取得し、useGravityをfalse、isKinematicをtrueにするとその物体は物理演算をやめて停止します。<br /><pre><code class="&#8221;language-cs&#8221;"><br /></p>
<div>
<div>
<div>
<div>//持ち手ボタン側のスクリプト
<div>
<div>[SerializeField]private int myStarMaxLength = 12; //星を撒ける最大数</div>
<div>[UdonSynced]private int myStarsIndex = 0; //現在扱っている星</div>
</div>
<br />public void StarCreate(){</div>
<div>  if( lastShootingStar ){ //最後の矢が存在すれば</div>
<div>    SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, &#8220;Burst&#8221;);</div>
<div>  }</div>
<div>}</div>
</div>
<br />//矢を空中で固定し、その場にエフェクトを生成</div>
<div>public void Burst(){</div>
<div>  if( lastShootingStar ){</div>
<div>    Rigidbody lastShootRigidBody = lastShootingStar.GetComponent&lt;Rigidbody&gt;(); //矢のRegidBody取得</div>
<div>    lastShootRigidBody.useGravity = false; //重力無効化</div>
<div>    lastShootRigidBody.isKinematic = true; //その場に固定</div>
<br />
<div>    GameObject effect = VRCInstantiate(createEffect); //作成エフェクトを生成</div>
<div>    effect.transform.position = lastShootingStar.transform.position; //エフェクトの位置を決める</div>
<div>    if (stampSE) stampSE.PlayOneShot(stampSE.clip); //効果音を鳴らす</div>
<br />
<div>    Destroy(lastShootingStar, 3.0f); //矢は用済みなので3秒後に消す<br /><br />
<div>
<div>    myStarsIndex += 1; //星の管理番号を加算</div>
</div>
</div>
<div>  }</div>
<div>}</div>
</div>
<p></code></pre><br /><h4 class="section_subtitle putit_caption">固定した星を線で繋いで星座にする</h4>これは見た目上は複雑なことやってるように見えますが、実は簡単です。それぞれの星をLookAtで一つ前の星に向かせて、距離ぶんの大きさの線を生成しているだけです。生成するPrefabの大きさをデフォルトで横幅1にするのがポイントです。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_e04.jpg"><img loading="lazy" class="alignnone size-full wp-image-46692" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_e04.jpg" alt="" width="624" height="238" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_e04.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_e04-300x114.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />星は12個まで固定できる仕様で、0~11の番号で制御し GameObject配列で管理しています。<br /><pre><code class="&#8221;language-cs&#8221;"><br /></p>
<div>
<div>//星座をつくる(星座ボタンから呼ばれる)</div>
<div>public void DrawConstellation(){</div>
<div>  SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, &#8220;NetworkDrawConstellation&#8221;);</div>
<div>}</div>
<div>public void NetworkDrawConstellation(){</div>
<div>  //myStarsIndex : 現在空に固定済みの星の数</div>
<div>  for( int index = 0; index &lt; myStarsIndex; index++ ){ //手持ちの星すべて処理 index1から始めるので最初の星は処理しない</div>
<div>    GameObject currentStar = myStars[index];//最新の星</div>
<div>    GameObject backStar = myStars[index-1]; //一つ前の星</div>
<div>    if( currentStar &amp;&amp; backStar ){ //最新と前の星がちゃんとあれば</div>
<div>      float distance = Vector3.Distance(currentStar.transform.position,backStar.transform.position); //距離を算出</div>
<div>      GameObject stellaLineSky = VRCInstantiate(stellaLine); //星座の線を生成</div>
<div>      stellaLineSky.transform.position = currentStar.transform.position; //星の位置に移動</div>
<div>      stellaLineSky.transform.LookAt(backStar.transform); //星座の線を一つ前の星へ向ける</div>
<div>      Vector3 localScale = stellaLineSky.transform.localScale; //拡大率(ローカル)</div>
<div>      localScale.z = distance; //距離を拡大率に代入</div>
<div>      stellaLineSky.transform.localScale = localScale; //ローカル拡大率に反映</div>
<div>      stellaLineSky.transform.parent = currentStar.transform; //親を最新の星にする(親の星が消えれば線も消えるようになる)</div>
<div>    }</div>
<div>  }</div>
<div>}</div>
</div>
<p><br /></code></pre><br /><h4 class="section_subtitle putit_caption">固定した星を順番に消す</h4>こちらはもっと単純で、星を固定した後に加算する管理番号でGameObject配列から消したいオブジェクトを引っ張り出してDestroyしています。消したら管理番号の数も減算します。<br /><pre><code class="&#8221;language-cs&#8221;"><br /></p>
<div>
<div>//星を消すイベント(別ボタンから呼ばれる)</div>
<div>public void StarDestroy(){</div>
<div>  SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, &#8220;RefreshLastStar&#8221;);</div>
<div>}</div>
<br />
<div>//夜空に配置した星をひとつ消す</div>
<div>public void RefreshLastStar(){</div>
<div>  //myStarsIndex : 現在空に固定済みの星の数</div>
<div>  if( myStarsIndex &gt; 0 ){</div>
<div>    var lastStar = myStars[myStarsIndex-1];</div>
<div>    if( lastStar ){</div>
<div>      Destroy(lastStar, 0.0f); //星を即座に消す</div>
<div> </div>
<div>      GameObjecteffect = VRCInstantiate(destroyEffect); //削除エフェクトを生成</div>
<div>      effect.transform.position = lastStar.transform.position; //エフェクトの位置を決める</div>
<div>      Destroy(effect, 5.0f); //エフェクトは5秒後に消す</div>
<div>      myStarsIndex -= 1; //管理番号をひとつ戻す</div>
<div>    }</div>
<div>  }</div>
<div>}</div>
</div>
<p></code></pre><br />他にも細かい制御がありますが、大まかにはこんな感じです！<br /><br /><h4 class="section_subtitle putit_caption">おまけ:矢の衝突判定</h4>矢と星の処理とは直接関係ないのですが、矢がおうちまたはワールド内にあるターゲットに当たると消滅する処理をいれました。<br />おうちの中でくつろいでいる時に矢が部屋の中に飛んできたら落ち着かないだろうなと思ったためです。<br />最初は当たったオブジェクトのレイヤーで条件付けを試したのですが、何故かうまくいかなかったため最終的には当たったGameObjectの名前部分一致で処理を発火させるようにしました。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_e07.jpg"><img loading="lazy" class="alignnone wp-image-46696" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_e07.jpg" alt="" width="624" height="236" /></a><br />こちらではTargetと名のつくオブジェクトに紐づいたTriggerコライダーに当たった時に処理を行うようにし、おうち型の当たり判定を用意しています。<br /><pre><code class="&#8221;language-cs&#8221;"><br />//矢(Perfab生成)のスクリプト</p>
<div>
<div>//入ってはいけないところに矢が入った時またはTargetに当てた時に矢が消滅する</div>
<div>public void OnTriggerEnter(Collider other){ //トリガーに入った時</div>
<div>  triggerTarget(other);</div>
<div>}</div>
<div>public void OnTriggerStay(Collider other){ //トリガーの中にいる時</div>
<div>  triggerTarget(other);</div>
<div>}</div>
<div>public void triggerTarget(Collider other){ //実際の処理</div>
<div>  if( hit ){ return; } //private変数 既に何かに当たってたら処理しない</div>
<div>  if (other != null){ //コライダーのnullチェック(念の為)</div>
<div>    string otherAsString = ((object)other).ToString();</div>
<div>    if (otherAsString.Contains(&#8220;VRCPlayer&#8221;)){ //他のプレイヤーに当たった時</div>
<div>      //何も演出しないことにした</div>
<div>    }else if(otherAsString.Contains(&#8220;Target&#8221;)){ //名前にTargetが含まれている</div>
<div>      //自分オブジェクトその場で停止する</div>
<div>      Rigidbody myRigidBody = this.gameObject.GetComponent&lt;Rigidbody&gt;(); //自分のRegidBody取得</div>
<div>      myRigidBody.useGravity = false; //重力オフ</div>
<div>      myRigidBody.isKinematic = true; //その場に固定</div>
<div>      MeshRenderer myRenderer = this.gameObject.GetComponent&lt;MeshRenderer&gt;(); //メッシュレンダラ取得</div>
<div>      myRenderer.enabled = false; //矢の見た目だけオフにする(すぐ消すと軌跡が残らないため)</div>
<div>      Destroy(this.gameObject, 3.0f); //3秒後に破棄</div>
<div>      //エフェクト</div>
<div>      GameObject effect = VRCInstantiate(destroyEffect); //エフェクトを生成</div>
<div>      effect.transform.position = this.gameObject.transform.position; //エフェクトの位置を矢と同じにする</div>
<div>      Destroy(effect, 5.0f); //5秒後に破棄</div>
<div>      hit = true; //ヒットフラグON(2回目は処理しない)</div>
<div>    }</div>
<div>  }</div>
<div>}</div>
</div>
<p><br /></code></pre><br /><h4 class="section_subtitle putit_caption">おまけ:弓以外のギミック</h4>他、置いてあるスイーツとドリンクを飲み食いできる機能もUdonSharpで組みました。こちらはアニメーターで出し入れなど見かけを作って、UdonSharp側は簡単なフラグ管理とPickUpから取り上げるのと位置リセットのみ行ってます。<br />こちらはスイーツ食べるやつのソース(全文)<br /><pre><code class="&#8221;language-cs&#8221;"><br /></p>
<div> </div>
<p>using UdonSharp;</p>
<p><br />using UnityEngine;</p>
<p><br />using VRC.SDKBase;</p>
<p><br />using VRC.Udon;</p>
<p>&nbsp;</p>
<p>public class EatSweets : UdonSharpBehaviour</p>
<p><br />{</p>
<p><br />private Vector3 respawnPosition; //リポップする時の位置</p>
<p><br />private Quaternion respawnRotation; //リポップする時の回転</p>
<p><br />private float deltaTime = 0.0f; //経過時間</p>
<p><br />private bool eated = false; //食べました</p>
<p><br />[SerializeField] private Animator myAnimator; //アニメーター</p>
<p><br />[SerializeField] private AudioSource eatSE; //食べる音</p>
<p>&nbsp;</p>
<p><br />void Start(){</p>
<p><br /> //初期位置を保管</p>
<p><br /> respawnPosition = this.gameObject.transform.position;</p>
<p><br /> respawnRotation = this.gameObject.transform.rotation;</p>
<p><br />}</p>
<p>&nbsp;</p>
<p><br />private void Update()</p>
<p><br />{</p>
<p><br /> deltaTime += Time.deltaTime; //経過時間を足す</p>
<p><br /> if( eated &amp;&amp; deltaTime &gt; 1.5f ){ //一定時間たっていれば位置を戻す</p>
<p><br />  this.gameObject.transform.position = respawnPosition;</p>
<p><br />  this.gameObject.transform.rotation = respawnRotation;</p>
<p><br />  eated = false; //食べフラグ初期化</p>
<p><br /> }</p>
<p><br />}</p>
<p>&nbsp;</p>
<p><br />public override void OnPickupUseDown() { //このオブジェクトを持って使った時</p>
<p><br /> SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, &#8220;Eat&#8221;); //ワールド内全員にイベント通知</p>
<p><br />}</p>
<p>&nbsp;</p>
<p><br />//ワールド内全員に処理してもらう</p>
<p><br />public void Eat(){</p>
<p><br /> if (eatSE) eatSE.PlayOneShot(eatSE.clip); //食べる音</p>
<p><br /> myAnimator.SetTrigger(&#8220;Eat&#8221;); //アニメーター発火(縮小していくやつ)</p>
<p><br /> deltaTime = 0; //経過時間を初期化</p>
<p><br /> eated = true; //たべたフラグ</p>
<p>&nbsp;</p>
<p><br /><br /> //ピックアップから強制的に手を離す</p>
<p><br /> VRC_Pickup pickup = (VRC_Pickup)this.gameObject.GetComponent(typeof(VRC_Pickup));</p>
<p><br /> pickup.Drop();</p>
<p><br /> }</p>
<p><br />}</p>
<p></code></pre><br /><h3 class="section_title putit_caption l_green">ギミックの同期問題</h3><br />上記のギミックは一人で動かすぶんには何の問題もなかったのですが、いざ他人をワールドに呼んでテストしてみると色々と不具合が出ることが判明しました…。<br />ネットワークを介した挙動となると途端に気を遣う部分がたくさん出てきて大変になります！<br /><h4 class="section_subtitle putit_caption">同期の基本</h4>Udonには便利な「VRC Object Sync」というコンポーネントが用意されています。基本的にはこのコンポーネントを付与しておけば位置や状態が他のプレイヤーと同期されるようになります！<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_d04.jpg"><img loading="lazy" class="alignnone size-full wp-image-46658" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_d04.jpg" alt="" width="624" height="267" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_d04.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_d04-300x128.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />逆に言うと、このコンポーネントを付与していない物体は何も同期しません。基本はローカル動作で、グローバル化したい物には全て「VRC Object Sync」を付けなければなりません。<br /><br /><h4 class="section_subtitle putit_caption">うまく同期されないケース</h4>これが最大のワナだったのですが、Instantiateで<span class="bold">動的に生成したオブジェクトはVRC Object Syncを付与していても同期されません！</span><br />つまり、同期を行いたいオブジェクトは最初からワールドに配置した状態にしなければならなかったのです。<br />これでは矢から星を生成しても位置が完全には合わなくなるし、後からワールドに入ってきた人には生成済みの星が見えなくなります。これでは会話が噛み合わず遊んでいるひとが困っちゃいます。<br />そこで、やむをえず星として夜空に固定するオブジェクトはあらかじめワールドの下に埋めて隠しておく方式に変更しました。泥臭くてあまり美しくないやり方ですが仕方なし。この都合により星は最大12発しか固定できません。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_d03.jpg"><img loading="lazy" class="alignnone size-full wp-image-46657" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_d03.jpg" alt="" width="624" height="357" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_d03.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_d03-300x172.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />矢のほうはその場で生成しているので無限に打てます。ワールドに入っている人全員に矢の発射イベントを投げれば弓の現在位置と角度に基づいてだいたい合ってる感じで射出されます！<br /><br /><h4 class="section_subtitle putit_caption">その他、同期挙動の細かいところ</h4>VRC Object Syncは[Udon synced]を付与すればUdon Behaviourスクリプト内の変数も同期してくれます。射った矢の番号はこの仕組みで同期しています。<br />オブジェクト位置の同期は静止中は常にしているわけではなく、移動時のみ再判定されるとのことなので、矢を射ったり弓を持ったりといった動作をするたびに全ての固定済みの星を誤差ミリ程度にズラすことで念入りに位置同期するようにしました。<br />また、プレイヤーのワールド離脱時に誰のものでもなくなった弓は同期が怪しくなるため、自動的にオーナーになったプレイヤー側で明示的に位置合わせを行うようにしました。<br /><pre><code class="&#8221;language-cs&#8221;"><br /></p>
<div>
<div>private float deltaTime = 0.0f; //経過時間</div>
<div>private bool syncedToPlayerLeft = false; //プレイヤーいなくなった後に同期するフラグ</div>
<div>private float toggleStarPosition = -0.0001f; //同期するときに微妙に星をずらす時に足す座標(毎回反転する)</div>
<div> </div>
<div>public override voidOnPlayerJoined(VRCPlayerApi player){</div>
<div>  //プレイヤーが入ってきた時、自分がオーナーなら全ての星を再確認する</div>
<div>  if (Networking.IsOwner(this.gameObject) ){</div>
<div>    RefreshStarsCheck(); //全ての星を確認</div>
<div>  }</div>
<div>}</div>
<div>//プレイヤーがどっかいった時</div>
<div>public override void OnPlayerLeft(VRCPlayerApi player){</div>
<div>  deltaTime = 0;</div>
<div>  syncedToPlayerLeft = true; //同期用フラグON</div>
<div>}</div>
<br />
<div>private void Update(){</div>
<div>  deltaTime += Time.deltaTime; //経過時間を足す</div>
<div>  //プレイヤー離脱後、一定時間したら同期を行う</div>
<div>  if( syncedToPlayerLeft &amp;&amp; deltaTime &gt; 5.0f ){</div>
<div>    syncedToPlayerLeft = false;</div>
<div>    if (Networking.IsOwner(Networking.LocalPlayer, this.gameObject)){ //オーナーになってたら</div>
<div>      getAllPartsOwner(); //全てを相続する</div>
<div>    }</div>
<div>  }</div>
<div>}</div>
<div>//この弓に関連するすべてのパーツのオーナーを得る</div>
<div>public void getAllPartsOwner(){</div>
<div>  Networking.SetOwner(Networking.LocalPlayer, myAnimator.gameObject); //弓の一番親のオーナーになる</div>
<div>  Networking.SetOwner(Networking.LocalPlayer, this.gameObject); //自分がこの弓のオーナーになる</div>
<div>  Networking.SetOwner(Networking.LocalPlayer, myArrow); //付属の矢もオーナーになる</div>
<div>  Networking.SetOwner(Networking.LocalPlayer, bowMesh); //弓本体ビジュアルもオーナーになる</div>
<div>  for( int index = 0; index &lt; myStarMaxLength; index++ ){ //全ての星に実行</div>
<div>    var star = myStars[index];</div>
<div>    if( star ){</div>
<div>      Networking.SetOwner(Networking.LocalPlayer, star); //うちの子です</div>
<div>    }</div>
<div>  }</div>
<div>  RefreshStars(); //全ての星を確認</div>
<div>}</div>
<div>//すべての星を確認する(オーナー専用)</div>
<div>publicvoidRefreshStars(){</div>
<div>  toggleStarPosition *= -1;</div>
<div>  for( int index = 0; index &lt; myStarMaxLength; index++ ){ //全ての星に実行</div>
<div>    var star = myStars[index];</div>
<div>    if( star ){</div>
<div>      star.transform.position += newVector3(0,0 + toggleStarPosition ,0);</div>
<div>    }</div>
<div>  }</div>
<div>}</div>
</div>
<p></code></pre><br /><h3 class="section_title putit_caption l_green">仕上げ(軽量化とベイク)</h3><br />ここからはやらなくてもワールドが動作する部分ですが、光源やオブジェクトを置きすぎて重くなっていたので力を入れて取り組みました。<br />快適なワールド作りのためにはある意味いちばん大事なところかも。<br /><br /><h4 class="section_subtitle putit_caption">オブジェクトのStatic化</h4>まず、オブジェクトには動くモノと動かないモノがあります。ワールド内に置いてある弓や飲み物や本などは掴んで移動することができるので当然「動くモノ」です。<br />しかし家や木や山はその場から絶対に移動しません。移動しないなら影の計算や物理演算を一部省略することができるため「このオブジェクトは絶対動かしませんよ」と、あらかじめ登録しておくことで処理を軽くできるわけです！<br /><br />Static(静的オブジェクト)の登録はインスペクターの右上のチェックを行うことでできます。動かないものはどんどんstatic化しましょう。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_d05.jpg"><img loading="lazy" class="alignnone size-full wp-image-46659" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_d05.jpg" alt="" width="624" height="253" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_d05.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_d05-300x122.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />諸々配置が終わったら、動く可能性のあるギミック系と、動かない建物と、建物の外のオブジェクトとで大まかにオブジェクトを親子関係にして分けました。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_g03.jpg"><img loading="lazy" class="alignnone size-full wp-image-46722" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_g03.jpg" alt="" width="624" height="269" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_g03.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_g03-300x129.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />こうすると一括でStatic化チェック管理ができて楽になります！<br /><br /><h4 class="section_subtitle putit_caption">インポート設定による容量圧縮</h4>ワールドに読み込むテクスチャや3Dモデルのインポート設定をいじると、見た目の影響を少なめに容量を削減できます。<br />まずはテクスチャ。最大サイズを下げることで画像を軽量化できます。ちょっとした手のひらサイズの小物程度であれば256や128でも見た目の影響はそんなに無かったりします。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_h06.jpg"><img loading="lazy" class="alignnone size-full wp-image-46738" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_h06.jpg" alt="" width="624" height="445" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_h06.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_h06-300x214.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />逆に、壁や床など面積が大きいものは解像度を低くするとぼんやりとしますので、512や1024などを選んでおいたほうが無難です。<br /><br />次に3Dモデル。メッシュ圧縮を設定すると容量を削減できます。見た目が大体あってればOK程度のオブジェクトはどんどん圧縮しましょう。中程度なら影響も少ないようです。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_h07.jpg"><img loading="lazy" class="alignnone size-full wp-image-46739" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_h07.jpg" alt="" width="624" height="416" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_h07.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_h07-300x200.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />また、後述のライトベイク対象として使う3Dモデルの場合は「ライトマップUV生成」をONに設定しておきましょう。この設定をしないとライトベイクが正しくできません。<br /><br /><h4 class="section_subtitle putit_caption">ライトベイク</h4>軽量化のための最重要作業。それがライトベイクです！ これは必ずおさえておきたい。<br />ライトベイクが何かというと、ひとことで言うと<span class="bold">光の当たり具合をテクスチャに焼き付ける</span>ことです。<br />光源がオブジェクトに当たって影を落とす計算は負荷が大きく、リアルタイムで行うと処理落ちします。光源をたくさん置いたり、影の計算対象のオブジェクトが増えれば増えるほど顕著になります。それを解決するのがライトベイク！<br />まず、こちらがライトベイク済みの室内です。特に違和感ないと思います。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_f01.jpg"><img loading="lazy" class="alignnone size-full wp-image-46705" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_f01.jpg" alt="" width="624" height="304" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_f01.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_f01-300x146.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />しかし、家具をどかしてみると…。床に家具の影がお化けみたいに焼き付いています。こわいね。影の計算はその場ではしていなくて、あらかじめ床に影の模様が描かれているのです。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_f02.jpg"><img loading="lazy" class="alignnone size-full wp-image-46706" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_f02.jpg" alt="" width="624" height="304" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_f02.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_f02-300x146.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />オブジェクトをStatic化して「絶対にその場所から動かない」とわかっているなら影が動くことはないのですから、リアルタイム計算する必要がなくなるためです。実はこれ、コンシューマゲームなどでもよく使われている手法だったりします。<br /><br />ライトベイクは、画面上にあるウィンドウ→レンダリング→ライティング設定 から行うことができます。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_f04.jpg"><img loading="lazy" class="alignnone size-full wp-image-46708" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_f04.jpg" alt="" width="624" height="366" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_f04.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_f04-300x176.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />設定は詳しく解説しているサイトさんを参考にしてください。解像度は高いほど綺麗になりますが、ワールド読み込み時のサイズが重くなります。一度ダウンロードしてワールドに入ってしまえば軽いのですが、ライトベイクするということはテクスチャが増えるので必然的にサイズが増えます。<br />あまりサイズを肥大化させたくない場合はベイクを行う対象を絞りましょう。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_f06.jpg"><img loading="lazy" class="alignnone size-full wp-image-46711" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_f06.jpg" alt="" width="624" height="315" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_f06.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_f06-300x151.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />ライトベイクしたくないオブジェクトのMeshRendererのグローバルイルミネーションをOFFにすればベイク対象から外せます。<br /><br />いろいろ準備できたら「ライティングの生成」を押せばライトベイクが開始されます。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_f05.jpg"><img loading="lazy" class="alignnone size-full wp-image-46709" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_f05.jpg" alt="" width="624" height="326" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_f05.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_f05-300x157.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />CPUスペックにもよりますが、けっこう重い計算なので場合によっては数十分から数時間待たされることもあります。PCを長時間放置できるタイミングで行うようにしましょう。つよつよGPUがあるなら別ですが！<br /><br />他にもライトベイクに関連して「ライトプローブ」も配置しました。こちらはベイク済みのライトの影響を動的なオブジェクトに受けさせたい場合に役立つ仕組みです。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_f03.jpg"><img loading="lazy" class="alignnone size-full wp-image-46707" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_f03.jpg" alt="" width="624" height="315" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_f03.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_f03-300x151.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />ただ、ひとつひとつ配置するのが面倒だったので「Magic Light Probes」というアセット(有料)を使って自動配置しちゃいました。作業にかかる時間を考えたら買ったほうが早いかなって…。金で解決。<br /><br /><h4 class="section_subtitle putit_caption">メッシュベイク</h4>ライトベイクだけでも十分軽くなりますが、さらに軽さを追求したいのであればメッシュベイクでしょう。<br />これは同じような見た目のモノが複数置いてある時や、細々したオブジェクトがたくさん置いてある時に有効です。<br />下の画像のように雑多にモノが配置されている場合、ひとつひとつのオブジェクトに座標や回転などが設定され、別々に描画処理が走るのでモノを置くほど負荷が増えるのですが…。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_g04.jpg"><img loading="lazy" class="alignnone size-full wp-image-46728" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_g04.jpg" alt="" width="624" height="254" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_g04.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_g04-300x122.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br /><br />メッシュベイクすれば「小物がたくさん集まっている見た目の、一つのオブジェクト」として扱われるので、見た目に反して負荷がかからなくなります！<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_g05.jpg"><img loading="lazy" class="alignnone size-full wp-image-46729" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_g05.jpg" alt="" width="624" height="257" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_g05.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_g05-300x124.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />見かけ上はモノがいっぱい置いてあるように見えますが、全にして一なのです。ただし、その場から動かさないstatic化が条件。<br /><br />これはBlenderなどをうまく使えば人力でできなくもないのですが、基本はツールを使うことをオススメします。<br />わたしは「Mesh Combine Studio」というアセット(有料)を使ってボタン一つで結合/解除できるようにしちゃいました。作業にかかる時間を考えたら買ったほうが早いかなって…。金で解決。<br />このアセットはとても使いやすくてオススメです！ まとめたいGameObjectの親を放り込んでボタンを押せば全部やってくれます。建物の1階部分はこのアセットでくっつけてあります。ちゃんと結合後の見た目でライトベイクも考慮してくれます。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_g06.jpg"><img loading="lazy" class="alignnone size-full wp-image-46730" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_g06.jpg" alt="" width="624" height="252" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_g06.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_g06-300x121.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />マテリアルの結合はできないため、床や壁など同じマテリアルを使った構造物をまとめるのに適しています。<br /><br />無料の「Mesh Baker」というアセットも良いです！ こちらも併用しました。<br />こちらは一度ベイクしたものを元に戻す手順が若干面倒ですが、ぜんぶばっちり配置した後に最終的にベイクするのであれば問題なさそうです。<br /><br /><h4 class="section_subtitle putit_caption">オクルージョンカリング</h4>これも地味に重要。<br />ひとことで言うと「見えない場所は描画しない」という設定です。<br />ユーザーの視界に入っていない部分も常に描画していると負荷になりますから、描画を行わないようにします。これもあらかじめStatic設定しているオブジェクトが影響を受けます。明示的にONにする必要があるので忘れずに設定しましょう。<br />ウィンドウ→レンダリング→オクルージョンカリングから設定画面を開きます。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_f07.jpg"><img loading="lazy" class="alignnone size-full wp-image-46723" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_f07.jpg" alt="" width="624" height="410" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_f07.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_f07-300x197.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />ライトベイクと同じように「ベイク」を押す事でいまstatic化されているオブジェクトの位置を元にオクルージョンカリングの設定が行われます。static化オブジェクトが増減したら再度ベイクしましょう。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_f08.jpg"><img loading="lazy" class="alignnone size-full wp-image-46724" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_f08.jpg" alt="" width="624" height="406" srcset="https://yugalab.net/wp-content/uploads/2022/09/20220915_f08.jpg 624w, https://yugalab.net/wp-content/uploads/2022/09/20220915_f08-300x195.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></a><br />「遮蔽物の最小値」は、この値より小さいサイズのものは非表示処理に含まれなくなります。<br />「最小の穴」は、カメラから見る事ができるワールド内の小さな隙間より小さく設定してください。うまく設定されていないと、モノとモノの隙間から景色を覗いた時などに視界内にあるのにオブジェクトが消えることがあります。<br /><br />設定が完了すると、カメラの視界から外れて見えない位置にあるモノがスッと消えるようになります。こわいね。<br /><a href="https://yugalab.net/wp-content/uploads/2022/09/20220915_f09.gif"><img loading="lazy" class="alignnone wp-image-46725" src="https://yugalab.net/wp-content/uploads/2022/09/20220915_f09.gif" alt="" width="624" height="406" /></a><br />現実も実は人間が観測していない場所は暗闇なのかもしれないですね。<br /><br />以上です！<br />VRChatは無料だしPCだけでもできますが、VR機器があるともっと楽しいです。MetaQuestなど購入した方は是非一度はやってみて！</p><p>The post <a href="https://yugalab.net/archives/46481">【VRChat】自作ワールド作りました！ いろいろメモ(作業手順、UdonSharp、軽量化など)</a> first appeared on <a href="https://yugalab.net">ユガラボ</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://yugalab.net/archives/46481/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
