tag:blogger.com,1999:blog-82232870268472538552024-02-20T03:54:39.702+09:00UnityでRTSゲームができるまで・・UnityでRTSゲームができるあがるまで・・・本当にできるのか?Unknownnoreply@blogger.comBlogger7125tag:blogger.com,1999:blog-8223287026847253855.post-66670065446051816802021-08-05T19:11:00.005+09:002021-08-05T19:11:51.161+09:00#8 建物を設置、作成してみる<p> こんにちは!ぴちおです。</p><p><br /></p><p>RTSといえば、</p><p>施設の建設は必須。</p><p><br /></p><p>メニューで建物選択状態にする</p><p>マウス上に建物オブジェクトを追従させる</p><p>親オブジェクトの近くのみ設置可能にする。</p><p>他のオブジェクトがある場合は設置不可にする。</p><p>クリックした場所にオブジェクトを表示。</p><p><br /></p><p>実装したい内容は上記の通り</p><p><br /></p><p>まずは</p><p>床と親オブジェクト、子オブジェクトとゲームマネージャーを設置</p><p>plane</p><p>名前:Ground</p><p>scale:x5,y1,z5</p><p>shpere</p><p>名前:HomeBase</p><p>scale:x2,y2,z2</p><p><br /></p><p>cylinder</p><p>名前:Institution</p><p>Prefabフォルダを作成し、そこにドラッグでPrefab化する。</p><p>スクリーン上のは削除</p><p>new script「InstitutionController」をアタッチ</p><p><br /></p><p>Empty Object</p><p>new script「GameController」をアタッチ</p><p><br /></p><p>raycastで設置位置を確定するので</p><p>余計なのにrayが当たらないようにちょっと設定を加える</p><p><br /></p><p>Groundはrayを必ず当てたいので</p><p>layerを1つ追加、「Ground」</p><p>でそれをセット</p><p><br /></p><p>今回のテストではHomeBaseはray当てたくないので</p><p>Ignore RayCastにlayerを設定</p><p>Institutionは</p><p>まずはrayを当てたくないので</p><p>Ignore RayCastにlayerを設定</p><p>また、後でクリックしたときに区別したいので</p><p>tagにBuildingを追加して、それをセット</p><p><br /></p><p>続いて、スクリプト</p><p>InstitutionController</p><p>これは今回のテストでは、設置したものがそれぞれ、どんなステータスかと区別するだけなので、</p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">System</span>.<span style="color: #4ec9b0;">Collections</span>;</div><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">System</span>.<span style="color: #4ec9b0;">Collections</span>.<span style="color: #4ec9b0;">Generic</span>;</div><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">UnityEngine</span>;</div><br /><br /><div><span style="color: #569cd6;">public</span> <span style="color: #569cd6;">class</span> <span style="color: #4ec9b0;">InstitutionController</span> : <span style="color: #4ec9b0;">MonoBehaviour</span></div><div>{</div><div> <span style="color: #569cd6;">public</span> <span style="color: #569cd6;">string</span> <span style="color: #9cdcfe;">_Name</span>;</div><br /><div>}</div></div><p>これだけ</p><p><br /></p><p>GameControllerは</p><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">System</span>.<span style="color: #4ec9b0;">Collections</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">System</span>.<span style="color: #4ec9b0;">Collections</span>.<span style="color: #4ec9b0;">Generic</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">UnityEngine</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #569cd6;">public</span> <span style="color: #569cd6;">class</span> <span style="color: #4ec9b0;">GameController</span> : <span style="color: #4ec9b0;">MonoBehaviour</span></div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">{</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">bool</span> <span style="color: #9cdcfe;">bMoodFlag</span> = <span style="color: #569cd6;">false</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #569cd6;">public</span> <span style="color: #4ec9b0;">GameObject</span> <span style="color: #9cdcfe;">institutionObject</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #4ec9b0;">Vector3</span> <span style="color: #9cdcfe;">mouse</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #4ec9b0;">Vector3</span> <span style="color: #9cdcfe;">mouse3d</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #569cd6;">public</span> <span style="color: #4ec9b0;">GameObject</span> <span style="color: #9cdcfe;">insobj</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #4ec9b0;">InstitutionController</span> <span style="color: #9cdcfe;">iScript</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">Update</span>()</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> {</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">bMoodFlag</span>)</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> {</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;">//建物設置モード</span></div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> }</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">else</span></div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> {</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">mouse</span> = <span style="color: #9cdcfe;">Input</span>.<span style="color: #9cdcfe;">mousePosition</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">mouse</span>.<span style="color: #9cdcfe;">z</span> = <span style="color: #b5cea8;">10f</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">mouse3d</span> = <span style="color: #9cdcfe;">Camera</span>.<span style="color: #9cdcfe;">main</span>.<span style="color: #dcdcaa;">ScreenToWorldPoint</span>(<span style="color: #9cdcfe;">mouse</span>);</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">mouse3d</span>.<span style="color: #9cdcfe;">y</span> = <span style="color: #b5cea8;">1f</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> </div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">Input</span>.<span style="color: #dcdcaa;">GetKeyUp</span> (<span style="color: #9cdcfe;">KeyCode</span>.<span style="color: #9cdcfe;">H</span>))</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> {</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">bMoodFlag</span>=<span style="color: #569cd6;">true</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">insobj</span> = <span style="color: #dcdcaa;">Instantiate</span>(<span style="color: #9cdcfe;">institutionObject</span>,<span style="color: #9cdcfe;">mouse3d</span>,<span style="color: #9cdcfe;">Quaternion</span>.<span style="color: #9cdcfe;">identity</span>);</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">iScript</span> = <span style="color: #9cdcfe;">insobj</span>.<span style="color: #dcdcaa;">GetComponent</span><<span style="color: #4ec9b0;">InstitutionController</span>>();</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">iScript</span>.<span style="color: #9cdcfe;">_Name</span> = <span style="color: #ce9178;">"House"</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> }</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">Input</span>.<span style="color: #dcdcaa;">GetKeyUp</span> (<span style="color: #9cdcfe;">KeyCode</span>.<span style="color: #9cdcfe;">B</span>))</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> {</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">bMoodFlag</span>=<span style="color: #569cd6;">true</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">insobj</span> = <span style="color: #dcdcaa;">Instantiate</span>(<span style="color: #9cdcfe;">institutionObject</span>,<span style="color: #9cdcfe;">mouse3d</span>,<span style="color: #9cdcfe;">Quaternion</span>.<span style="color: #9cdcfe;">identity</span>);</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">iScript</span> = <span style="color: #9cdcfe;">insobj</span>.<span style="color: #dcdcaa;">GetComponent</span><<span style="color: #4ec9b0;">InstitutionController</span>>();</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">iScript</span>.<span style="color: #9cdcfe;">_Name</span> = <span style="color: #ce9178;">"Barracks"</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> }</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> }</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> }</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">}</div><p>まずは、建築モードに入るところ、</p><p>建築モードフラグBmodeFlagのT/Fでアクションを変更する。</p><p>建築モードフラグFalse時に</p><p>キーHもしくはキーBを押すと</p><p>Prefabからinstitutionを生成する</p><p>また、そのinstitutionのスクリプトの_Nameにそれぞれのパラメータをセットする。</p><p>で、建築モードフラグをTrueにする</p><p><br /></p><p>続いて、建築モードキャンセルアクション</p><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">Update</span>()</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> {</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">bMoodFlag</span>)</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> {</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;">//キャンセル</span></div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">Input</span>.<span style="color: #dcdcaa;">GetKeyUp</span> (<span style="color: #9cdcfe;">KeyCode</span>.<span style="color: #9cdcfe;">Escape</span>))</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> {</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">bMoodFlag</span>=<span style="color: #569cd6;">false</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">insobj</span>.<span style="color: #dcdcaa;">SetActive</span> (<span style="color: #569cd6;">false</span>);</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> }</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> }</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">else</span></div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> {</div><div><br /></div><p>建築モードTrue中にEscキーを押すとキャンセルになる。</p><p>キャンセルとは建築モードフラグをFalseにして、Prefabから作成したオブジェクトを非表示にする</p><p>※テストなので作り込まないが、Prefabから作成するとき、この非表示のオブジェクトが存在すれば、新規つくらず、そのオブジェクトを表示するようにする。</p><p><br /></p><p>ここからが苦戦したところ、</p><p>1つ目がHome Baseから一定の距離にしかinstitutionを追従しないようにする</p><p>一定の距離離れた場合、ギリギリの距離で追いかける</p><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">bMoodFlag</span>)</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> {</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;">//建物設置モード</span></div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;">//マウス移動</span></div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #4ec9b0;">Vector2</span> <span style="color: #9cdcfe;">touchScreenPosition</span> = <span style="color: #9cdcfe;">Input</span>.<span style="color: #9cdcfe;">mousePosition</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">touchPointToRay</span> = <span style="color: #9cdcfe;">gameCamera</span>.<span style="color: #dcdcaa;">ScreenPointToRay</span>( <span style="color: #9cdcfe;">touchScreenPosition</span> );</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">touchScreenPosition</span>.<span style="color: #9cdcfe;">x</span> = <span style="color: #9cdcfe;">Mathf</span>.<span style="color: #dcdcaa;">Clamp</span>( <span style="color: #9cdcfe;">touchScreenPosition</span>.<span style="color: #9cdcfe;">x</span>, <span style="color: #b5cea8;">0.0f</span>, <span style="color: #9cdcfe;">Screen</span>.<span style="color: #9cdcfe;">width</span> );</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">touchScreenPosition</span>.<span style="color: #9cdcfe;">y</span> = <span style="color: #9cdcfe;">Mathf</span>.<span style="color: #dcdcaa;">Clamp</span>( <span style="color: #9cdcfe;">touchScreenPosition</span>.<span style="color: #9cdcfe;">y</span>, <span style="color: #b5cea8;">0.0f</span>, <span style="color: #9cdcfe;">Screen</span>.<span style="color: #9cdcfe;">height</span> );</div><p><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> </span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #4ec9b0; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">Vector3</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> </span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #9cdcfe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">pos</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> = </span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #9cdcfe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">PreObject</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">.</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #9cdcfe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">transform</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">.</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #9cdcfe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">position</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">;</span></p><p><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> </span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #4ec9b0; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">RaycastHit</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> </span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #9cdcfe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">hitInfo</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> = </span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #569cd6; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">new</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> </span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #4ec9b0; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">RaycastHit</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">();</span></p><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">if</span>( <span style="color: #9cdcfe;">Physics</span>.<span style="color: #dcdcaa;">Raycast</span>( <span style="color: #9cdcfe;">touchPointToRay</span>, <span style="color: #569cd6;">out</span> <span style="color: #9cdcfe;">hitInfo</span> ,<span style="color: #9cdcfe;">Mathf</span>.<span style="color: #9cdcfe;">Infinity</span>,<span style="color: #9cdcfe;">LayerMask</span>) )</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> {</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">pos</span> = <span style="color: #9cdcfe;">hitInfo</span>.<span style="color: #9cdcfe;">point</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">insobj</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span> = <span style="color: #9cdcfe;">pos</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> } </div><p>まずは、距離関係なく、また、HomeBaseに被りながらもおいかけるようにする。</p><p>仕組みとしては</p><p>カメラからrayを飛ばしてGround上の座標を取得</p><p>あ、LayerMaskはPublicにして、インスペクターからGroundを設定しておきます。</p><p><br /></p><p>そうすると、他のオブジェクトに当たらず床のカメラからみてクリックした座標がGetできます。</p><p>それで、institutionの位置を絶えず移動させれた追従します。</p><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">if</span>( <span style="color: #9cdcfe;">Physics</span>.<span style="color: #dcdcaa;">Raycast</span>( <span style="color: #9cdcfe;">touchPointToRay</span>, <span style="color: #569cd6;">out</span> <span style="color: #9cdcfe;">hitInfo</span> ,<span style="color: #9cdcfe;">Mathf</span>.<span style="color: #9cdcfe;">Infinity</span>,<span style="color: #9cdcfe;">LayerMask</span>) )</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> {</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">Vector3</span>.<span style="color: #dcdcaa;">Distance</span>(<span style="color: #9cdcfe;">PreObject</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>,<span style="color: #9cdcfe;">hitInfo</span>.<span style="color: #9cdcfe;">point</span>)<<span style="color: #9cdcfe;">InstallableDistance</span> && <span style="color: #9cdcfe;">Vector3</span>.<span style="color: #dcdcaa;">Distance</span>(<span style="color: #9cdcfe;">PreObject</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>,<span style="color: #9cdcfe;">hitInfo</span>.<span style="color: #9cdcfe;">point</span>)><span style="color: #b5cea8;">1.2</span>)</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> {</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">pos</span> = <span style="color: #9cdcfe;">hitInfo</span>.<span style="color: #9cdcfe;">point</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> }</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">else</span></div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> { </div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #4ec9b0;">Vector3</span> <span style="color: #9cdcfe;">dt</span> = <span style="color: #9cdcfe;">hitInfo</span>.<span style="color: #9cdcfe;">point</span> - <span style="color: #9cdcfe;">PreObject</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">radians</span> = <span style="color: #9cdcfe;">Mathf</span>.<span style="color: #dcdcaa;">Atan2</span>(<span style="color: #9cdcfe;">dt</span>.<span style="color: #9cdcfe;">z</span>,-<span style="color: #9cdcfe;">dt</span>.<span style="color: #9cdcfe;">x</span>);</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">angle</span> = <span style="color: #9cdcfe;">radians</span> * <span style="color: #9cdcfe;">Mathf</span>.<span style="color: #9cdcfe;">Rad2Deg</span>-<span style="color: #b5cea8;">90</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">radian</span> = <span style="color: #9cdcfe;">angle</span> * <span style="color: #9cdcfe;">Mathf</span>.<span style="color: #9cdcfe;">Deg2Rad</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">Vector3</span>.<span style="color: #dcdcaa;">Distance</span>(<span style="color: #9cdcfe;">PreObject</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>,<span style="color: #9cdcfe;">hitInfo</span>.<span style="color: #9cdcfe;">point</span>)>=<span style="color: #9cdcfe;">InstallableDistance</span>)</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> {</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">pos</span>.<span style="color: #9cdcfe;">z</span> = <span style="color: #9cdcfe;">Mathf</span>.<span style="color: #dcdcaa;">Cos</span>(<span style="color: #9cdcfe;">radian</span>) * <span style="color: #9cdcfe;">InstallableDistance</span> + <span style="color: #9cdcfe;">PreObject</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>.<span style="color: #9cdcfe;">z</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">pos</span>.<span style="color: #9cdcfe;">x</span> = <span style="color: #9cdcfe;">Mathf</span>.<span style="color: #dcdcaa;">Sin</span>(<span style="color: #9cdcfe;">radian</span>) * <span style="color: #9cdcfe;">InstallableDistance</span> + <span style="color: #9cdcfe;">PreObject</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>.<span style="color: #9cdcfe;">x</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> }</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">else</span> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">Vector3</span>.<span style="color: #dcdcaa;">Distance</span>(<span style="color: #9cdcfe;">PreObject</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>,<span style="color: #9cdcfe;">hitInfo</span>.<span style="color: #9cdcfe;">point</span>)<=<span style="color: #b5cea8;">1.2</span>)</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> {</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">pos</span>.<span style="color: #9cdcfe;">z</span> = <span style="color: #9cdcfe;">Mathf</span>.<span style="color: #dcdcaa;">Cos</span>(<span style="color: #9cdcfe;">radian</span>) * <span style="color: #b5cea8;">1.4f</span> + <span style="color: #9cdcfe;">PreObject</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>.<span style="color: #9cdcfe;">z</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">pos</span>.<span style="color: #9cdcfe;">x</span> = <span style="color: #9cdcfe;">Mathf</span>.<span style="color: #dcdcaa;">Sin</span>(<span style="color: #9cdcfe;">radian</span>) * <span style="color: #b5cea8;">1.4f</span> + <span style="color: #9cdcfe;">PreObject</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>.<span style="color: #9cdcfe;">x</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> }</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> }</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">insobj</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span> = <span style="color: #9cdcfe;">pos</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> } </div><p>続いて、一定距離以上離れない、HomeBaseには乗らないようにします。</p><p>マウスの位置とHomeBaseの距離を計測します。</p><p><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #c586c0; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">if</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> (</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #9cdcfe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">Vector3</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">.</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #dcdcaa; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">Distance</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">(</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #9cdcfe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">PreObject</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">.</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #9cdcfe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">transform</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">.</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #9cdcfe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">position</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">,</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #9cdcfe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">hitInfo</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">.</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #9cdcfe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">point</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">)<</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #9cdcfe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">InstallableDistance</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> && </span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #9cdcfe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">Vector3</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">.</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #dcdcaa; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">Distance</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">(</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #9cdcfe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">PreObject</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">.</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #9cdcfe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">transform</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">.</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #9cdcfe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">position</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">,</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #9cdcfe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">hitInfo</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">.</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #9cdcfe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">point</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">)></span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #b5cea8; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">1.2</span><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">)</span></p><p><span style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #9cdcfe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">InstallableDistance</span>これが設置可能距離</p><p>HomeBaseの距離は1.2直打ちです。ほんとはオブジェクトの半径とかやるんだろうけどTestなので・・</p><p>この条件にある場合だけ、移動にすれば、一定範囲のみ移動します。</p><p>ただ、その条件に外れた場合、そこでオブジェクトが止まってしまうので範囲内ギリギリで移動するようにします。</p><p>仕組みは</p><p>HomeBaseとマウスの座標を元に角度を取得</p><p>あとは、SinとかCosとか使って座標を求めます。</p><p>私は学がないので、ここら辺よくわかりません。</p><p><br /></p><p><br /></p><p>最後に</p><p>クリックした場所に何もなければ</p><p>施設を設置する。</p><p><br /></p><p>何もないかどうかの判定は</p><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;">//クリック時</span></div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">Input</span>.<span style="color: #dcdcaa;">GetMouseButtonUp</span>(<span style="color: #b5cea8;">0</span>))</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> {</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;">//他の建物がないか確認</span></div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #4ec9b0;">RaycastHit</span> <span style="color: #9cdcfe;">hit</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;">// SphereCastのレイを飛ばしターゲットと接触しているか判定</span></div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">Physics</span>.<span style="color: #dcdcaa;">SphereCast</span>(<span style="color: #9cdcfe;">touchPointToRay</span>, <span style="color: #b5cea8;">0.5f</span>, <span style="color: #569cd6;">out</span> <span style="color: #9cdcfe;">hit</span>, <span style="color: #b5cea8;">100f</span>)) { </div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">hit</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">name</span> == <span style="color: #ce9178;">"Ground"</span>)</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> {</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">insobj</span>.<span style="color: #9cdcfe;">layer</span> = <span style="color: #b5cea8;">0</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">bMoodFlag</span>=<span style="color: #569cd6;">false</span>;</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> }</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">else</span>{<span style="color: #9cdcfe;">Debug</span>.<span style="color: #dcdcaa;">Log</span>(<span style="color: #ce9178;">"設置できません"</span>);}</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> }</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">else</span>{<span style="color: #9cdcfe;">bMoodFlag</span>=<span style="color: #569cd6;">false</span>;}</div><div style="background-color: #1e1e1e; caret-color: rgb(212, 212, 212); color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> }</div><p>マウスクリックしたときに</p><p>またrayを飛ばします。</p><p>今度はsphercastという点ではなく、球体のrayを飛ばす感じです。</p><p>カメラからマウスの位置に半径0.5fの球体を飛ばしてヒットするか確認します。</p><p>ヒットした場合は、設置できない</p><p>他のものにぶつからずGroundがヒットした場合は設置可能として</p><p>オブジェクトを設置します。</p><p>設置する際に、そのオブジェクトが次に、この置けるか判定の時にちゃんとrayにぶつかるようにlayerをデフォルト(0)に変更</p><p>建設モードをfalseにセットで完了です。</p><p><br /></p><p>と、思ったら、</p><p>これだとマウスが設置可能範囲内の場合はいいのですが、</p><p>上で考慮した、設置可能範囲外の場合、ガスガス設置できてしまう。</p><p>ので、ちょっと修正</p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div> <span style="color: #4ec9b0;">Vector3</span> <span style="color: #9cdcfe;">ispos</span> = <span style="color: #9cdcfe;">insobj</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>;</div><div> <span style="color: #9cdcfe;">ispos</span>.<span style="color: #9cdcfe;">y</span> += <span style="color: #b5cea8;">10f</span>;</div><div> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">Physics</span>.<span style="color: #dcdcaa;">SphereCast</span>(<span style="color: #9cdcfe;">ispos</span>,<span style="color: #b5cea8;">0.5f</span>,<span style="color: #9cdcfe;">Vector3</span>.<span style="color: #9cdcfe;">down</span>,<span style="color: #569cd6;">out</span> <span style="color: #9cdcfe;">hit</span>,<span style="color: #b5cea8;">100f</span>)){</div></div><p>上で考慮した範囲外、オブジェクトが表示されている場所からレイを落としてみる</p><p>一応、10fほど高いところから真下にレイ発射に変更。</p><p><br /></p><p>本当はRTSであれば</p><p>いきなり設置ではなく、建設中の状態にして、</p><p>その待ち時間完了後、設置完了なんでしょうけど、</p><p>それは別の記事で、待ち時間を検討してみます。</p><p><br /></p><p><br /></p><p>上で省略した変数も含めて全部はこうなりました。</p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">System</span>.<span style="color: #4ec9b0;">Collections</span>;</div><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">System</span>.<span style="color: #4ec9b0;">Collections</span>.<span style="color: #4ec9b0;">Generic</span>;</div><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">UnityEngine</span>;</div><br /><div><span style="color: #569cd6;">public</span> <span style="color: #569cd6;">class</span> <span style="color: #4ec9b0;">GameController</span> : <span style="color: #4ec9b0;">MonoBehaviour</span></div><div>{</div><div> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">clickTime</span> = <span style="color: #b5cea8;">0</span>;</div><div> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">bool</span> <span style="color: #9cdcfe;">clickFlg</span> = <span style="color: #569cd6;">false</span>;</div><div> <span style="color: #569cd6;">private</span> <span style="color: #4ec9b0;">GameObject</span> <span style="color: #9cdcfe;">mainCamera</span>; </div><div> <span style="color: #569cd6;">private</span> <span style="color: #4ec9b0;">Vector3</span> <span style="color: #9cdcfe;">dragStartPosision</span>;</div><div> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">mouseDownTime</span> = <span style="color: #b5cea8;">0</span>;</div><div> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">bool</span> <span style="color: #9cdcfe;">bMoodFlag</span> = <span style="color: #569cd6;">false</span>;</div><div> <span style="color: #569cd6;">public</span> <span style="color: #4ec9b0;">GameObject</span> <span style="color: #9cdcfe;">institutionObject</span>;</div><div> <span style="color: #4ec9b0;">Vector3</span> <span style="color: #9cdcfe;">mouse</span>;</div><div> <span style="color: #4ec9b0;">Vector3</span> <span style="color: #9cdcfe;">mouse3d</span>;</div><div> <span style="color: #569cd6;">public</span> <span style="color: #4ec9b0;">GameObject</span> <span style="color: #9cdcfe;">insobj</span>;</div><div> <span style="color: #569cd6;">public</span> <span style="color: #4ec9b0;">GameObject</span> <span style="color: #9cdcfe;">PreObject</span>;</div><div> <span style="color: #569cd6;">public</span> <span style="color: #4ec9b0;">LayerMask</span> <span style="color: #9cdcfe;">LayerMask</span>;</div><div> <span style="color: #569cd6;">public</span> <span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">InstallableDistance</span>=<span style="color: #b5cea8;">2</span>;</div><div> <span style="color: #569cd6;">private</span> <span style="color: #4ec9b0;">Camera</span> <span style="color: #9cdcfe;">gameCamera</span>;</div><div> <span style="color: #569cd6;">private</span> <span style="color: #4ec9b0;">Ray</span> <span style="color: #9cdcfe;">touchPointToRay</span>;</div><div> <span style="color: #4ec9b0;">InstitutionController</span> <span style="color: #9cdcfe;">iScript</span>;</div><div> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">Start</span>()</div><div> {</div><div> <span style="color: #9cdcfe;">gameCamera</span> = <span style="color: #9cdcfe;">Camera</span>.<span style="color: #9cdcfe;">main</span>;</div> <span style="color: #9cdcfe;">mainCamera</span> = <span style="caret-color: rgb(156, 220, 254); color: #9cdcfe;">gameCamera</span>.<span style="color: #9cdcfe;">gameObject</span>;<div> }</div><div> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">Update</span>()</div><div> {</div><div> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">bMoodFlag</span>)</div><div> {</div><div> <span style="color: #6a9955;">//建物設置モード</span></div><div> <span style="color: #6a9955;">//マウス移動</span></div><div> <span style="color: #4ec9b0;">Vector2</span> <span style="color: #9cdcfe;">touchScreenPosition</span> = <span style="color: #9cdcfe;">Input</span>.<span style="color: #9cdcfe;">mousePosition</span>;</div><div> <span style="color: #9cdcfe;">touchPointToRay</span> = <span style="color: #9cdcfe;">gameCamera</span>.<span style="color: #dcdcaa;">ScreenPointToRay</span>( <span style="color: #9cdcfe;">touchScreenPosition</span> );</div><div> <span style="color: #9cdcfe;">touchScreenPosition</span>.<span style="color: #9cdcfe;">x</span> = <span style="color: #9cdcfe;">Mathf</span>.<span style="color: #dcdcaa;">Clamp</span>( <span style="color: #9cdcfe;">touchScreenPosition</span>.<span style="color: #9cdcfe;">x</span>, <span style="color: #b5cea8;">0.0f</span>, <span style="color: #9cdcfe;">Screen</span>.<span style="color: #9cdcfe;">width</span> );</div><div> <span style="color: #9cdcfe;">touchScreenPosition</span>.<span style="color: #9cdcfe;">y</span> = <span style="color: #9cdcfe;">Mathf</span>.<span style="color: #dcdcaa;">Clamp</span>( <span style="color: #9cdcfe;">touchScreenPosition</span>.<span style="color: #9cdcfe;">y</span>, <span style="color: #b5cea8;">0.0f</span>, <span style="color: #9cdcfe;">Screen</span>.<span style="color: #9cdcfe;">height</span> );</div><br /><div> <span style="color: #4ec9b0;">Vector3</span> <span style="color: #9cdcfe;">pos</span> = <span style="color: #9cdcfe;">PreObject</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>;</div><div> <span style="color: #4ec9b0;">RaycastHit</span> <span style="color: #9cdcfe;">hitInfo</span> = <span style="color: #569cd6;">new</span> <span style="color: #4ec9b0;">RaycastHit</span>();</div><div> <span style="color: #c586c0;">if</span>( <span style="color: #9cdcfe;">Physics</span>.<span style="color: #dcdcaa;">Raycast</span>( <span style="color: #9cdcfe;">touchPointToRay</span>, <span style="color: #569cd6;">out</span> <span style="color: #9cdcfe;">hitInfo</span> ,<span style="color: #9cdcfe;">Mathf</span>.<span style="color: #9cdcfe;">Infinity</span>,<span style="color: #9cdcfe;">LayerMask</span>) )</div><div> {</div><div> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">Vector3</span>.<span style="color: #dcdcaa;">Distance</span>(<span style="color: #9cdcfe;">PreObject</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>,<span style="color: #9cdcfe;">hitInfo</span>.<span style="color: #9cdcfe;">point</span>)<<span style="color: #9cdcfe;">InstallableDistance</span> && <span style="color: #9cdcfe;">Vector3</span>.<span style="color: #dcdcaa;">Distance</span>(<span style="color: #9cdcfe;">PreObject</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>,<span style="color: #9cdcfe;">hitInfo</span>.<span style="color: #9cdcfe;">point</span>)><span style="color: #b5cea8;">1.2</span>)</div><div> {</div><div> <span style="color: #9cdcfe;">pos</span> = <span style="color: #9cdcfe;">hitInfo</span>.<span style="color: #9cdcfe;">point</span>;</div><div> }</div><div> <span style="color: #c586c0;">else</span></div><div> { </div><div> <span style="color: #4ec9b0;">Vector3</span> <span style="color: #9cdcfe;">dt</span> = <span style="color: #9cdcfe;">hitInfo</span>.<span style="color: #9cdcfe;">point</span> - <span style="color: #9cdcfe;">PreObject</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>;</div><div> <span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">radians</span> = <span style="color: #9cdcfe;">Mathf</span>.<span style="color: #dcdcaa;">Atan2</span>(<span style="color: #9cdcfe;">dt</span>.<span style="color: #9cdcfe;">z</span>,-<span style="color: #9cdcfe;">dt</span>.<span style="color: #9cdcfe;">x</span>);</div><div> <span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">angle</span> = <span style="color: #9cdcfe;">radians</span> * <span style="color: #9cdcfe;">Mathf</span>.<span style="color: #9cdcfe;">Rad2Deg</span>-<span style="color: #b5cea8;">90</span>;</div><div> <span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">radian</span> = <span style="color: #9cdcfe;">angle</span> * <span style="color: #9cdcfe;">Mathf</span>.<span style="color: #9cdcfe;">Deg2Rad</span>;</div><div> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">Vector3</span>.<span style="color: #dcdcaa;">Distance</span>(<span style="color: #9cdcfe;">PreObject</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>,<span style="color: #9cdcfe;">hitInfo</span>.<span style="color: #9cdcfe;">point</span>)>=<span style="color: #9cdcfe;">InstallableDistance</span>)</div><div> {</div><div> <span style="color: #9cdcfe;">pos</span>.<span style="color: #9cdcfe;">z</span> = <span style="color: #9cdcfe;">Mathf</span>.<span style="color: #dcdcaa;">Cos</span>(<span style="color: #9cdcfe;">radian</span>) * <span style="color: #9cdcfe;">InstallableDistance</span> + <span style="color: #9cdcfe;">PreObject</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>.<span style="color: #9cdcfe;">z</span>;</div><div> <span style="color: #9cdcfe;">pos</span>.<span style="color: #9cdcfe;">x</span> = <span style="color: #9cdcfe;">Mathf</span>.<span style="color: #dcdcaa;">Sin</span>(<span style="color: #9cdcfe;">radian</span>) * <span style="color: #9cdcfe;">InstallableDistance</span> + <span style="color: #9cdcfe;">PreObject</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>.<span style="color: #9cdcfe;">x</span>;</div><div> }</div><div> <span style="color: #c586c0;">else</span> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">Vector3</span>.<span style="color: #dcdcaa;">Distance</span>(<span style="color: #9cdcfe;">PreObject</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>,<span style="color: #9cdcfe;">hitInfo</span>.<span style="color: #9cdcfe;">point</span>)<=<span style="color: #b5cea8;">1.2</span>)</div><div> {</div><div> <span style="color: #9cdcfe;">pos</span>.<span style="color: #9cdcfe;">z</span> = <span style="color: #9cdcfe;">Mathf</span>.<span style="color: #dcdcaa;">Cos</span>(<span style="color: #9cdcfe;">radian</span>) * <span style="color: #b5cea8;">1.4f</span> + <span style="color: #9cdcfe;">PreObject</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>.<span style="color: #9cdcfe;">z</span>;</div><div> <span style="color: #9cdcfe;">pos</span>.<span style="color: #9cdcfe;">x</span> = <span style="color: #9cdcfe;">Mathf</span>.<span style="color: #dcdcaa;">Sin</span>(<span style="color: #9cdcfe;">radian</span>) * <span style="color: #b5cea8;">1.4f</span> + <span style="color: #9cdcfe;">PreObject</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>.<span style="color: #9cdcfe;">x</span>;</div><div> }</div><div> }</div><div> <span style="color: #9cdcfe;">insobj</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span> = <span style="color: #9cdcfe;">pos</span>;</div><div> } </div><div> <span style="color: #6a9955;">//クリック時</span></div><div> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">Input</span>.<span style="color: #dcdcaa;">GetMouseButtonUp</span>(<span style="color: #b5cea8;">0</span>))</div><div> {</div><div> <span style="color: #6a9955;">//他の建物がないか確認</span></div><div> <span style="color: #4ec9b0;">RaycastHit</span> <span style="color: #9cdcfe;">hit</span>;</div><div> <span style="color: #6a9955;">// SphereCastのレイを飛ばしターゲットと接触しているか判定</span></div><div> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">Physics</span>.<span style="color: #dcdcaa;">SphereCast</span>(<span style="color: #9cdcfe;">touchPointToRay</span>, <span style="color: #b5cea8;">0.5f</span>, <span style="color: #569cd6;">out</span> <span style="color: #9cdcfe;">hit</span>, <span style="color: #b5cea8;">100f</span>)) { </div><div> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">hit</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">name</span> == <span style="color: #ce9178;">"Ground"</span>)</div><div> {</div><div> <span style="color: #9cdcfe;">insobj</span>.<span style="color: #9cdcfe;">layer</span> = <span style="color: #b5cea8;">0</span>;</div><div> <span style="color: #9cdcfe;">bMoodFlag</span>=<span style="color: #569cd6;">false</span>;</div><div> }</div><div> <span style="color: #c586c0;">else</span>{<span style="color: #9cdcfe;">Debug</span>.<span style="color: #dcdcaa;">Log</span>(<span style="color: #ce9178;">"設置できません"</span>);}</div><div> }</div><div> <span style="color: #c586c0;">else</span>{<span style="color: #9cdcfe;">bMoodFlag</span>=<span style="color: #569cd6;">false</span>;}</div><div> }</div><div> <span style="color: #6a9955;">//キャンセル</span></div><div> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">Input</span>.<span style="color: #dcdcaa;">GetKeyUp</span> (<span style="color: #9cdcfe;">KeyCode</span>.<span style="color: #9cdcfe;">Escape</span>))</div><div> {</div><div> <span style="color: #9cdcfe;">bMoodFlag</span>=<span style="color: #569cd6;">false</span>;</div><div> <span style="color: #9cdcfe;">insobj</span>.<span style="color: #dcdcaa;">SetActive</span> (<span style="color: #569cd6;">false</span>);</div><div> }</div><div> }</div><div> <span style="color: #c586c0;">else</span></div><div> {</div><div> <span style="color: #9cdcfe;">mouse</span> = <span style="color: #9cdcfe;">Input</span>.<span style="color: #9cdcfe;">mousePosition</span>;</div><div> <span style="color: #9cdcfe;">mouse</span>.<span style="color: #9cdcfe;">z</span> = <span style="color: #b5cea8;">10f</span>;</div><div> <span style="color: #9cdcfe;">mouse3d</span> = <span style="color: #9cdcfe;">Camera</span>.<span style="color: #9cdcfe;">main</span>.<span style="color: #dcdcaa;">ScreenToWorldPoint</span>(<span style="color: #9cdcfe;">mouse</span>);</div><div> <span style="color: #9cdcfe;">mouse3d</span>.<span style="color: #9cdcfe;">y</span> = <span style="color: #b5cea8;">1f</span>;</div><div> </div><div> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">Input</span>.<span style="color: #dcdcaa;">GetKeyUp</span> (<span style="color: #9cdcfe;">KeyCode</span>.<span style="color: #9cdcfe;">H</span>))</div><div> {</div><div> <span style="color: #9cdcfe;">bMoodFlag</span>=<span style="color: #569cd6;">true</span>;</div><div> <span style="color: #9cdcfe;">insobj</span> = <span style="color: #dcdcaa;">Instantiate</span>(<span style="color: #9cdcfe;">institutionObject</span>,<span style="color: #9cdcfe;">mouse3d</span>,<span style="color: #9cdcfe;">Quaternion</span>.<span style="color: #9cdcfe;">identity</span>);</div><div> <span style="color: #9cdcfe;">iScript</span> = <span style="color: #9cdcfe;">insobj</span>.<span style="color: #dcdcaa;">GetComponent</span><<span style="color: #4ec9b0;">InstitutionController</span>>();</div><div> <span style="color: #9cdcfe;">iScript</span>.<span style="color: #9cdcfe;">_Name</span> = <span style="color: #ce9178;">"House"</span>;</div><div> }</div><div> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">Input</span>.<span style="color: #dcdcaa;">GetKeyUp</span> (<span style="color: #9cdcfe;">KeyCode</span>.<span style="color: #9cdcfe;">B</span>))</div><div> {</div><div> <span style="color: #9cdcfe;">bMoodFlag</span>=<span style="color: #569cd6;">true</span>;</div><div> <span style="color: #9cdcfe;">insobj</span> = <span style="color: #dcdcaa;">Instantiate</span>(<span style="color: #9cdcfe;">institutionObject</span>,<span style="color: #9cdcfe;">mouse3d</span>,<span style="color: #9cdcfe;">Quaternion</span>.<span style="color: #9cdcfe;">identity</span>);</div><div> <span style="color: #9cdcfe;">iScript</span> = <span style="color: #9cdcfe;">insobj</span>.<span style="color: #dcdcaa;">GetComponent</span><<span style="color: #4ec9b0;">InstitutionController</span>>();</div><div> <span style="color: #9cdcfe;">iScript</span>.<span style="color: #9cdcfe;">_Name</span> = <span style="color: #ce9178;">"Barracks"</span>;</div><div> }</div><div> }</div><div> }</div><div>}</div></div><p><br /></p><p>参考にさせていただいたサイト:</p><div>https://www.urablog.xyz/entry/2017/04/28/213010</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8223287026847253855.post-65843006203054167272021-07-29T17:17:00.002+09:002021-07-29T17:19:47.133+09:00#6 ピンチアウトピンチイン、スクロールとかの実装<p><br /></p><p>画面を広くすると</p><p>ドラッグしてがめんずらしたり、</p><p>スクロールボタンで画面を拡大縮小したいしたくなります。</p><p><br /></p><p>Unityでダブルクリックとかドラッグとか</p><p>なんか関数があるのかと思ったら特にないみたいなので</p><p>自分で作成</p><p><br /></p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">System</span>.<span style="color: #4ec9b0;">Collections</span>;</div><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">System</span>.<span style="color: #4ec9b0;">Collections</span>.<span style="color: #4ec9b0;">Generic</span>;</div><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">UnityEngine</span>;</div><br /><div><span style="color: #569cd6;">public</span> <span style="color: #569cd6;">class</span> <span style="color: #4ec9b0;">MouseController</span> : <span style="color: #4ec9b0;">MonoBehaviour</span></div><div>{</div><div> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">clickTime</span> = <span style="color: #b5cea8;">0</span>;</div><div> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">bool</span> <span style="color: #9cdcfe;">clickFlg</span> = <span style="color: #569cd6;">false</span>;</div><div> <span style="color: #569cd6;">private</span> <span style="color: #4ec9b0;">GameObject</span> <span style="color: #9cdcfe;">mainCamera</span>; </div><div> <span style="color: #569cd6;">private</span> <span style="color: #4ec9b0;">Vector3</span> <span style="color: #9cdcfe;">dragStartPosision</span>;</div><div> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">mouseDownTime</span> = <span style="color: #b5cea8;">0</span>;</div><br /><div> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">Start</span>()</div><div> {</div><div> <span style="color: #9cdcfe;">mainCamera</span> = <span style="color: #9cdcfe;">Camera</span>.<span style="color: #9cdcfe;">main</span>.<span style="color: #9cdcfe;">gameObject</span>;</div><div> }</div><div> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">Update</span>()</div><div> {</div><div> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">Input</span>.<span style="color: #dcdcaa;">GetMouseButtonDown</span>(<span style="color: #b5cea8;">0</span>) && !<span style="color: #9cdcfe;">clickFlg</span>)<span style="color: #6a9955;">//マウスを押した時</span></div><div> {</div><div> <span style="color: #9cdcfe;">mouseDownTime</span>=<span style="color: #b5cea8;">0</span>;<span style="color: #6a9955;">//長押しチェック用カウント初期化</span></div><div> <span style="color: #9cdcfe;">dragStartPosision</span> = <span style="color: #9cdcfe;">Input</span>.<span style="color: #9cdcfe;">mousePosition</span>;<span style="color: #6a9955;">//ドラッグチェック用スタート地点</span></div><div> }</div><div> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">Input</span>.<span style="color: #dcdcaa;">GetMouseButton</span>(<span style="color: #b5cea8;">0</span>))<span style="color: #6a9955;">//マウス押している間</span></div><div> {</div><div> <span style="color: #9cdcfe;">mouseDownTime</span> += <span style="color: #9cdcfe;">Time</span>.<span style="color: #9cdcfe;">deltaTime</span>; <span style="color: #6a9955;">//長押しチェック用カウントアップ</span></div><div> }</div><div> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">Input</span>.<span style="color: #dcdcaa;">GetMouseButtonUp</span>(<span style="color: #b5cea8;">0</span>))</div><div> {</div><div> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">clickFlg</span>)<span style="color: #6a9955;">//一度クリックし、時間ないにもう一度クリック</span></div><div> {</div><div> <span style="color: #dcdcaa;">doubleClickAction</span>();<span style="color: #6a9955;">//ダブルクリック</span></div><div> <span style="color: #9cdcfe;">clickFlg</span>=<span style="color: #569cd6;">false</span>;<span style="color: #6a9955;">//クリックフラグ解除</span></div><div> }</div><div> <span style="color: #c586c0;">else</span></div><div> {<span style="color: #6a9955;">//クリックしていない状態</span></div><div> <span style="color: #9cdcfe;">clickTime</span>=<span style="color: #b5cea8;">0</span>;<span style="color: #6a9955;">//ダブルクリックチェック用カウンタ初期化</span></div><div> <span style="color: #9cdcfe;">clickFlg</span>=<span style="color: #569cd6;">true</span>;<span style="color: #6a9955;">//クリックチェックフラグ</span></div><div> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">Vector3</span>.<span style="color: #dcdcaa;">Distance</span>(<span style="color: #9cdcfe;">dragStartPosision</span>, <span style="color: #9cdcfe;">Input</span>.<span style="color: #9cdcfe;">mousePosition</span>) > <span style="color: #b5cea8;">1</span>)</div><div> {<span style="color: #6a9955;">//ドラッグチェック、スタート地点から移動しているか?</span></div><div> <span style="color: #dcdcaa;">MovePoisition</span>();<span style="color: #6a9955;">//ドラッグ</span></div><div> <span style="color: #9cdcfe;">clickFlg</span>=<span style="color: #569cd6;">false</span>;<span style="color: #6a9955;">//クリックフラグ解除</span></div><div> }</div><div> <span style="color: #c586c0;">else</span> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">mouseDownTime</span>><span style="color: #b5cea8;">0.4</span>)</div><div> {<span style="color: #6a9955;">//長押し時間超えているか?</span></div><div> <span style="color: #dcdcaa;">longClickAction</span>();<span style="color: #6a9955;">//長押し</span></div><div> <span style="color: #9cdcfe;">clickFlg</span>=<span style="color: #569cd6;">false</span>;<span style="color: #6a9955;">//クリックフラグ解除</span></div><div> }</div><div> }</div><div> }</div><div> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">clickFlg</span>)<span style="color: #6a9955;">//クリックしてチェック</span></div><div> {</div><div> <span style="color: #9cdcfe;">clickTime</span> += <span style="color: #9cdcfe;">Time</span>.<span style="color: #9cdcfe;">deltaTime</span>;<span style="color: #6a9955;">//ダブルクリックチェック用カウンタUP</span></div><div> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">clickTime</span> > <span style="color: #b5cea8;">0.3</span>)<span style="color: #6a9955;">//カウンタリミット</span></div><div> {</div><div> <span style="color: #dcdcaa;">singleClickAction</span>();<span style="color: #6a9955;">//シングルクリック</span></div><div> <span style="color: #9cdcfe;">clickFlg</span>=<span style="color: #569cd6;">false</span>;<span style="color: #6a9955;">//クリックフラグ解除</span></div><div> }</div><div> }</div><div> <span style="color: #6a9955;">//ホイルスクロールで拡大縮小</span></div><div> <span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">scroll</span> = <span style="color: #b5cea8;">0f</span>;</div><div> <span style="color: #9cdcfe;">scroll</span> = <span style="color: #9cdcfe;">Input</span>.<span style="color: #9cdcfe;">mouseScrollDelta</span>.<span style="color: #9cdcfe;">y</span>;</div><div> <span style="color: #9cdcfe;">mainCamera</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #dcdcaa;">Translate</span>(<span style="color: #b5cea8;">0</span>, <span style="color: #b5cea8;">0</span>, <span style="color: #9cdcfe;">scroll</span>);</div><div> }</div><br /><div> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">MovePoisition</span>()</div><div> {</div><div> <span style="color: #9cdcfe;">Debug</span>.<span style="color: #dcdcaa;">Log</span>(<span style="color: #ce9178;">"ドラッグ"</span>);</div><div> }</div><div> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">longClickAction</span>()</div><div> {</div><div> <span style="color: #9cdcfe;">Debug</span>.<span style="color: #dcdcaa;">Log</span>(<span style="color: #ce9178;">"長押し"</span>);</div><div> }</div><div> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">singleClickAction</span>()</div><div> { </div><div> <span style="color: #9cdcfe;">Debug</span>.<span style="color: #dcdcaa;">Log</span>(<span style="color: #ce9178;">"シングル"</span>);</div><div> }</div><div> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">doubleClickAction</span>()</div><div> {</div><div> <span style="color: #9cdcfe;">Debug</span>.<span style="color: #dcdcaa;">Log</span>(<span style="color: #ce9178;">"ダブル"</span>);</div><div> }</div><br /><div>}</div><br /></div><p><br /></p><p>マウスボタンの判定は</p><p>押した時、押してる時、離した時</p><p>これを利用して</p><p>ダブルクリックは1回目クリックを離した時からタイマーを動かし、</p><p>短い時間で2回目のクリック(ボタン離れた時)が発生したらダブルクリック</p><p>クリックフラグをつけておいて、時間がきたら解除、解除される前にクリックが発生するかを確認。</p><p>シングルクリックはダブルクリックにならなかったらシングルなので</p><p>時間が来たら解除、のところに解除されるってことはシングルクリック!</p><p>この時間が来たらの時間を長くするとシングルクリックの反応が遅くて気持ち悪い</p><p><br /></p><p>ドラッグは</p><p>ボタン押した時に、押した場所を記録</p><p>離したときに、その場所からずれていたらドラッグとする</p><p><br /></p><p>長押しは</p><p>ボタン押した時にタイマー初期化</p><p>ボタン押している間、タイマーを増やす</p><p>離した時に、一定以上押していたら長押しとする。</p><p>ただ、ドラッグの時も長押し状態なので、ドラッグと異なりマウスが移動していないことをじょうけんに加える</p><p><br /></p><p>おまけに</p><p>スクロールボタンでカメラのズームとかも実装</p><p> </p><p>参考</p><p>https://qiita.com/Nakatomo/items/7a1491de39a94fa176b0</p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8223287026847253855.post-1404774136168289462021-07-16T12:03:00.006+09:002021-07-16T12:03:32.529+09:00#4 敵に見つかると追いかけれるようにする<p>こんにちは!ぴちおです。</p><p>前回敵キャラを徘徊させるようにしました。</p><p>今回は敵キャラがプレイヤーを見つけると追いかけてくる仕組みを作ります。</p><p><br /></p><p>仕組みとしては</p><p>敵キャラからレイを飛ばして</p><p>プレイヤーを見つけたら、プレイヤーの場所にNavMeshで移動</p><p>視界から消えた場合、プレイヤーの場所に到着したら、徘徊モードに戻る。</p><p><br /></p><p>まずは、ますは敵の探索範囲を作ります。</p><p>敵オブジェクト[enemy]の下に</p><p>空のオブジェクト[CollisionDetector]を作成</p><p>スフィアコライダーを追加、スクリプト「searchPlayer」を作成</p><p>中身を書いていきます。</p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">System</span>.<span style="color: #4ec9b0;">Collections</span>;</div><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">System</span>.<span style="color: #4ec9b0;">Collections</span>.<span style="color: #4ec9b0;">Generic</span>;</div><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">UnityEngine</span>;</div><br /><div><span style="color: #569cd6;">public</span> <span style="color: #569cd6;">class</span> <span style="color: #4ec9b0;">SearchPlayer</span> : <span style="color: #4ec9b0;">MonoBehaviour</span></div><div>{</div><div> <span style="color: #4ec9b0;">EnemyController</span> <span style="color: #9cdcfe;">script</span>; <span style="color: #6a9955;">//UnityChanScriptが入る変数</span></div><div> <span style="color: #569cd6;">private</span> <span style="color: #4ec9b0;">RaycastHit</span> <span style="color: #9cdcfe;">hit</span>;</div><div> <span style="color: #6a9955;">// Start is called before the first frame update</span></div><div> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">Start</span>()</div><div> {</div><div> <span style="color: #9cdcfe;">script</span> = <span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">parent</span>.<span style="color: #9cdcfe;">gameObject</span>.<span style="color: #dcdcaa;">GetComponent</span><<span style="color: #4ec9b0;">EnemyController</span>>();</div><div> } </div><br /><div> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">OnTriggerStay</span>(<span style="color: #4ec9b0;">Collider</span> <span style="color: #9cdcfe;">other</span>)</div><div> {</div><div> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">other</span>.<span style="color: #dcdcaa;">CompareTag</span>(<span style="color: #ce9178;">"Player"</span>))</div><div> {</div><div> <span style="color: #4ec9b0;">GameObject</span> <span style="color: #9cdcfe;">Target</span> = <span style="color: #9cdcfe;">GameObject</span>.<span style="color: #dcdcaa;">Find</span>(<span style="color: #ce9178;">"player"</span>);</div><div> <span style="color: #569cd6;">var</span> <span style="color: #9cdcfe;">diff</span> = <span style="color: #9cdcfe;">Target</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span> - <span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>;</div><div> <span style="color: #569cd6;">var</span> <span style="color: #9cdcfe;">distance</span> = <span style="color: #9cdcfe;">diff</span>.<span style="color: #9cdcfe;">magnitude</span>;</div><div> <span style="color: #569cd6;">var</span> <span style="color: #9cdcfe;">direction</span> = <span style="color: #9cdcfe;">diff</span>.<span style="color: #9cdcfe;">normalized</span>;</div><div> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">Physics</span>.<span style="color: #dcdcaa;">Raycast</span>(<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>, <span style="color: #9cdcfe;">direction</span>, <span style="color: #569cd6;">out</span> <span style="color: #9cdcfe;">hit</span>, <span style="color: #9cdcfe;">distance</span>))</div><div> {</div><div> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">hit</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">gameObject</span> == <span style="color: #9cdcfe;">Target</span>)</div><div> {</div><div> <span style="color: #9cdcfe;">script</span>.<span style="color: #9cdcfe;">targetPlayer</span> = <span style="color: #9cdcfe;">Target</span>;</div><div> }</div><div> }</div><div> }</div><div> }</div><br /><div> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">OnTriggerExit</span>(<span style="color: #4ec9b0;">Collider</span> <span style="color: #9cdcfe;">other</span>)</div><div> {</div><div> <span style="color: #9cdcfe;">script</span>.<span style="color: #9cdcfe;">targetPlayer</span> = <span style="color: #569cd6;">null</span>;</div><div> }</div><div>}</div><br /></div><p>コライダーに接触したら、</p><p>タグを確認、プレイヤーであれば、</p><p>レイ発射!壁とかないのを確認して、</p><p>なければenemyのtargetPlayerにヒットしたプレイヤーをセット。</p><p>コライダーから外れたら、targetPlayerを空にする。</p><p><br /></p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div>{</div><div> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">i</span>=<span style="color: #b5cea8;">0</span>;</div><div> <span style="color: #569cd6;">private</span> <span style="color: #4ec9b0;">NavMeshAgent</span> <span style="color: #9cdcfe;">agent</span> = <span style="color: #569cd6;">null</span>;</div><div> [<span style="color: #4ec9b0;">SerializeField</span>] <span style="color: #569cd6;">private</span> <span style="color: #4ec9b0;">DestinationController</span> <span style="color: #9cdcfe;">destinationController</span>;</div><div> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">bool</span> <span style="color: #9cdcfe;">arvFlg</span> = <span style="color: #569cd6;">false</span>;</div><div> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">waitMaxTime</span> = <span style="color: #b5cea8;">5f</span>;</div><div> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">waitTime</span>;</div><div> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">waitCount</span> = <span style="color: #b5cea8;">0f</span>;</div><div> </div><div> <span style="color: #569cd6;">public</span> <span style="color: #4ec9b0;">GameObject</span> <span style="color: #9cdcfe;">targetPlayer</span>;</div></div><p>GameObjectを宣言</p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">Update</span>()</div><div> {</div><div> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">targetPlayer</span> != <span style="color: #569cd6;">null</span>){</div><div> <span style="color: #9cdcfe;">destinationController</span>.<span style="color: #dcdcaa;">SetDestination</span>(<span style="color: #9cdcfe;">targetPlayer</span>.<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>);</div><div> <span style="color: #9cdcfe;">agent</span>.<span style="color: #dcdcaa;">SetDestination</span>(<span style="color: #9cdcfe;">destinationController</span>.<span style="color: #dcdcaa;">GetDestination</span>());</div><div> }</div><div> <span style="color: #c586c0;">else</span></div><div> {</div><div> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">Vector3</span>.<span style="color: #dcdcaa;">Distance</span>(<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>, <span style="color: #9cdcfe;">destinationController</span>.<span style="color: #dcdcaa;">GetDestination</span>()) < <span style="color: #b5cea8;">1.5f</span>)</div><div> {</div><div> ・・・・</div><br /><div> }</div><div> }</div><div> }</div></div><p>Update内にターゲットが決まっている場合そこを目的地に移動するロジックを追加</p><p><br /></p><p>壁があると、ちゃんと避けたり、視界を遮ったりします。</p><p>あ、もちろん、BAKEし直しとか必要です。</p><p><br /></p><p><br /></p><p><br /></p><p>参考にさせていただいたサイト:</p><p> </p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8223287026847253855.post-30886148282588715662021-07-15T15:21:00.001+09:002021-07-15T15:21:34.386+09:00#3 敵キャラを動かしてみる<p>こんにちは!ぴちおです。</p><p>前回プレイヤーを作成したので、</p><p>次は敵キャラを表示したいと思います。</p><p><br /></p><p>まずは、ヒエラルキー→3Dオブジェクト→カプセル</p><p>位置をプレイヤーと被らないように</p><p>x:10,y:1,z:10に変更。</p><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZSlDtFYpMd2JtuqHZPaJqpjvxixD4IAX7SUVA9TUKFe4i7bGyP7eV7L1u08fOvzGzYelFq4_RUuGaTIKYVbKCEH9eeo9pE0dNAI3gjUoLgk23-w6uiJT1EAWRtgfMjtjEjfxI4T4p-RI/s548/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-15+8.48.56.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="352" data-original-width="548" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZSlDtFYpMd2JtuqHZPaJqpjvxixD4IAX7SUVA9TUKFe4i7bGyP7eV7L1u08fOvzGzYelFq4_RUuGaTIKYVbKCEH9eeo9pE0dNAI3gjUoLgk23-w6uiJT1EAWRtgfMjtjEjfxI4T4p-RI/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-15+8.48.56.png" width="320" /></a></div><p>コンポーネント追加から</p><p>ナビメッシュエージェントと</p><p>リッジボディと</p><p>新しいスクリプト「enemyController」をセット</p><p><img border="0" data-original-height="182" data-original-width="548" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBt09H273NlDpjWuMbhyyATBtAejvrj-JOGClP8DxXdC92Rdu7J0XRJzcpveAxTp4gqiDOI7RKiOVcBM0VgBvWsjvfuW49GEWGlB_-69jySMYz2RsPA2C2nRBQ7T8rvjpXZv5wlFzVzpM/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-15+8.52.15.png" style="caret-color: rgb(0, 0, 238); color: #0000ee; text-align: center; text-decoration: underline;" width="320" /></p><p>スクリプトはScriptフォルダに入れておく</p><p><br /></p><p>あと、プレイヤーと敵がわかるように色をつけます。</p><p>プロジェクトの+からフォルダを作成、名前を「Material」とする</p><p>プロジェクトの+からマテリアルの作成</p><p>できたマテリアルをCtrl+Dで複製</p><p>それぞれ名前を「playerMaterial」「enemyMaterial」とする</p><p>わかりやすいようにplayerMaterialの色を青、enemyMaterialの色を赤にする</p><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKnXcSozMFG5A7Aseyik2dQGjRHgfeBR1Dha3cEhgIl4fYem9tPVtlgajmgu8KGU0nQh1n73k-7fj7D_75ATUOVgier18je-2UQIq491OidnChHUHv2t5vN2NcTgOlDxP-kFLQjHK2WxM/s528/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-15+10.06.45.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="262" data-original-width="528" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKnXcSozMFG5A7Aseyik2dQGjRHgfeBR1Dha3cEhgIl4fYem9tPVtlgajmgu8KGU0nQh1n73k-7fj7D_75ATUOVgier18je-2UQIq491OidnChHUHv2t5vN2NcTgOlDxP-kFLQjHK2WxM/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-15+10.06.45.png" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAGM1BbJuRsN4gSNhFNpU8kwZLvL4Bd2Z9G9_PCeL7NScsHdff74vR8bNcEbMh4Ifb_6cycEKsfLJsidO0-X7o1UZrr1tuTohiHAs2y3QZJorNGf8AYILNuOvVMEv1r41yD4upJz12Vvs/s528/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-15+10.06.41.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="262" data-original-width="528" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAGM1BbJuRsN4gSNhFNpU8kwZLvL4Bd2Z9G9_PCeL7NScsHdff74vR8bNcEbMh4Ifb_6cycEKsfLJsidO0-X7o1UZrr1tuTohiHAs2y3QZJorNGf8AYILNuOvVMEv1r41yD4upJz12Vvs/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-15+10.06.41.png" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilC9mI8-0soGKBvJY7R4W4SUlhXJmYLk7h8D-TavTVCPLN19S9t0RBbWQG-MYKwhkUus8eWmH6A-g2Qfg1MrgxTxL9MuqFhR7DV3AZA2sQRZ9C1qQBUT587Ob7bveUQ9Or9klwMeReK7U/s760/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-15+10.07.04.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="306" data-original-width="760" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilC9mI8-0soGKBvJY7R4W4SUlhXJmYLk7h8D-TavTVCPLN19S9t0RBbWQG-MYKwhkUus8eWmH6A-g2Qfg1MrgxTxL9MuqFhR7DV3AZA2sQRZ9C1qQBUT587Ob7bveUQ9Or9klwMeReK7U/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-15+10.07.04.png" width="320" /></a></div><p>それぞれ、マテリアルをアタッチする(ドラッグ&ドロップ)</p><p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJAKcWbppQIo32iDuamMcDa1-NlJn-yz3E0bwAyUXDNg86c6MUFvONs1wapJh-wfFcRWxnEgmv3jiLTL_3-COnawXd2JGobc2rsmFg378IhfVTTILFPB8X0hfosiNhmQ982HeqcWO9m9c/s816/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-15+10.06.29.png" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="804" data-original-width="816" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJAKcWbppQIo32iDuamMcDa1-NlJn-yz3E0bwAyUXDNg86c6MUFvONs1wapJh-wfFcRWxnEgmv3jiLTL_3-COnawXd2JGobc2rsmFg378IhfVTTILFPB8X0hfosiNhmQ982HeqcWO9m9c/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-15+10.06.29.png" width="320" /></a></p><p>続いて、敵の動きをつけます。</p><p>とりあえず、初めは徘徊して、視界にプレイヤーが入ったら追っかけてくるようにします。</p><p><br /></p><p>まずは徘徊の仕組み。</p><p>ランダムに移動可能な場所を取得。</p><p>そこまでNav Meshで移動。</p><p>到着したら決められた時間待機して、再びランダムな場所を取得して移動を繰り返す。</p><p>[NavMeshを使った巡回するNPCのつくりかた]を参考に作成。</p><p><br /></p><p>クラス用に新規C#を作成「DestinationController」という名前にする。</p><p>それをダブルクリックしてスクリプトを作成していきます。</p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">System</span>.<span style="color: #4ec9b0;">Collections</span>;</div><div style="line-height: 18px;"><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">System</span>.<span style="color: #4ec9b0;">Collections</span>;</div><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">System</span>.<span style="color: #4ec9b0;">Collections</span>.<span style="color: #4ec9b0;">Generic</span>;</div><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">UnityEngine</span>;</div><br /><div><span style="color: #569cd6;">public</span> <span style="color: #569cd6;">class</span> <span style="color: #4ec9b0;">DestinationController</span> : <span style="color: #4ec9b0;">MonoBehaviour</span></div><div>{</div><div> <span style="color: #6a9955;">//public float wanderRange;</span></div><div> <span style="color: #6a9955;">//目的地</span></div><div> [<span style="color: #4ec9b0;">SerializeField</span>] <span style="color: #569cd6;">private</span> <span style="color: #4ec9b0;">Vector3</span> <span style="color: #9cdcfe;">destination</span>;</div><br /><div> <span style="color: #569cd6;">public</span> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">CreateDestination</span>(<span style="color: #4ec9b0;">Vector3</span> <span style="color: #9cdcfe;">pos</span>,<span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">wanderRange</span>)</div><div> {</div><div> <span style="color: #6a9955;">//pos:引数現在地</span></div><div> <span style="color: #6a9955;">//wanderRange:ランダム範囲</span></div><div> <span style="color: #6a9955;">//ランダムな場所を設定</span></div><div> <span style="color: #dcdcaa;">SetDestination</span>(<span style="color: #569cd6;">new</span> <span style="color: #4ec9b0;">Vector3</span>(<span style="color: #9cdcfe;">Random</span>.<span style="color: #dcdcaa;">Range</span>( <span style="color: #9cdcfe;">pos</span>.<span style="color: #9cdcfe;">x</span> - <span style="color: #9cdcfe;">wanderRange</span>, <span style="color: #9cdcfe;">pos</span>.<span style="color: #9cdcfe;">x</span> + <span style="color: #9cdcfe;">wanderRange</span>), <span style="color: #b5cea8;">0</span>, <span style="color: #9cdcfe;">Random</span>.<span style="color: #dcdcaa;">Range</span>( <span style="color: #9cdcfe;">pos</span>.<span style="color: #9cdcfe;">z</span> - <span style="color: #9cdcfe;">wanderRange</span>, <span style="color: #9cdcfe;">pos</span>.<span style="color: #9cdcfe;">z</span> + <span style="color: #9cdcfe;">wanderRange</span>)));</div><div> }</div><br /><div> <span style="color: #6a9955;">// 目的地の設定</span></div><div> <span style="color: #569cd6;">public</span> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">SetDestination</span>(<span style="color: #4ec9b0;">Vector3</span> <span style="color: #9cdcfe;">position</span>)</div><div> {</div><div> <span style="color: #9cdcfe;">destination</span> = <span style="color: #9cdcfe;">position</span>;</div><div> }</div><br /><div> <span style="color: #6a9955;">// 目的地の取得</span></div><div> <span style="color: #569cd6;">public</span> <span style="color: #4ec9b0;">Vector3</span> <span style="color: #dcdcaa;">GetDestination</span>()</div><div> {</div><div> <span style="color: #c586c0;">return</span> <span style="color: #9cdcfe;">destination</span>;</div><div> }</div></div><div>}</div></div><p>CreateDestinationは</p><p>posは現在地、要はenemyのtransform.positionです。</p><p>wanderRangeはどのくらいの範囲移動するかです。</p><p>続いて、enemyController側を作成。</p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div style="line-height: 18px;"><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">System</span>.<span style="color: #4ec9b0;">Collections</span>;</div><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">System</span>.<span style="color: #4ec9b0;">Collections</span>.<span style="color: #4ec9b0;">Generic</span>;</div><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">UnityEngine</span>;</div><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">UnityEngine</span>.<span style="color: #4ec9b0;">AI</span>;</div><br /><div>[<span style="color: #4ec9b0;">RequireComponent</span>(<span style="color: #569cd6;">typeof</span>(<span style="color: #4ec9b0;">NavMeshAgent</span>))]</div><div>[<span style="color: #4ec9b0;">RequireComponent</span>(<span style="color: #569cd6;">typeof</span>(<span style="color: #4ec9b0;">DestinationController</span>))]</div><br /><div><span style="color: #569cd6;">public</span> <span style="color: #569cd6;">class</span> <span style="color: #4ec9b0;">enemyController</span> : <span style="color: #4ec9b0;">MonoBehaviour</span></div><div>{</div><div> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">i</span>=<span style="color: #b5cea8;">0</span>;</div><div> <span style="color: #569cd6;">private</span> <span style="color: #4ec9b0;">NavMeshAgent</span> <span style="color: #9cdcfe;">agent</span> = <span style="color: #569cd6;">null</span>;</div><div> [<span style="color: #4ec9b0;">SerializeField</span>] <span style="color: #569cd6;">private</span> <span style="color: #4ec9b0;">DestinationController</span> <span style="color: #9cdcfe;">destinationController</span>;</div><br /><div> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">Start</span>()</div><div> {</div><div> <span style="color: #9cdcfe;">agent</span> = <span style="color: #dcdcaa;">GetComponent</span><<span style="color: #4ec9b0;">NavMeshAgent</span>>();</div><div> <span style="color: #9cdcfe;">destinationController</span> = <span style="color: #dcdcaa;">GetComponent</span><<span style="color: #4ec9b0;">DestinationController</span>>();</div><div> <span style="color: #9cdcfe;">destinationController</span>.<span style="color: #dcdcaa;">SetDestination</span>(<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>);<span style="color: #6a9955;">//スタートを待ち状態から始める</span></div><div> }</div><div> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">Update</span>()</div><div> {</div><div> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">Vector3</span>.<span style="color: #dcdcaa;">Distance</span>(<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>, <span style="color: #9cdcfe;">destinationController</span>.<span style="color: #dcdcaa;">GetDestination</span>()) < <span style="color: #b5cea8;">1.5f</span>)</div><div> {</div><div> <span style="color: #c586c0;">do</span></div><div> {</div><div> <span style="color: #9cdcfe;">destinationController</span>.<span style="color: #dcdcaa;">CreateDestination</span>(<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>,<span style="color: #b5cea8;">10f</span>);<span style="color: #6a9955;">//ランダムな行き先設定</span></div><div> <span style="color: #9cdcfe;">i</span>++;</div><div> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">i</span>><span style="color: #b5cea8;">100</span>){</div><div> <span style="color: #c586c0;">break</span>;</div><div> }<span style="color: #6a9955;">//予防策</span></div><div> } <span style="color: #c586c0;">while</span> (!<span style="color: #dcdcaa;">RandomWander</span>());<span style="color: #6a9955;">//ルートがあるかの確認</span></div><div> }</div><div> }</div><br /><div> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">bool</span> <span style="color: #dcdcaa;">RandomWander</span>() {</div><div> <span style="color: #6a9955;">//指定した目的地に障害物があるかどうか、そもそも到達可能なのかを確認して問題なければセットする。</span></div><div> <span style="color: #6a9955;">//pathPending 経路探索の準備できているかどうか</span></div><div> <span style="color: #569cd6;">var</span> <span style="color: #9cdcfe;">path</span> = <span style="color: #569cd6;">new</span> <span style="color: #4ec9b0;">NavMeshPath</span>();</div><div> <span style="color: #569cd6;">bool</span> <span style="color: #9cdcfe;">rFlg</span> = <span style="color: #569cd6;">false</span>;</div><div> <span style="color: #c586c0;">if</span> (!<span style="color: #9cdcfe;">agent</span>.<span style="color: #9cdcfe;">pathPending</span>) {</div><div> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">agent</span>.<span style="color: #9cdcfe;">remainingDistance</span> <= <span style="color: #9cdcfe;">agent</span>.<span style="color: #9cdcfe;">stoppingDistance</span>) {</div><div> <span style="color: #6a9955;">//hasPath エージェントが経路を持っているかどうか</span></div><div> <span style="color: #6a9955;">//agent.velocity.sqrMagnitudeはスピード</span></div><div> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">NavMesh</span>.<span style="color: #dcdcaa;">CalculatePath</span>(<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>, <span style="color: #9cdcfe;">destinationController</span>.<span style="color: #dcdcaa;">GetDestination</span>(), <span style="color: #9cdcfe;">NavMesh</span>.<span style="color: #9cdcfe;">AllAreas</span>, <span style="color: #9cdcfe;">path</span>))</div><div> {</div><div> <span style="color: #9cdcfe;">agent</span>.<span style="color: #dcdcaa;">SetDestination</span>(<span style="color: #9cdcfe;">destinationController</span>.<span style="color: #dcdcaa;">GetDestination</span>());</div><div> <span style="color: #9cdcfe;">rFlg</span> = <span style="color: #569cd6;">true</span>;</div><div> }</div><div> }</div><div> }</div><div> <span style="color: #c586c0;">return</span> <span style="color: #9cdcfe;">rFlg</span>;</div><div> }</div><br /><div>}</div></div></div><p>using UnityEngine.AIは忘れないように!!</p><p>これから到着したら、ちょっと待機する機能を追加します。</p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">System</span>.<span style="color: #4ec9b0;">Collections</span>;</div><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">System</span>.<span style="color: #4ec9b0;">Collections</span>.<span style="color: #4ec9b0;">Generic</span>;</div><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">UnityEngine</span>;</div><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">UnityEngine</span>.<span style="color: #4ec9b0;">AI</span>;</div><br /><div>[<span style="color: #4ec9b0;">RequireComponent</span>(<span style="color: #569cd6;">typeof</span>(<span style="color: #4ec9b0;">NavMeshAgent</span>))]</div><div>[<span style="color: #4ec9b0;">RequireComponent</span>(<span style="color: #569cd6;">typeof</span>(<span style="color: #4ec9b0;">DestinationController</span>))]</div><br /><div><span style="color: #569cd6;">public</span> <span style="color: #569cd6;">class</span> <span style="color: #4ec9b0;">enemyController</span> : <span style="color: #4ec9b0;">MonoBehaviour</span></div><div>{</div><div> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">i</span>=<span style="color: #b5cea8;">0</span>;</div><div> <span style="color: #569cd6;">private</span> <span style="color: #4ec9b0;">NavMeshAgent</span> <span style="color: #9cdcfe;">agent</span> = <span style="color: #569cd6;">null</span>;</div><div> [<span style="color: #4ec9b0;">SerializeField</span>] <span style="color: #569cd6;">private</span> <span style="color: #4ec9b0;">DestinationController</span> <span style="color: #9cdcfe;">destinationController</span>;</div><div><b> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">bool</span> <span style="color: #9cdcfe;">arvFlg</span> = <span style="color: #569cd6;">false</span>;</b></div><div><b> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">waitMaxTime</span> = <span style="color: #b5cea8;">5f</span>;</b></div><div><b> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">waitTime</span>;</b></div><div><b> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">float</span> <span style="color: #9cdcfe;">waitCount</span> = <span style="color: #b5cea8;">0f</span>;</b></div><br /><div> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">Start</span>()</div><div> {</div><div> <span style="color: #9cdcfe;">agent</span> = <span style="color: #dcdcaa;">GetComponent</span><<span style="color: #4ec9b0;">NavMeshAgent</span>>();</div><div> <span style="color: #9cdcfe;">destinationController</span> = <span style="color: #dcdcaa;">GetComponent</span><<span style="color: #4ec9b0;">DestinationController</span>>();</div><div> <span style="color: #9cdcfe;">destinationController</span>.<span style="color: #dcdcaa;">SetDestination</span>(<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>);<span style="color: #6a9955;">//スタートを待ち状態から始める</span></div><br /><div> <b> <span style="color: #9cdcfe;">waitTime</span> = <span style="color: #9cdcfe;">Random</span>.<span style="color: #dcdcaa;">Range</span>(<span style="color: #b5cea8;">1</span>,<span style="color: #9cdcfe;">waitMaxTime</span>);<span style="color: #6a9955;">//まちじかんをランダム</span></b></div><div> }</div><div> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">Update</span>()</div><div> {</div><div> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">Vector3</span>.<span style="color: #dcdcaa;">Distance</span>(<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>, <span style="color: #9cdcfe;">destinationController</span>.<span style="color: #dcdcaa;">GetDestination</span>()) < <span style="color: #b5cea8;">1.5f</span>)</div><div> {</div><div><b> <span style="color: #6a9955;">//到着したら</span></b></div><div><b> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">arvFlg</span>)</b></div><div><b> {</b></div><div><b> <span style="color: #6a9955;">//待機時間過ぎたか?</span></b></div><div><b> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">waitCount</span> > <span style="color: #9cdcfe;">waitTime</span>)</b></div><div><b> {</b></div><div><b> <span style="color: #6a9955;">//過ぎた場合行き先セットしてタイマーとフラグクリア</span></b></div><div> <span style="color: #c586c0;">do</span></div><div> {</div><div> <span style="color: #9cdcfe;">destinationController</span>.<span style="color: #dcdcaa;">CreateDestination</span>(<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>,<span style="color: #b5cea8;">10f</span>);<span style="color: #6a9955;">//ランダムな行き先設定</span></div><div> <span style="color: #9cdcfe;">i</span>++;</div><div> <span style="color: #c586c0;">if</span>(<span style="color: #9cdcfe;">i</span>><span style="color: #b5cea8;">100</span>){</div><div> <span style="color: #c586c0;">break</span>;</div><div> }<span style="color: #6a9955;">//予防策</span></div><div> } <span style="color: #c586c0;">while</span> (!<span style="color: #dcdcaa;">RandomWander</span>());<span style="color: #6a9955;">//ルートがあるかの確認</span></div><div><b> <span style="color: #9cdcfe;">arvFlg</span>=<span style="color: #569cd6;">false</span>;</b></div><div><b> <span style="color: #9cdcfe;">waitTime</span> = <span style="color: #9cdcfe;">Random</span>.<span style="color: #dcdcaa;">Range</span>(<span style="color: #b5cea8;">1</span>,<span style="color: #9cdcfe;">waitMaxTime</span>);</b></div><div><b> <span style="color: #9cdcfe;">waitCount</span> = <span style="color: #b5cea8;">0</span>;</b></div><div><b> }</b></div><div><b> <span style="color: #c586c0;">else</span></b></div><div><b> {</b></div><div><b> <span style="color: #6a9955;">//過ぎてない場合、カウント</span></b></div><div><b> <span style="color: #9cdcfe;">waitCount</span> += <span style="color: #9cdcfe;">Time</span>.<span style="color: #9cdcfe;">deltaTime</span>;</b></div><div><b> }</b></div><div><b> }</b></div><div><b> <span style="color: #c586c0;">else</span></b></div><div><b> {</b></div><div><b> <span style="color: #9cdcfe;">arvFlg</span>=<span style="color: #569cd6;">true</span>;</b></div><div><b> } </b> </div><div> }</div><div> }</div><br /><div> <span style="color: #569cd6;">private</span> <span style="color: #569cd6;">bool</span> <span style="color: #dcdcaa;">RandomWander</span>() {</div><div> <span style="color: #6a9955;">//指定した目的地に障害物があるかどうか、そもそも到達可能なのかを確認して問題なければセットする。</span></div><div> <span style="color: #6a9955;">//pathPending 経路探索の準備できているかどうか</span></div><div> <span style="color: #569cd6;">var</span> <span style="color: #9cdcfe;">path</span> = <span style="color: #569cd6;">new</span> <span style="color: #4ec9b0;">NavMeshPath</span>();</div><div> <span style="color: #569cd6;">bool</span> <span style="color: #9cdcfe;">rFlg</span> = <span style="color: #569cd6;">false</span>;</div><div> <span style="color: #c586c0;">if</span> (!<span style="color: #9cdcfe;">agent</span>.<span style="color: #9cdcfe;">pathPending</span>) {</div><div> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">agent</span>.<span style="color: #9cdcfe;">remainingDistance</span> <= <span style="color: #9cdcfe;">agent</span>.<span style="color: #9cdcfe;">stoppingDistance</span>) {</div><div> <span style="color: #6a9955;">//hasPath エージェントが経路を持っているかどうか</span></div><div> <span style="color: #6a9955;">//agent.velocity.sqrMagnitudeはスピード</span></div><div> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">NavMesh</span>.<span style="color: #dcdcaa;">CalculatePath</span>(<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>, <span style="color: #9cdcfe;">destinationController</span>.<span style="color: #dcdcaa;">GetDestination</span>(), <span style="color: #9cdcfe;">NavMesh</span>.<span style="color: #9cdcfe;">AllAreas</span>, <span style="color: #9cdcfe;">path</span>))</div><div> {</div><div> <span style="color: #9cdcfe;">agent</span>.<span style="color: #dcdcaa;">SetDestination</span>(<span style="color: #9cdcfe;">destinationController</span>.<span style="color: #dcdcaa;">GetDestination</span>());</div><div> <span style="color: #9cdcfe;">rFlg</span> = <span style="color: #569cd6;">true</span>;</div><div> }</div><div> }</div><div> }</div><div> <span style="color: #c586c0;">return</span> <span style="color: #9cdcfe;">rFlg</span>;</div><div> }</div><br /><div>}</div></div><p>到着したら、到着フラグ立てる、到着フラグ立ってれば待ちカウントアップして、規定値になったら処理を行う。</p>
destinationController.CreateDestination(transform.position,10f); <div>ここの10fを長くすると長距離、短くすると短距離になります。<br /><div>private float waitMaxTime = 5f;</div><div>ここの数値を長くすると待ち時間の最長時間が長くなります。</div><div>ソースないでランダムで書いてるところをそのまま数値にすると、固定の待ち時間になります。<br />
<p>これで、敵キャラがうろちょろします。</p><p><br /></p><p><br /></p><p><br /></p><p>参考にさせていただいたサイト:</p><p><br /></p><p><span class="site-name-text" face=""Helvetica Neue", Arial, "Hiragino Kaku Gothic ProN", "Hiragino Sans", Meiryo, sans-serif" itemprop="name about" style="box-sizing: border-box; color: #d1b100; font-size: 28px; margin: 0px; overflow-wrap: break-word; padding: 0px; text-align: center; text-decoration: none; word-wrap: break-word;"><a class="site-name site-name-text-link" href="https://gametukurikata.com/navigation/navigationclick" itemprop="url" style="box-sizing: border-box; color: #333333; font-family: "Helvetica Neue", Arial, "Hiragino Kaku Gothic ProN", "Hiragino Sans", Meiryo, sans-serif; font-size: 18px; margin: 0px; overflow-wrap: break-word; padding: 0px; text-align: center; text-decoration: none; word-wrap: break-word;">Unityを使った3Dゲームの作り方(かめくめ)</a></span></p><h1 class="css-cgzq40" style="box-sizing: inherit; color: rgba(0, 0, 0, 0.87); font-family: -apple-system, "Segoe UI", "Helvetica Neue", "Hiragino Kaku Gothic ProN", メイリオ, meiryo, sans-serif; font-size: 32px; line-height: 1.4; margin: 8px 0px 0px; padding: 0px; word-break: break-all;"><a href="https://qiita.com/ZeniZeni/items/6e3665ac665649316d53">NavMeshを使った巡回するNPCのつくりかた</a></h1><p><br /></p><p><span color="rgba(0, 0, 0, 0.82)" face="-apple-system, BlinkMacSystemFont, "Hiragino Kaku Gothic ProN", "Hiragino Sans", Meiryo, sans-serif, "Segoe UI Emoji"" style="background-color: #edf2f7; caret-color: rgba(0, 0, 0, 0.82); font-size: 29.304000854492188px; font-weight: bold;"><a href="https://zenn.dev/daichi_gamedev/articles/4902b62a0140d1">【Unity】徘徊する敵をNavigationで作る方法</a></span></p></div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8223287026847253855.post-30959677722057712862021-07-14T14:51:00.004+09:002021-07-14T15:07:03.886+09:00#2 オブジェクトを動かしてみるこんにちは!ぴちおです。! <div><br /></div><div> キャラクターがいないと始まらないので</div><div> まずは床とキャラクターをセット </div><div> ヒエラルキー→3Dオブジェクト→平面をクリック </div><div> そのままだと動かすのにも狭いので
少し大きくします。 </div><div class="separator" style="clear: both; text-align: left;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkmNAdlIN8vVStcTObUVL-x7QNeX43Gz6PCXfiHwtCymKVFE9MxqT8j0plHfBMSh4CBek97ioIQ-NAvCT57urJbA7m2AAmXNwAJQNr2ToEbln7bM_apL0a6X6Gc4jKLTg9Sce_n48xMSo/s730/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+13.06.13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="688" data-original-width="730" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkmNAdlIN8vVStcTObUVL-x7QNeX43Gz6PCXfiHwtCymKVFE9MxqT8j0plHfBMSh4CBek97ioIQ-NAvCT57urJbA7m2AAmXNwAJQNr2ToEbln7bM_apL0a6X6Gc4jKLTg9Sce_n48xMSo/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+13.06.13.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: justify;"><span style="text-align: left;">Transformm→スケールでx 3, y 0, z 1にセット </span></div><div>あと、名前を「ground」に変更しておきます。 </div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK6igzoO6XWbhzUt5PQtNcTIaHUR9JjD15s9Y0QAu2pYJuvIVRtzK9oUeUT4-p8kN8NPXx0UELEGe0UTr3dnYh73sla7Oh8sTYxXj1qYRewdTehdJnDwUxXJZijqtEJbTWq4Ql-vK-Wmo/s536/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+14.32.30.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="338" data-original-width="536" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhK6igzoO6XWbhzUt5PQtNcTIaHUR9JjD15s9Y0QAu2pYJuvIVRtzK9oUeUT4-p8kN8NPXx0UELEGe0UTr3dnYh73sla7Oh8sTYxXj1qYRewdTehdJnDwUxXJZijqtEJbTWq4Ql-vK-Wmo/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+14.32.30.png" width="320" /></a></div><div><br /></div><div> 続いて、キャラクターをセット </div><div>とりあえずはオブジェクトそのまま </div><div>ヒエラルキー→3Dオブジェクト→カプセル </div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6BtFN-0LbTpaj_O7ssTyeM4MiNwvluwmgl-qHIjYL1vfTWiK6e9q6cySXuWgpyA9vlOzwtXL4ut4Kwg4vtu3lMqNJn0UxhQYETx_8ELszLuAO2xBrdFGhl5Y1Ji_lLO98ZGb2dVAP6MM/s586/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+13.09.53.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="368" data-original-width="586" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6BtFN-0LbTpaj_O7ssTyeM4MiNwvluwmgl-qHIjYL1vfTWiK6e9q6cySXuWgpyA9vlOzwtXL4ut4Kwg4vtu3lMqNJn0UxhQYETx_8ELszLuAO2xBrdFGhl5Y1Ji_lLO98ZGb2dVAP6MM/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+13.09.53.png" width="320" /></a></div><div><br /></div><div>名前を「player」
タグを「player」 </div><div>Transformm→位置をx 0, y 1, z 0にセット </div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCIVPpbDS1ddyrQt4doL2si8Fq6oBP2YahhiGyX9cVd_BeASDe6XHtTbOMyh4j3D0edv7cWPevIY4VRP_8FH-jorJ6U2MUdGvVOWUqe_kumlhZBpHyUn9GxvQM2RhZLnSNcZbUyEIzH1k/s536/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+14.32.38.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="338" data-original-width="536" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCIVPpbDS1ddyrQt4doL2si8Fq6oBP2YahhiGyX9cVd_BeASDe6XHtTbOMyh4j3D0edv7cWPevIY4VRP_8FH-jorJ6U2MUdGvVOWUqe_kumlhZBpHyUn9GxvQM2RhZLnSNcZbUyEIzH1k/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+14.32.38.png" width="320" /></a></div><br /><div><br /></div><div><br /></div><div> </div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div><br /></div><div>今回はクリックした場所に移動させたいので
NavMeshを使っていきます。 </div><div> ウィンドウ→AI→ナビゲーション </div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQEkgc9_Qec2qiXgwgueejfIkZpTt8ieB-E180-o5_EJnTi6_GYAheTNgF3youGXYjLen9Q3iYJMo10yDmzts41T0pi33AdgdzwRbPwyVSTiFwYqs34iEvWTGlch5AG8pmNNHB7BjFfRg/s1050/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+13.14.28.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="1050" data-original-width="692" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQEkgc9_Qec2qiXgwgueejfIkZpTt8ieB-E180-o5_EJnTi6_GYAheTNgF3youGXYjLen9Q3iYJMo10yDmzts41T0pi33AdgdzwRbPwyVSTiFwYqs34iEvWTGlch5AG8pmNNHB7BjFfRg/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+13.14.28.png" /></a></div><div>groundを選択して </div><div>ナビゲーションタブのNavigation staticにチェックを入れる </div><div>ベイクタブのベイクをクリック </div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIkAIEvddmFdCHvLNg7OeREPJp6Lex27TC0WWEiNa5dnuoyKg1GDPNt6pPPj3nb05Matn5KZc1Fkrvia7dU5HkeWsjPGgo9PinpE_3AaIJVpEOI6hpQvwIXm3lF1qKu3IWYtJ7p-yjoYE/s846/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+13.18.22.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="846" data-original-width="554" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIkAIEvddmFdCHvLNg7OeREPJp6Lex27TC0WWEiNa5dnuoyKg1GDPNt6pPPj3nb05Matn5KZc1Fkrvia7dU5HkeWsjPGgo9PinpE_3AaIJVpEOI6hpQvwIXm3lF1qKu3IWYtJ7p-yjoYE/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+13.18.22.png" /></a></div><div> 今回床しかないので真っ青になるだけ、 </div><div>障害物とかを設定しておくとそこを避けるような形になります。 </div><div><br /></div><div> 続いてクリックした場所に移動するように設定してきます。 </div><div>まずは、「player」を選択して、 </div><div>NavMeshエージェントを追加 </div><div>インスペクター→コンポーネントの追加、</div><div>navと入れると出てくる「ナビメッシュエージェント」を追加 </div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJbIj8-HSO_WkleiGCKfNfn75OtOHzDXe9D7Wdc-Ri3OeZ4htuP-Rom7HTNQKp4J4558z4Jyy0RC8N9FLdFrh59bBUvEk4VZB4_guLh7Swz_Lpc883SyULuN-ByzziZZe0HUkZ6DCLv_4/s536/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+14.39.20.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="364" data-original-width="536" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJbIj8-HSO_WkleiGCKfNfn75OtOHzDXe9D7Wdc-Ri3OeZ4htuP-Rom7HTNQKp4J4558z4Jyy0RC8N9FLdFrh59bBUvEk4VZB4_guLh7Swz_Lpc883SyULuN-ByzziZZe0HUkZ6DCLv_4/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+14.39.20.png" width="320" /></a></div><div> 次、スクリプト作成 </div><div>インスペクター→コンポーネントの追加
新しいスクリプトをクリック、</div><div>名前を「playerConntroller」とします。 </div><div><br /></div><div> プロジェクトに作成したスクリプトが表示されてます。 </div><div>後でわからなくならないようにフォルダ分します。 </div><div> プロジェクトタブの下の➕をクリック、</div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-ACRU5dU1WseeuKz6suCfCW2AUR7caGTPIvDlX-xS2FrMki91qVubl0BS3gBxzpvGF2ChfYBPWw6j9zFP71uSk6DYlW479oL7v92UbgQZBAEd68szUR_Vcx3yM7wGusvOc4lTxhDZlBs/s536/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+13.26.33.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="202" data-original-width="536" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-ACRU5dU1WseeuKz6suCfCW2AUR7caGTPIvDlX-xS2FrMki91qVubl0BS3gBxzpvGF2ChfYBPWw6j9zFP71uSk6DYlW479oL7v92UbgQZBAEd68szUR_Vcx3yM7wGusvOc4lTxhDZlBs/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+13.26.33.png" width="320" /></a></div><div>フォルダをクリック
名称を「script」をします。 </div><div>先ほど作成した「playerConntroller」をこのフォルダにドラッグ&ドロップ </div><div><br /></div><div> 続いて、「playerConntroller」をダブルクリックしてエディタで開きます。 </div><div><br /></div><div><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">System</span>.<span style="color: #4ec9b0;">Collections</span>;</div><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">System</span>.<span style="color: #4ec9b0;">Collections</span>.<span style="color: #4ec9b0;">Generic</span>;</div><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">UnityEngine</span>;</div><div><span style="color: #c586c0;">using</span> <span style="color: #4ec9b0;">UnityEngine</span>.<span style="color: #4ec9b0;">AI</span>;</div><br /><div><span style="color: #569cd6;">public</span> <span style="color: #569cd6;">class</span> <span style="color: #4ec9b0;">playerController</span> : <span style="color: #4ec9b0;">MonoBehaviour</span></div><div>{</div><div> <span style="color: #6a9955;">// ナビゲーションエージェント</span></div><div> <span style="color: #569cd6;">private</span> <span style="color: #4ec9b0;">NavMeshAgent</span> <span style="color: #9cdcfe;">agent</span>;</div><br /><div> <span style="color: #6a9955;">// Start is called before the first frame update</span></div><div> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">Start</span>()</div><div> {</div><div> <span style="color: #9cdcfe;">agent</span> = <span style="color: #dcdcaa;">GetComponent</span><<span style="color: #4ec9b0;">NavMeshAgent</span>>();</div><div> <span style="color: #9cdcfe;">agent</span>.<span style="color: #dcdcaa;">SetDestination</span>(<span style="color: #9cdcfe;">transform</span>.<span style="color: #9cdcfe;">position</span>);</div><div> }</div><br /><div> <span style="color: #6a9955;">// Update is called once per frame</span></div><div> <span style="color: #569cd6;">void</span> <span style="color: #dcdcaa;">Update</span>()</div><div> {</div><div> <span style="color: #6a9955;">// マウスクリックまたはmouseDownModeがOffの時マウスの位置を移動する位置にする</span></div><div> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">Input</span>.<span style="color: #dcdcaa;">GetMouseButtonDown</span>(<span style="color: #b5cea8;">0</span>))</div><div> {</div><div> <span style="color: #4ec9b0;">RaycastHit</span> <span style="color: #9cdcfe;">hit</span>;</div><div> <span style="color: #c586c0;">if</span> (<span style="color: #9cdcfe;">Physics</span>.<span style="color: #dcdcaa;">Raycast</span>(<span style="color: #9cdcfe;">Camera</span>.<span style="color: #9cdcfe;">main</span>.<span style="color: #dcdcaa;">ScreenPointToRay</span>(<span style="color: #9cdcfe;">Input</span>.<span style="color: #9cdcfe;">mousePosition</span>), <span style="color: #569cd6;">out</span> <span style="color: #9cdcfe;">hit</span>, <span style="color: #b5cea8;">100</span>))</div><div> {</div><div> <span style="color: #9cdcfe;">agent</span>.<span style="color: #9cdcfe;">destination</span> = <span style="color: #9cdcfe;">hit</span>.<span style="color: #9cdcfe;">point</span>;</div><div> }</div><div> }</div><div> }</div><div>}</div><br /></div></div><div><navmeshagent><br /></navmeshagent></div><div><navmeshagent>これで動くのですが、</navmeshagent></div><div><navmeshagent>このままだとわかりづらいので</navmeshagent></div><div><navmeshagent>カメラを修正</navmeshagent></div><div><navmeshagent><span> ヒエラルキー→Main Cameraをクリック</span></navmeshagent></div><div><navmeshagent><span><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfMaHrwsCpb6FLkdIbc2pFNdiAoi31WGqGM0CGeEMrUlCxC6C9wmy0ho7ZLOyv6BOu7DK0o6WJeGIFhwRY5mb8XEdK3W8drH1SVfL1EM3SFZp6Y9OOMtbwRQJWw1XVBX7KsmSHNi9ZdXM/s464/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+14.49.19.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="216" data-original-width="464" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfMaHrwsCpb6FLkdIbc2pFNdiAoi31WGqGM0CGeEMrUlCxC6C9wmy0ho7ZLOyv6BOu7DK0o6WJeGIFhwRY5mb8XEdK3W8drH1SVfL1EM3SFZp6Y9OOMtbwRQJWw1XVBX7KsmSHNi9ZdXM/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+14.49.19.png" width="320" /></a></span></navmeshagent></div><div><navmeshagent>インスペクターの値を変更。</navmeshagent></div><div><navmeshagent>位置:x0,y40,z0</navmeshagent></div><div><navmeshagent>回転:x90,y0,z0</navmeshagent></div><div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1DeSoc2JYooO5pTtSosIQIiiAEwckjyjflb_Mf2-6UJidU77RAwh1xNThei9PCjOKzjIBocDv05eSyOkuM7YSfCoCfDLtp_lnn3O7AsCIarFgKmLqO5LXZrr_9br6JsFYURdcmhJBcds/s542/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+14.49.30.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="328" data-original-width="542" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1DeSoc2JYooO5pTtSosIQIiiAEwckjyjflb_Mf2-6UJidU77RAwh1xNThei9PCjOKzjIBocDv05eSyOkuM7YSfCoCfDLtp_lnn3O7AsCIarFgKmLqO5LXZrr_9br6JsFYURdcmhJBcds/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+14.49.30.png" width="320" /></a></div><div><navmeshagent><br /></navmeshagent></div><div><navmeshagent>上空から見下ろす感じになります。</navmeshagent></div><div><navmeshagent> </navmeshagent><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLeDHG8il-WG5_KGbVYBU30hJeSNDQ3oyuk4pElezDZvGBfPd4DRqkm0bnYc8mfLxAF_P3FLgeJIrdBclmdshfgYEBRgy0oF6Mi_lqt18-oIcPxaEBhi6Zrsu0ILip3JAfFmtjwwNhIxQ/s678/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+14.49.38.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" data-original-height="672" data-original-width="678" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLeDHG8il-WG5_KGbVYBU30hJeSNDQ3oyuk4pElezDZvGBfPd4DRqkm0bnYc8mfLxAF_P3FLgeJIrdBclmdshfgYEBRgy0oF6Mi_lqt18-oIcPxaEBhi6Zrsu0ILip3JAfFmtjwwNhIxQ/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+14.49.38.png" width="320" /></a></div><div><navmeshagent><br /></navmeshagent></div><div><navmeshagent>[参考にさせていただいたサイト]</navmeshagent></div><div><br /></div><div><navmeshagent><a href="https://docs.unity3d.com/ja/2020.2/Manual/nav-MoveToClickPoint.html">マウスでクリックした位置へエージェントを移動させる</a>
</navmeshagent></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8223287026847253855.post-16175452319903528242021-07-14T12:00:00.005+09:002021-07-29T17:18:31.278+09:00#1 プロジェクト作成こんにちは!ぴちおです! <div><br /></div><div> まずは、Unityでゲームを・・ </div><div>とりあえずはUnityを動かしていきます。 </div><div><br /></div><div> インストールについては
UnityのページからHubをダウンロードしてください。 </div><div> VSCもvisual studio codeで検索してダウンロードします。 </div><div>色々拡張機能あるのでC#のとか色々調べてインストールします。(いつか記事にするかも、とりあえずググって) </div><div><br /></div><div> unity hubから新規作成
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJJgjFLvZp_PHZNYmFHpR_XvSnDO7Ze1seSKUp_dUxSqOonufOV39oAgndvZJ8rdG0_JloeYh3dqg821kjOdJZCiJzMdQaO26IQrYHjgZ0b2KQiA5ij9pL2ABQ3IXvD3PTPs1GvsHZB3I/s796/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+11.47.49.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="236" data-original-width="796" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJJgjFLvZp_PHZNYmFHpR_XvSnDO7Ze1seSKUp_dUxSqOonufOV39oAgndvZJ8rdG0_JloeYh3dqg821kjOdJZCiJzMdQaO26IQrYHjgZ0b2KQiA5ij9pL2ABQ3IXvD3PTPs1GvsHZB3I/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+11.47.49.png" width="320" /></a></div>
プロジェクトは
3Dにして名前を「rts game」で作成をクリック
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHqdf0OopDYgjlmkhyqzzsf8Xm-1qczfq4Zxmilg-Ny3TPJWOZT_nPQZri5KIZqdzK3DLQxim3b54-dMfreX2Jg790mj6Wh47jsixaEF3q3Di6snzWfxJuWtnUPy2x4LzsDDM0KajTYBs/s2044/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+11.50.13.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="1206" data-original-width="2044" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHqdf0OopDYgjlmkhyqzzsf8Xm-1qczfq4Zxmilg-Ny3TPJWOZT_nPQZri5KIZqdzK3DLQxim3b54-dMfreX2Jg790mj6Wh47jsixaEF3q3Di6snzWfxJuWtnUPy2x4LzsDDM0KajTYBs/s200/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+11.50.13.png" width="200" /></a></div>
あ、日本語・・・私は英語苦手なので、日本語にしてます。ただ、サイトの情報見ると英語が多いので英語の方が良いかもしれない
設定方法は
Unity→Preferences→Language ここで設定変更</div><div>と思ったのですが、サイトに載っている情報のほとんどが英語</div><div>また、パラメータとか変更するとき、英語じゃないとわかりづらいのでやっぱり英語環境の方が良さそう。<br />
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWl0JROb91-E48yJ2U-RkRqQDecyguV19CRV6nS9rHrQ9diZYOx-NAs1rve8Qwd-fJ0Nx4TgW5R5s5OErlBiMsvko5JJ0RmzcsxeDWaINgy7RtjEM-a7T7WiJDcWPeUSb01DxvqRy4ofw/s2048/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+11.57.29.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="1470" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWl0JROb91-E48yJ2U-RkRqQDecyguV19CRV6nS9rHrQ9diZYOx-NAs1rve8Qwd-fJ0Nx4TgW5R5s5OErlBiMsvko5JJ0RmzcsxeDWaINgy7RtjEM-a7T7WiJDcWPeUSb01DxvqRy4ofw/s200/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+11.57.29.png" width="200" /></a></div>
私は1画面で操作するので、
レイアウトはこんな感じ
<div class="separator" style="clear: both;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbkAtdZfGn050AVO378ywUeFZBKnlrzvJ_cHtOWOvH1sQLX7g1jgUsA_Qaw0fqSkPF1DGAPAB0fcdls3LRX5U2-iPTU41U3csIgADjt2x6tmVH1hA_uwGGByaXzbYmWISaSL9eUfIg2D8/s2048/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+11.53.12.png" style="display: block; padding: 1em 0px; text-align: center;"><img alt="" border="0" data-original-height="1280" data-original-width="2048" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbkAtdZfGn050AVO378ywUeFZBKnlrzvJ_cHtOWOvH1sQLX7g1jgUsA_Qaw0fqSkPF1DGAPAB0fcdls3LRX5U2-iPTU41U3csIgADjt2x6tmVH1hA_uwGGByaXzbYmWISaSL9eUfIg2D8/s200/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+2021-07-14+11.53.12.png" width="200" /></a></div>
</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8223287026847253855.post-57930509588893746652021-07-14T11:39:00.001+09:002021-07-14T14:52:38.290+09:00初心者がUnityでRTS風ゲームを作るこんにちは!ぴちおです。 <div><br /></div><div> 最終目標UnityでRTSゲームを作る! </div><div><br /></div><div>目操作は
<b>AOS的なRTS</b> </div><div> ただ、unity初心者なので、調べながら、苦戦しながらコツコツレベルアップしていく予定。 </div><div>なので、記事には間違いや、非効率的なものが上がりますが</div><div> あくまで個人的な備忘録です。 </div><div><br /></div><div> なお、過去にPCスペックが低すぎてUnityを断念しました。 </div><div>もし、開発するならある程度のスペックがないと辛いです。 </div><div><br /></div><div> 以下私の開発環境 </div><div> mac book air M1 メモリ16gb </div><div>unity 2020.3.12f1 </div><div>C#エディタ:vsc 1.57.1</div>Unknownnoreply@blogger.com0