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

<channel>
	<title>Unity2D入門（シリーズ） | 怪獣の2Dアクションゲーム制作開発記</title>
	<atom:link href="https://naiterukaiju.com/category/unity2d%E3%82%B2%E3%83%BC%E3%83%A0%E5%88%B6%E4%BD%9C/feed/" rel="self" type="application/rss+xml" />
	<link>https://naiterukaiju.com</link>
	<description>Unityでゲームを作る方法を初心者目線で発信👾</description>
	<lastBuildDate>Sun, 19 Apr 2026 13:06:18 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://naiterukaiju.com/wp-content/uploads/2025/09/cropped-Enemy-32x32.png</url>
	<title>Unity2D入門（シリーズ） | 怪獣の2Dアクションゲーム制作開発記</title>
	<link>https://naiterukaiju.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【Unity入門⑮】歩行に合わせて背景をスクロールさせよう！</title>
		<link>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ae%e3%80%91%e6%ad%a9%e8%a1%8c%e3%81%ab%e5%90%88%e3%82%8f%e3%81%9b%e3%81%a6%e8%83%8c%e6%99%af%e3%82%92%e3%82%b9%e3%82%af%e3%83%ad%e3%83%bc%e3%83%ab%e3%81%95/</link>
					<comments>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ae%e3%80%91%e6%ad%a9%e8%a1%8c%e3%81%ab%e5%90%88%e3%82%8f%e3%81%9b%e3%81%a6%e8%83%8c%e6%99%af%e3%82%92%e3%82%b9%e3%82%af%e3%83%ad%e3%83%bc%e3%83%ab%e3%81%95/#respond</comments>
		
		<dc:creator><![CDATA[怪獣]]></dc:creator>
		<pubDate>Tue, 17 Feb 2026 13:45:31 +0000</pubDate>
				<category><![CDATA[Unity2D入門（シリーズ）]]></category>
		<category><![CDATA[2Dゲーム]]></category>
		<category><![CDATA[background]]></category>
		<category><![CDATA[Unity]]></category>
		<category><![CDATA[Unity初心者]]></category>
		<category><![CDATA[アクションゲーム]]></category>
		<category><![CDATA[ゲーム制作]]></category>
		<category><![CDATA[スクロール]]></category>
		<category><![CDATA[マップ]]></category>
		<category><![CDATA[画像]]></category>
		<category><![CDATA[背景]]></category>
		<guid isPermaLink="false">https://naiterukaiju.com/?p=723</guid>

					<description><![CDATA[前回の記事では、ゴールに触れたらゲームクリアUIを表示させる方法を解説しました。 今回は歩行に合わせて背景画像をスクロールさせる方法 を解説します！ 背景があるだけでよりゲームらしさがグッと増して、世界観が一気に広がりま [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>こんにちは！夜の街2Dアクションゲームを制作中の怪獣です🦖</p>
</div></div>



<p>前回の記事では、ゴールに触れたらゲームクリアUIを表示させる方法を解説しました。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-prev">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ad%e3%80%91%e3%82%b4%e3%83%bc%e3%83%ab%e3%81%ab%e8%a7%a6%e3%82%8c%e3%81%9f%e3%82%89%e3%82%b2%e3%83%bc%e3%83%a0%e3%82%af%e3%83%aa%e3%82%a2%ef%bc%81%e3%82%b4/" title="【Unity入門⑭】ゴールに触れたらゲームクリア！ゴールUIを表示しよう" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門⑭】ゴールに触れたらゲームクリア！ゴールUIを表示しよう</div><div class="blogcard-snippet internal-blogcard-snippet">前回の記事では、落下したらゲームオーバーにさせる実装方法の解説をしました。今回は、プレイヤーがゴールオブジェクトに触れたら「ゲームクリアUI」を表示する方法を解説します。ゲームでは、「敵に当たったらゲームオーバー」、「ゴールにたどり着いたら...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.01.18</div></div></div></div></a>
</div>



<p><br><br>今回は歩行に合わせて<strong><span class="marker-under-red">背景画像をスクロールさせる方法</span></strong> を解説します！<br><br>背景があるだけでよりゲームらしさがグッと増して、世界観が一気に広がりますよね！<br>ただ背景を用意するだけではプレイヤーが移動した際に背景画像が置いてきぼりになってしまうので、<br><strong>歩行に合わせて背景をスクロール</strong>させるようにします！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">この記事でやること</a></li><li><a href="#toc2" tabindex="0">① 背景オブジェクトを作成する</a><ol><li><a href="#toc3" tabindex="0">背景画像を配置する</a></li><li><a href="#toc4" tabindex="0">Sorting Layer を追加する</a></li><li><a href="#toc5" tabindex="0">レイヤーの描画順番を設定する</a></li><li><a href="#toc6" tabindex="0">背景の位置を調整する</a></li></ol></li><li><a href="#toc7" tabindex="0">②背景の子オブジェクトを作成（左側用・右側用）</a><ol><li><a href="#toc8" tabindex="0">Left / Right に背景画像を複製する</a></li></ol></li><li><a href="#toc9" tabindex="0">③背景スクロール用スクリプトを作成</a><ol><li><a href="#toc10" tabindex="0">各処理の説明：なにをしている？</a></li><li><a href="#toc11" tabindex="0">Start() で初期値を準備</a></li><li><a href="#toc12" tabindex="0">FixedUpdate() で一定間隔で実行</a></li><li><a href="#toc13" tabindex="0"> _Parallax() が本体（視差＋ループ）</a></li><li><a href="#toc14" tabindex="0">画像が途切れない“無限ループ”判定</a></li></ol></li><li><a href="#toc15" tabindex="0">④ Unity上で設定する</a></li><li><a href="#toc16" tabindex="0">動作確認</a></li><li><a href="#toc17" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">この記事でやること</span></h2>



<p>✅ 背景オブジェクトを作る<br>✅ 背景スクロール用スクリプトを作る<br>✅ プレイヤーの動きに合わせて背景を動かす</p>



<video
  src="https://naiterukaiju.com/wp-content/uploads/2026/02/無題のビデオ-‐-Clipchampで作成-13.mp4"
  autoplay
  loop
  muted
  playsinline
  width="640"
  height="360">
</video



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc2">① 背景オブジェクトを作成する</span></h2>



<p>まずは背景画像をHierarchy上に配置していきます！</p>



<p>⇩背景画像はこちらを使用しています</p>





<a rel="noopener" href="https://assetstore.unity.com/packages/2d/environments/free-2d-cartoon-parallax-background-205812" title="Free 2D Cartoon Parallax Background | 2D Environments | Unity Asset Store" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/cocoon-resources/blog-card-cache/2cb07b9ade205805b0080e2164502598.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Free 2D Cartoon Parallax Background | 2D Environments | Unity Asset Store</div><div class="blogcard-snippet external-blogcard-snippet">Elevate your workflow with the Free 2D Cartoon Parallax Background asset from CPasteGame. Find this &amp; more Environments ...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://assetstore.unity.com/packages/2d/environments/free-2d-cartoon-parallax-background-205812" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">assetstore.unity.com</div></div></div></div></a>




<h3 class="wp-block-heading"><span id="toc3">背景画像を配置する</span></h3>



<p>１．Hierarchyに背景画像をドラッグする</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="488" src="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-35-1.png" alt="背景画像をドラッグ" class="wp-image-731" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-35-1.png 1000w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-35-1-300x146.png 300w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-35-1-768x375.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<p>２．各背景の名前を変更します</p>



<p>（ここではSky、Cloud、Mountainにします。）</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="369" src="https://naiterukaiju.com/wp-content/uploads/2026/02/image-5-1024x369.png" alt="背景の名前を変更" class="wp-image-733" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/image-5-1024x369.png 1024w, https://naiterukaiju.com/wp-content/uploads/2026/02/image-5-300x108.png 300w, https://naiterukaiju.com/wp-content/uploads/2026/02/image-5-768x277.png 768w, https://naiterukaiju.com/wp-content/uploads/2026/02/image-5-1536x554.png 1536w, https://naiterukaiju.com/wp-content/uploads/2026/02/image-5.png 1914w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc4">Sorting Layer を追加する</span></h3>



<p>2Dゲームでは、<br>画像の<strong>表示の前後関係は Sorting Layer で管理します。</strong></p>



<p>■ Sorting Layer を作る手順</p>



<ol class="wp-block-list">
<li>背景オブジェクトを選択</li>



<li>Inspector → SpriteRenderer</li>



<li>Sorting Layer → Add Sorting Layer&#8230;</li>
</ol>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="470" src="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-36-1.png" alt="Add Sorting Layerを選択" class="wp-image-735" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-36-1.png 1000w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-36-1-300x141.png 300w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-36-1-768x361.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<p>すると以下画面が開きます。<br>＋ボタンクリックし、新しいレイヤー名<span class="marker-under-red"><strong>BG</strong>（background）を追加</span><span class="marker-under-red">します。</span><br><span class="marker-under-red">追加したレイヤーを一番上に持ってきて、<strong>Layer0に</strong>なるようにします。</span></p>



<p>レイヤーは上にあるほど<strong>「奥」</strong>の扱いになります。<br>今回は背景画像なので、一番奥に設定します！</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="428" height="363" src="https://naiterukaiju.com/wp-content/uploads/2026/02/スクリーンショット-2026-02-15-201212.png" alt="レイヤーの設定" class="wp-image-737" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/スクリーンショット-2026-02-15-201212.png 428w, https://naiterukaiju.com/wp-content/uploads/2026/02/スクリーンショット-2026-02-15-201212-300x254.png 300w" sizes="(max-width: 428px) 100vw, 428px" /></figure>



<p>追加したら、<strong><span class="marker-under-red">それぞれの背景オブジェクト全て</span></strong><span class="marker-under-red">に（Sky、Cloud、Mountain、Mountain2）のSorting LayerにBGを設定</span>します。</p>



<p><strong>Sorting Layer ：BG</strong></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="492" src="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-37-1.png" alt="BGの設定" class="wp-image-741" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-37-1.png 1000w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-37-1-300x148.png 300w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-37-1-768x378.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc5">レイヤーの描画順番を設定する</span></h3>



<p>このままだと背景の描画順が同じレベルになっており、全て表示が出来ていないので、<br>お絵描きソフトのレイヤー機能のように、画像の描画順番を設定します！<br><br>以下のように設定します。<br>■レイヤー順<br>①山<br>　∟②山２<br>　　∟③雲<br>　　　∟④空<br>①←　レイヤーが手前　レイヤーが奥→④</p>



<ul class="wp-block-list">
<li>Sky
<ul class="wp-block-list">
<li>Order in Layer：-4</li>
</ul>
</li>



<li>Cloud
<ul class="wp-block-list">
<li>Order in Layer：-3</li>
</ul>
</li>



<li>Mountain
<ul class="wp-block-list">
<li>Order in Layer：-2</li>
</ul>
</li>



<li>Mountain2
<ul class="wp-block-list">
<li>Order in Layer：-1</li>
</ul>
</li>
</ul>



<p></p>



<h3 class="wp-block-heading"><span id="toc6">背景の位置を調整する</span></h3>



<p>Inspector の Transform を以下のように調整します。</p>



<ul class="wp-block-list">
<li>Position：<code>(0, 0, 0)</code>（まずは0でOK）</li>



<li>Scale：必要に応じて調整（背景が画面に合うように）</li>
</ul>



<h2 class="wp-block-heading"><span id="toc7">②背景の子オブジェクトを作成（左側用・右側用）</span></h2>



<p>①で背景を作成した状態のままだと、画像の端っこに移動した際に背景が足りなくて見切れてしまうため、更に拡大していきます。<br>ここで、<span class="marker-under-red"><strong>①で作った親の背景オブジェクトに対して、子オブジェクトを作成</strong></span>します。<br>背景オブジェクトの下に <strong>左右の背景</strong> を子として持たせておくことで、後で「無限スクロール」に拡張しやすくなります。</p>



<h3 class="wp-block-heading"><span id="toc8">Left / Right に背景画像を複製する</span></h3>



<p>①で作成した背景を親オブジェクトとし、親に対して子オブジェクトを複製します。<br><br>■Skyオブジェクトの作成例</p>



<ol class="wp-block-list">
<li>いまシーン上にあるSkyオブジェクトをコピペして、<br> Skyオブジェクト配下に子として２つ複製する</li>



<li>片方を <code>Left</code>、もう片方を <code>Right</code> と命名</li>



<li><strong>Left</strong>
<ul class="wp-block-list">
<li>Postion：40に変更（※各自の画像サイズに要調整）</li>
</ul>
</li>



<li><code><strong>Right</strong></code>
<ul class="wp-block-list">
<li>Postion：40に変更（※各自の画像サイズに要調整）</li>
</ul>
</li>
</ol>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>こうすることで、 左右に背景が拡張されます！ <br>また、親オブジェクトからコピペして貼り付けることで、①で設定した<strong>Sorting Layer </strong>、<strong>Order in Layer</strong>の設定を引き継いだ状態にすることができます✨</p>
</blockquote>



<p>■<strong>Left</strong>の設定</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="493" src="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-39-2.png" alt="子オブジェクトの設定（Left）" class="wp-image-745" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-39-2.png 1000w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-39-2-300x148.png 300w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-39-2-768x379.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<p>■<strong><code><strong>Right</strong></code></strong>の設定</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="486" src="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-38-2.png" alt="子オブジェクトの設定（right）" class="wp-image-744" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-38-2.png 1000w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-38-2-300x146.png 300w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-38-2-768x373.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<p>■設定後のScene画面↓</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="208" src="https://naiterukaiju.com/wp-content/uploads/2026/02/image-6-1024x208.png" alt="背景全体" class="wp-image-752" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/image-6-1024x208.png 1024w, https://naiterukaiju.com/wp-content/uploads/2026/02/image-6-300x61.png 300w, https://naiterukaiju.com/wp-content/uploads/2026/02/image-6-768x156.png 768w, https://naiterukaiju.com/wp-content/uploads/2026/02/image-6-1536x312.png 1536w, https://naiterukaiju.com/wp-content/uploads/2026/02/image-6.png 1609w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p><strong><span class="marker-under-red">同じように、Sky、Cloud、Mountain、Mountain2も子として複製します。</span></strong></p>



<h2 class="wp-block-heading"><span id="toc9">③背景スクロール用スクリプトを作成</span></h2>



<ol class="wp-block-list">
<li>Projectビューで右クリック</li>



<li>Create → C# Script</li>



<li>名前を <code>BackgroundScroller</code>.csにします</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BackgroundScroller : MonoBehaviour
{
    // Range：最小値と最大値を決めれる
    &#91;SerializeField, Header("視差効果"), Range(0, 1)&#93;
    private float _parallaxEffect;

    private GameObject _camera;
    private float _length;
    private float _startPosX;

    // Start is called before the first frame update
    void Start()
    {
        _startPosX = transform.position.x;
        // 画像の横幅のサイズを取得
        _length = GetComponent&lt;SpriteRenderer>().bounds.size.x;
        _camera = Camera.main.gameObject;

    }

    // Unity上のメソッド
    // 設定した一定時間で実行されるメソッド
    private void FixedUpdate()
    {
        _Parallax();
    }

    private void _Parallax()
    {
        // カメラとの距離を代入
        float temp = _camera.transform.position.x * (1 - _parallaxEffect);
        float dist = _camera.transform.position.x * _parallaxEffect;

        transform.position = new Vector3(_startPosX + dist, transform.position.y, transform.position.z);

        // カメラとの距離が画像の横幅分離れたら位置をカメラの座標に移動させることで
        // 画像が途切れずにループしているように見える
        if (temp > _startPosX + _length)
        {
            _startPosX += _length;
        }
        else if (temp &lt; _startPosX - _length)
        {
            _startPosX -= _length;
        }
    }
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">System</span><span style="color: #D4D4D4">.Collections;</span></span>
<span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">System</span><span style="color: #D4D4D4">.Collections.Generic;</span></span>
<span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">UnityEngine</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #9CDCFE">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">BackgroundScroller</span><span style="color: #D4D4D4"> : </span><span style="color: #4EC9B0">MonoBehaviour</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// Range：最小値と最大値を決めれる</span></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">, </span><span style="color: #DCDCAA">Header</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;視差効果&quot;</span><span style="color: #D4D4D4">), </span><span style="color: #DCDCAA">Range</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">)&#93;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_parallaxEffect</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">GameObject</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_camera</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_length</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_startPosX</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// Start is called before the first frame update</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Start</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_startPosX</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 画像の横幅のサイズを取得</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_length</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">GetComponent</span><span style="color: #D4D4D4">&lt;</span><span style="color: #4EC9B0">SpriteRenderer</span><span style="color: #D4D4D4">&gt;().</span><span style="color: #9CDCFE">bounds</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">size</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_camera</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">Camera</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">main</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">gameObject</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// Unity上のメソッド</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// 設定した一定時間で実行されるメソッド</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">FixedUpdate</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">_Parallax</span><span style="color: #D4D4D4">();</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">_Parallax</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// カメラとの距離を代入</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">temp</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_camera</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4"> * (</span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> - </span><span style="color: #9CDCFE">_parallaxEffect</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">dist</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_camera</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4"> * </span><span style="color: #9CDCFE">_parallaxEffect</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Vector3</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_startPosX</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">dist</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">z</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// カメラとの距離が画像の横幅分離れたら位置をカメラの座標に移動させることで</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 画像が途切れずにループしているように見える</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">temp</span><span style="color: #D4D4D4"> &gt; </span><span style="color: #9CDCFE">_startPosX</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">_length</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">_startPosX</span><span style="color: #D4D4D4"> += </span><span style="color: #9CDCFE">_length</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">else</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">temp</span><span style="color: #D4D4D4"> &lt; </span><span style="color: #9CDCFE">_startPosX</span><span style="color: #D4D4D4"> - </span><span style="color: #9CDCFE">_length</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">_startPosX</span><span style="color: #D4D4D4"> -= </span><span style="color: #9CDCFE">_length</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc10">各処理の説明：なにをしている？</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&#91;SerializeField, Header("視差効果"), Range(0, 1)&#93;
private float _parallaxEffect;
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">&#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">, </span><span style="color: #DCDCAA">Header</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;視差効果&quot;</span><span style="color: #D4D4D4">), </span><span style="color: #DCDCAA">Range</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">)&#93;</span></span>
<span class="line"><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_parallaxEffect</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span></code></pre></div>



<ul class="wp-block-list">
<li><code>SerializeField</code>：Unity上のInspectorで数値をいじれるようにします</li>



<li><code>Header</code>：Inspector上に見出しを出す</li>



<li><code>Range(0,1)</code>：スライダーで <strong>0〜1</strong> の範囲で調整できるようにする</li>
</ul>



<p>✅ これにより「背景がどれくらいカメラについてくるか（視差）」をスライダーで調整できます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc11">Start() で初期値を準備</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>_startPosX = transform.position.x;
_length = GetComponent&lt;SpriteRenderer>().bounds.size.x;
_camera = Camera.main.gameObject;
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">_startPosX</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #9CDCFE">_length</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">GetComponent</span><span style="color: #D4D4D4">&lt;</span><span style="color: #4EC9B0">SpriteRenderer</span><span style="color: #D4D4D4">&gt;().</span><span style="color: #9CDCFE">bounds</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">size</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #9CDCFE">_camera</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">Camera</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">main</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">gameObject</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span></code></pre></div>



<h4 class="wp-block-heading"><code>_startPosX</code></h4>



<p>背景の「基準となる開始位置X」です。<br>あとでループ処理で、この基準を <strong>横幅分ずらす</strong>のに使います。</p>



<h4 class="wp-block-heading"><code>_length</code></h4>



<p><code>SpriteRenderer.bounds.size.x</code> で <strong>背景画像の“ワールド上の横幅”</strong> を取得します。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>重要：ここで取っているのは「ピクセル数」ではなく<br><strong>Unity空間（ワールド座標）の幅</strong>です。<br>（Pixels Per Unit の設定により値は変わります）</p>
</blockquote>



<h4 class="wp-block-heading"><code>_camera</code></h4>



<p><code>Camera.main</code> は「MainCameraタグが付いたカメラ」を取ってきます。<br>背景は <strong>カメラの位置を基準に動く</strong>ので参照が必要です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc12">FixedUpdate() で一定間隔で実行</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>private void FixedUpdate()
{
    _Parallax();
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">FixedUpdate</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #DCDCAA">_Parallax</span><span style="color: #D4D4D4">();</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<p><code>FixedUpdate</code> は <strong>一定時間ごと</strong>に呼ばれる更新関数です。<br>（主に物理計算のタイミング）</p>



<p>このコードでは背景移動を <code>FixedUpdate</code> に載せています。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>背景は物理ではないので、一般的には <code>LateUpdate</code> でもOKです。<br>ただ「カメラがRigidbodyで動く」などの場合は FixedUpdate 運用もアリです。</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc13"> _Parallax() が本体（視差＋ループ）</span></h3>



<h4 class="wp-block-heading">カメラ位置から2つの値を作る</h4>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>float temp = _camera.transform.position.x * (1 - _parallaxEffect);
float dist = _camera.transform.position.x * _parallaxEffect;
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">temp</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_camera</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4"> * (</span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4"> - </span><span style="color: #9CDCFE">_parallaxEffect</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">dist</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_camera</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4"> * </span><span style="color: #9CDCFE">_parallaxEffect</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span></code></pre></div>



<p>ここが最重要です。</p>



<ul class="wp-block-list">
<li><code>dist</code>：<strong>背景を動かす量（視差ぶん）</strong></li>



<li><code>temp</code>：<strong>ループ判定に使う量</strong></li>
</ul>



<p><code>_parallaxEffect</code> が 0.3 なら、</p>



<ul class="wp-block-list">
<li>dist = カメラX * 0.3（背景はカメラの30%だけ動く）</li>



<li>temp = カメラX * 0.7（残り側の値）</li>
</ul>



<p>という形になります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h4 class="wp-block-heading">背景を実際に動かす</h4>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>transform.position = new Vector3(_startPosX + dist, transform.position.y, transform.position.z);
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Vector3</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_startPosX</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">dist</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">z</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span></code></pre></div>



<p>背景のX座標を</p>



<ul class="wp-block-list">
<li><strong>開始位置 <code>_startPosX</code></strong></li>



<li><strong>視差分 <code>dist</code></strong></li>
</ul>



<p>で決めています。</p>



<p>つまり、</p>



<p>✅ カメラが右に動く<br>✅ 背景も右に動くけど、<code>_parallaxEffect</code> が小さいほどゆっくり<br>→ 「奥行きがある」ように見える</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc14">画像が途切れない“無限ループ”判定</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>if (temp > _startPosX + _length)
{
    _startPosX += _length;
}
else if (temp &lt; _startPosX - _length)
{
    _startPosX -= _length;
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">temp</span><span style="color: #D4D4D4"> &gt; </span><span style="color: #9CDCFE">_startPosX</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">_length</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">_startPosX</span><span style="color: #D4D4D4"> += </span><span style="color: #9CDCFE">_length</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"><span style="color: #C586C0">else</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">temp</span><span style="color: #D4D4D4"> &lt; </span><span style="color: #9CDCFE">_startPosX</span><span style="color: #D4D4D4"> - </span><span style="color: #9CDCFE">_length</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">_startPosX</span><span style="color: #D4D4D4"> -= </span><span style="color: #9CDCFE">_length</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<p>ここは「背景がカメラから一定距離離れたら、基準位置を横幅分ずらす」処理です。</p>



<ul class="wp-block-list">
<li>カメラが進み続けると、背景はいつか端が見えてしまう</li>



<li>そこで、背景の“基準位置” <code>_startPosX</code> を <strong>横幅 <code>_length</code> 分だけ移動</strong></li>



<li>結果、背景が途切れずループしているように見えます</li>
</ul>



<p>この「基準位置をずらす」方式は、見た目が自然で便利です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc15">④ Unity上で設定する</span></h2>



<p><code>「Sky、Cloud、Mountain、Mountain2」</code> をまとめて選択し、Add Componentをクリックし③で作成した<strong>BackgroundScroller.cs</strong>を適用します。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="622" src="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-40-1.png" alt="BackgroundScroller.csの適用" class="wp-image-746" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-40-1.png 1000w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-40-1-300x187.png 300w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-40-1-768x478.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc16">動作確認</span></h2>



<video
  src="https://naiterukaiju.com/wp-content/uploads/2026/02/無題のビデオ-‐-Clipchampで作成-13.mp4"
  autoplay
  loop
  muted
  playsinline
  width="640"
  height="360">
</video



<p>➡️背景が歩行に合わせて少しずつ移動しているのが分かりますね‼️</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc17">まとめ</span></h2>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>最後まで読んでいただきありがとうございました！</p>
</div></div>



<p>この記事が少しでもゲーム制作のお役に立てたらうれしいです🦖</p>



<p>今回やったこと：</p>



<p>✔ 背景オブジェクト作成<br>✔ スクリプト作成<br>✔ プレイヤーの動きに合わせてスクロール</p>



<p>これだけでゲームの完成度が一気に上がりますね！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ae%e3%80%91%e6%ad%a9%e8%a1%8c%e3%81%ab%e5%90%88%e3%82%8f%e3%81%9b%e3%81%a6%e8%83%8c%e6%99%af%e3%82%92%e3%82%b9%e3%82%af%e3%83%ad%e3%83%bc%e3%83%ab%e3%81%95/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://naiterukaiju.com/wp-content/uploads/2026/02/無題のビデオ-‐-Clipchampで作成-13.mp4" length="17910695" type="video/mp4" />

			</item>
		<item>
		<title>【Unity入門⑭】ゴールに触れたらゲームクリア！ゴールUIを表示しよう</title>
		<link>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ad%e3%80%91%e3%82%b4%e3%83%bc%e3%83%ab%e3%81%ab%e8%a7%a6%e3%82%8c%e3%81%9f%e3%82%89%e3%82%b2%e3%83%bc%e3%83%a0%e3%82%af%e3%83%aa%e3%82%a2%ef%bc%81%e3%82%b4/</link>
					<comments>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ad%e3%80%91%e3%82%b4%e3%83%bc%e3%83%ab%e3%81%ab%e8%a7%a6%e3%82%8c%e3%81%9f%e3%82%89%e3%82%b2%e3%83%bc%e3%83%a0%e3%82%af%e3%83%aa%e3%82%a2%ef%bc%81%e3%82%b4/#respond</comments>
		
		<dc:creator><![CDATA[怪獣]]></dc:creator>
		<pubDate>Sun, 18 Jan 2026 11:14:56 +0000</pubDate>
				<category><![CDATA[Unity2D入門（シリーズ）]]></category>
		<category><![CDATA[2Dゲーム]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[Unity]]></category>
		<category><![CDATA[Unity初心者]]></category>
		<category><![CDATA[アクションゲーム]]></category>
		<category><![CDATA[クリア]]></category>
		<category><![CDATA[ゲームクリア]]></category>
		<category><![CDATA[ゲーム制作]]></category>
		<category><![CDATA[ゴール]]></category>
		<category><![CDATA[リスタート]]></category>
		<category><![CDATA[判定]]></category>
		<guid isPermaLink="false">https://naiterukaiju.com/?p=633</guid>

					<description><![CDATA[前回の記事では、落下したらゲームオーバーにさせる実装方法の解説をしました。 今回は、プレイヤーがゴールオブジェクトに触れたら「ゲームクリアUI」を表示する方法を解説します。 ゲームでは、「敵に当たったらゲームオーバー」、 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>こんにちは！夜の街2Dアクションゲームを制作中の怪獣です🦖</p>
</div></div>



<p>前回の記事では、落下したらゲームオーバーにさせる実装方法の解説をしました。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-prev">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ac%e3%80%91%e8%90%bd%e4%b8%8b%e3%81%97%e3%81%9f%e3%82%89%e3%82%b2%e3%83%bc%e3%83%a0%e3%82%aa%e3%83%bc%e3%83%90%e3%83%bc%ef%bc%81%e3%82%b2%e3%83%bc%e3%83%a0/" title="【Unity入門⑬】落下したらゲームオーバー！ゲームオーバーUIを表示させよう" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門⑬】落下したらゲームオーバー！ゲームオーバーUIを表示させよう</div><div class="blogcard-snippet internal-blogcard-snippet">前回の記事では、ゲーム開始時にBGMをつける方法の解説しました！今回は「プレイヤーがマップから落下したら、ゲームオーバーUIを表示する」実装方法を解説します。落下判定は2Dアクションでよく使う定番ギミックです。ミスしたかが分かりやすくなるの...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.01.10</div></div></div></div></a>
</div>



<p>今回は、<br><strong>プレイヤーがゴールオブジェクトに触れたら<span class="marker-under-red">「ゲームクリアUI」を表示する方法</span></strong><br>を解説します。</p>



<p>ゲームでは、<br>「敵に当たったらゲームオーバー」、「ゴールにたどり着いたらゲームクリア」という流れが基本になりますよね。</p>



<p>この記事では、</p>



<ul class="wp-block-list">
<li><strong><span class="marker-under-red">ゲームクリアUIの作成</span></strong></li>



<li><strong><span class="marker-under-red">Playerがゴールに触れたかどうか判定させる処理をつくる</span></strong></li>



<li><strong><span class="marker-under-red">MainManagerでUIを表示させる処理をつくる</span></strong></li>



<li><strong><span class="marker-under-red">SPACEキーを押すとシーンを最初からやり直す</span></strong></li>
</ul>



<p>という流れで<strong>作成～表示</strong>させるところまで解説を進めていきます！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">この記事でやること</a></li><li><a href="#toc2" tabindex="0">① ゲームクリアUIを作成しよう</a><ol><li><a href="#toc3" tabindex="0">Canvas を作成する</a></li><li><a href="#toc4" tabindex="0">GameClearPanel を作る</a></li><li><a href="#toc5" tabindex="0">テキストを配置する</a></li><li><a href="#toc6" tabindex="0">最初は非表示にする</a></li></ol></li><li><a href="#toc7" tabindex="0">②MainManager に 処理を追加する</a><ol><li><a href="#toc8" tabindex="0">各処理の解説</a></li></ol></li><li><a href="#toc9" tabindex="0">③ゴールオブジェクトを作る</a><ol><li><a href="#toc10" tabindex="0">ゴール用オブジェクトを作成</a></li><li><a href="#toc11" tabindex="0">「Goal」タグを追加して設定する</a></li></ol></li><li><a href="#toc12" tabindex="0">④Player.csにゴールの当たり判定処理を作る</a><ol><li><a href="#toc13" tabindex="0">各処理の解説</a></li></ol></li><li><a href="#toc14" tabindex="0">動作確認</a></li><li><a href="#toc15" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">この記事でやること</span></h2>



<ul class="wp-block-list">
<li><strong>ゲームをクリアしたときのUIを作成する</strong></li>



<li><strong>ゴールオブジェクトを作成する</strong></li>



<li><strong>Playerがゴールに触れたらゲームクリアUIを表示させる</strong></li>



<li><strong>SPACEキーを押すと最初からスタート</strong></li>
</ul>



<video
  src="https://naiterukaiju.com/wp-content/uploads/2026/01/サンプルゲーム-SampleScene-Windows-Mac-Linux-Unity-2021.3.6f1-Personal-_DX11_-2026-01-18-20-03-18.mp4"
  autoplay
  loop
  muted
  playsinline
  width="640"
  height="360">
</video



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc2">① ゲームクリアUIを作成しよう</span></h2>



<p>まずはUIの土台となる<strong>Canvas</strong>を作ります。</p>



<p><strong>Canvas（キャンバス）とは、一言でいうと<br>Unityで「UIを表示するための土台（画面）」です。</strong></p>



<p>テキスト、ボタン、パネルなどの <strong>UI要素は、必ず Canvas の子オブジェクトとして配置されます。</strong></p>



<h3 class="wp-block-heading"><span id="toc3">Canvas を作成する</span></h3>



<ol class="wp-block-list">
<li>Hierarchy を右クリック</li>



<li><strong>UI → Canvas</strong>を追加</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc4">GameClearPanel を作る</span></h3>



<p>クリア時に画面に表示させるベースとなるパネルを作ります。</p>



<ol class="wp-block-list">
<li>Canvas の子に <strong>UI → Panel</strong> を作成する</li>



<li>名前を <code>GameClearPanel</code> に変更</li>



<li>背景色を半透明の黒にするのがおすすめです（Colorで調整）</li>
</ol>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="381" src="https://naiterukaiju.com/wp-content/uploads/2026/01/↑作成したUIをドラッグする-19.png" alt="GameClearPanel の設定画面" class="wp-image-642" srcset="https://naiterukaiju.com/wp-content/uploads/2026/01/↑作成したUIをドラッグする-19.png 1000w, https://naiterukaiju.com/wp-content/uploads/2026/01/↑作成したUIをドラッグする-19-300x114.png 300w, https://naiterukaiju.com/wp-content/uploads/2026/01/↑作成したUIをドラッグする-19-768x293.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc5">テキストを配置する</span></h3>



<p>クリア時に画面に表示させる文字を作ります。</p>



<ol class="wp-block-list">
<li>GameClearPanel の子に <strong>UI → Text (TextMeshPro)</strong>を追加</li>



<li>テキストを <code>GAME CLEAR!!</code> などに変更</li>



<li>中央寄せ・大きめフォントに調整する</li>
</ol>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="378" src="https://naiterukaiju.com/wp-content/uploads/2026/01/↑作成したUIをドラッグする-20-1.png" alt="ゲームクリア時のテキスト設定" class="wp-image-644" srcset="https://naiterukaiju.com/wp-content/uploads/2026/01/↑作成したUIをドラッグする-20-1.png 1000w, https://naiterukaiju.com/wp-content/uploads/2026/01/↑作成したUIをドラッグする-20-1-300x113.png 300w, https://naiterukaiju.com/wp-content/uploads/2026/01/↑作成したUIをドラッグする-20-1-768x290.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<p>必要であれば</p>



<ul class="wp-block-list">
<li>「次へ」ボタン</li>



<li>「タイトルへ戻る」ボタン</li>
</ul>



<p>を追加してもOKです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc6">最初は非表示にする</span></h3>



<ul class="wp-block-list">
<li><code>GameClearPanel</code> の<br><strong><span class="marker-under-red">チェックを外して非アクティブ</span></strong>にしてください。（ゲーム開始時に表示されてしまうため）</li>
</ul>



<h2 class="wp-block-heading"><span id="toc7">②MainManager に 処理を追加する</span></h2>



<p>次に、 <code>MainManager</code>に以下の処理を作成します。（コピペOK！）</p>



<ul class="wp-block-list">
<li><strong>ゲームクリア時のUIを表示させる処理</strong></li>



<li><strong>SPACEキーを押すとシーンを最初からやり直す処理</strong></li>
</ul>



<p>MainManager は主に以下のような役割をします。</p>



<ul class="wp-block-list">
<li><strong>ゲーム全体の状態管理する</strong></li>



<li><strong>UI の表示・非表示を制御など</strong></li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>using UnityEngine;

public class MainManager : MonoBehaviour
{
    &#91;Header("UI参照")&#93;
    &#91;SerializeField&#93; private GameObject _gameClearPanel;
    
    private bool _isGameClear = false;

    private void Awake()
    {
        // 念のため起動時は非表示
        _gameClearPanel.SetActive(false);
    }
    
    void Update()
    {
        // ゲームクリア後、SPACEキーが押されたらリスタート
        if (_isGameClear &amp;&amp; Input.GetKeyDown(KeyCode.Space))
        {
            RestartScene();
        }
    }

    // ゲームクリアUIを表示する
    public void ShowGameClearUI()
    {
        _gameClearPanel.SetActive(true);
        _isGameClear = true;
    }
    
    // シーンを最初から読み直す
    private void RestartScene()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().name);
    }
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">UnityEngine</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #9CDCFE">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">MainManager</span><span style="color: #D4D4D4"> : </span><span style="color: #4EC9B0">MonoBehaviour</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #DCDCAA">Header</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;UI参照&quot;</span><span style="color: #D4D4D4">)&#93;</span></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">&#93; </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">GameObject</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_gameClearPanel</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">bool</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_isGameClear</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">false</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Awake</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 念のため起動時は非表示</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_gameClearPanel</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">SetActive</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">false</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">    </span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Update</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// ゲームクリア後、SPACEキーが押されたらリスタート</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_isGameClear</span><span style="color: #D4D4D4"> &amp;&amp; </span><span style="color: #9CDCFE">Input</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">GetKeyDown</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">KeyCode</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">Space</span><span style="color: #D4D4D4">))</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #DCDCAA">RestartScene</span><span style="color: #D4D4D4">();</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// ゲームクリアUIを表示する</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">ShowGameClearUI</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_gameClearPanel</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">SetActive</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">true</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_isGameClear</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">true</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">    </span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// シーンを最初から読み直す</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">RestartScene</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">SceneManager</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">LoadScene</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">SceneManager</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">GetActiveScene</span><span style="color: #D4D4D4">().</span><span style="color: #9CDCFE">name</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc8">各処理の解説</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&#91;SerializeField&#93; private GameObject _gameClearPanel;
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">&#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">&#93; </span><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">GameObject</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_gameClearPanel</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span></code></pre></div>



<ul class="wp-block-list">
<li>SerializeFieldを定義してUnity上のInspector から設定できるようにしています</li>
</ul>



<p>上記を定義したら、以下のようにUnity上から①で作成した<strong>GameClearPanel</strong>を<strong><span class="marker-under-red">ドラッグ＆ドロップ</span></strong>してください！</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="529" src="https://naiterukaiju.com/wp-content/uploads/2026/01/↑作成したUIをドラッグする-25.png" alt="GameClearPanelをドラッグ" class="wp-image-766" srcset="https://naiterukaiju.com/wp-content/uploads/2026/01/↑作成したUIをドラッグする-25.png 1000w, https://naiterukaiju.com/wp-content/uploads/2026/01/↑作成したUIをドラッグする-25-300x159.png 300w, https://naiterukaiju.com/wp-content/uploads/2026/01/↑作成したUIをドラッグする-25-768x406.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>private bool _isGameClear = false;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">bool</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_isGameClear</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">false</span><span style="color: #D4D4D4">;</span></span></code></pre></div>



<p><strong>ゲームクリア状態かどうか</strong>判断するようのフラグです。<br>後の処理で、ゲームクリアしている状態（true）だったら<strong>SPACEキーを受け付ける</strong>ようにしています。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>private void Awake()
{
    _gameClearPanel.SetActive(false);
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Awake</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">_gameClearPanel</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">SetActive</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">false</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<p>Awake は「シーンが始まった瞬間」に必ず1回だけ呼ばれます💡</p>



<ul class="wp-block-list">
<li>シーン起動時に <strong>必ず非表示に</strong>する</li>



<li>こうするとInspector 設定ミスを防げる</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>private void Update()
{
    if (_isGameClear &amp;&amp; Input.GetKeyDown(KeyCode.Space))
    {
        RestartScene();
    }
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Update</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_isGameClear</span><span style="color: #D4D4D4"> &amp;&amp; </span><span style="color: #9CDCFE">Input</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">GetKeyDown</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">KeyCode</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">Space</span><span style="color: #D4D4D4">))</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">RestartScene</span><span style="color: #D4D4D4">();</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<p>Updateは<strong>毎フレーム</strong>呼ばれます。</p>



<ul class="wp-block-list">
<li>キー入力は <strong>毎フレーム監視</strong>する必要がある</li>



<li>ゲームクリア後だけ受付するように条件を付けています</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>private void RestartScene()
{
    SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">RestartScene</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">SceneManager</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">LoadScene</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">SceneManager</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">GetActiveScene</span><span style="color: #D4D4D4">().</span><span style="color: #9CDCFE">name</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<ul class="wp-block-list">
<li>今開いているシーン名を取得</li>



<li>そのシーンを再ロード</li>
</ul>



<p>➡️ <strong>「最初からスタート」＝シーンを再読み込み</strong>ということをしています。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>public void ShowGameClearUI()
{
    _gameClearPanel.SetActive(true);
    _isGameClear = true;
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">ShowGameClearUI</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">_gameClearPanel</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">SetActive</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">true</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">_isGameClear</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">true</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<ul class="wp-block-list">
<li>ゲームクリア時に呼ばれる（Player側で判断します）</li>



<li>UI を表示するだけのシンプルな責務</li>



<li><strong>_isGameClear</strong>をtrueに更新し、クリア状態にしている</li>
</ul>



<p>他にもこのあとに</p>



<ul class="wp-block-list">
<li>SE 再生</li>



<li>BGM 停止</li>



<li>フェード演出</li>
</ul>



<p>を追加する場合も、ここに書けばOKです！</p>



<h2 class="wp-block-heading"><span id="toc9">③ゴールオブジェクトを作る</span></h2>



<h3 class="wp-block-heading"><span id="toc10">ゴール用オブジェクトを作成</span></h3>



<ul class="wp-block-list">
<li> Hierarchyで「2Dオブジェクト → Sprite → Square」を作成する（名前はGoalにする）</li>



<li>Add Componentでコンポーネントを追加
<ul class="wp-block-list">
<li><code><strong>BoxCollider2D</strong></code> などの Collider2D<strong> </strong>を追加</li>



<li><strong>Rigidbody2D</strong>（物理挙動を持たせておく）
<ul class="wp-block-list">
<li>Body Typeは<strong>Static</strong>にしておきます（オブジェクトが動かないようにするため）</li>
</ul>
</li>
</ul>
</li>



<li><strong>Sprite Renderer</strong>タブで<strong>「Sprite」</strong>にゴール用の画像をドラッグする</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="468" src="https://naiterukaiju.com/wp-content/uploads/2026/01/↑作成したUIをドラッグする-21-1.png" alt="Goalの設定画面" class="wp-image-649" srcset="https://naiterukaiju.com/wp-content/uploads/2026/01/↑作成したUIをドラッグする-21-1.png 1000w, https://naiterukaiju.com/wp-content/uploads/2026/01/↑作成したUIをドラッグする-21-1-300x140.png 300w, https://naiterukaiju.com/wp-content/uploads/2026/01/↑作成したUIをドラッグする-21-1-768x359.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<h3 class="wp-block-heading"><span id="toc11">「Goal」タグを追加して設定する</span></h3>



<ol class="wp-block-list">
<li>Inspector の <strong>Tag</strong> からAdd Tagを押す</li>



<li>「＋」ボタンで<code><strong>Goal</strong></code> タグを追加する</li>
</ol>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="490" height="273" src="https://naiterukaiju.com/wp-content/uploads/2026/01/image.png" alt="Goal タグの追加" class="wp-image-652" srcset="https://naiterukaiju.com/wp-content/uploads/2026/01/image.png 490w, https://naiterukaiju.com/wp-content/uploads/2026/01/image-300x167.png 300w, https://naiterukaiju.com/wp-content/uploads/2026/01/image-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2026/01/image-160x90.png 160w" sizes="(max-width: 490px) 100vw, 490px" /></figure>



<p><code>Goal</code> タグを追加したらゴールオブジェクトに設定してください。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="569" height="274" src="https://naiterukaiju.com/wp-content/uploads/2026/01/↑作成したUIをドラッグする-24.png" alt="Goal タグの設定" class="wp-image-653" srcset="https://naiterukaiju.com/wp-content/uploads/2026/01/↑作成したUIをドラッグする-24.png 569w, https://naiterukaiju.com/wp-content/uploads/2026/01/↑作成したUIをドラッグする-24-300x144.png 300w" sizes="(max-width: 569px) 100vw, 569px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc12">④Player.csにゴールの当たり判定処理を作る</span></h2>



<p>次に、<strong>プレイヤーがゴールに触れたことを検知する処理</strong>を<code>OnCollisionEnter2D</code>メソッド内に作成します。</p>



<p><code>OnCollisionEnter2D</code> は<br><strong>Collider2D 同士が接触した瞬間に呼ばれるUnityの共通メソッド</strong>です。</p>



<p>今回のように、「敵に当たった」「ゴールに触れた」といった判定をすることが出来ます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>public class Player : MonoBehaviour
{
    
    private void OnCollisionEnter2D(Collision2D collision)
    {
        // 敵に触れたときの処理
        if (collision.gameObject.CompareTag("Enemy"))
        {
            _HitEnemy(collision.gameObject);
        }
        // 追加
        // ゴールに触れたときの処理 
        else if (collision.gameObject.tag == "Goal")
        {
            FindObjectOfType&lt;MainManager>().ShowGameClearUI();

            // プレイヤーを非アクティブにする
            enabled = false;
            GetComponent&lt;PlayerInput>().enabled = false;
        }
    }
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">Player</span><span style="color: #D4D4D4"> : </span><span style="color: #4EC9B0">MonoBehaviour</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    </span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">OnCollisionEnter2D</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">Collision2D</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">collision</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 敵に触れたときの処理</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">collision</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">gameObject</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">CompareTag</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Enemy&quot;</span><span style="color: #D4D4D4">))</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #DCDCAA">_HitEnemy</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">collision</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">gameObject</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 追加</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// ゴールに触れたときの処理 </span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">else</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">collision</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">gameObject</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">tag</span><span style="color: #D4D4D4"> == </span><span style="color: #CE9178">&quot;Goal&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #DCDCAA">FindObjectOfType</span><span style="color: #D4D4D4">&lt;</span><span style="color: #4EC9B0">MainManager</span><span style="color: #D4D4D4">&gt;().</span><span style="color: #DCDCAA">ShowGameClearUI</span><span style="color: #D4D4D4">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #6A9955">// プレイヤーを非アクティブにする</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">enabled</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">false</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #DCDCAA">GetComponent</span><span style="color: #D4D4D4">&lt;</span><span style="color: #4EC9B0">PlayerInput</span><span style="color: #D4D4D4">&gt;().</span><span style="color: #9CDCFE">enabled</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">false</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc13">各処理の解説</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>
        // ゴールに触れたときの処理 
        else if (collision.gameObject.tag == "Goal")
        {
            FindObjectOfType&lt;MainManager>().ShowGameClearUI();

            // プレイヤーを非アクティブにする
            enabled = false;
            GetComponent&lt;PlayerInput>().enabled = false;
        }</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// ゴールに触れたときの処理 </span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">else</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">collision</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">gameObject</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">tag</span><span style="color: #D4D4D4"> == </span><span style="color: #CE9178">&quot;Goal&quot;</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #DCDCAA">FindObjectOfType</span><span style="color: #D4D4D4">&lt;</span><span style="color: #4EC9B0">MainManager</span><span style="color: #D4D4D4">&gt;().</span><span style="color: #DCDCAA">ShowGameClearUI</span><span style="color: #D4D4D4">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #6A9955">// プレイヤーを非アクティブにする</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">enabled</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">false</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #DCDCAA">GetComponent</span><span style="color: #D4D4D4">&lt;</span><span style="color: #4EC9B0">PlayerInput</span><span style="color: #D4D4D4">&gt;().</span><span style="color: #9CDCFE">enabled</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">false</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span></code></pre></div>



<ul class="wp-block-list">
<li>tag名が<strong>&#8220;Goal&#8221;</strong>に設定されたオブジェクトに触れたか判定</li>



<li>触れた場合、シーン上に存在する <strong>MainManager を探して取得</strong>する</li>



<li><strong>ShowGameClearUI() </strong>で、ゲームクリア用の UI を<strong>MainManager </strong>から表示する</li>



<li>BGM 停止や効果音再生などもここでまとめて管理ができます</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>enabled = false;
GetComponent&lt;PlayerInput>().enabled = false;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">enabled</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">false</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #DCDCAA">GetComponent</span><span style="color: #D4D4D4">&lt;</span><span style="color: #4EC9B0">PlayerInput</span><span style="color: #D4D4D4">&gt;().</span><span style="color: #9CDCFE">enabled</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">false</span><span style="color: #D4D4D4">;</span></span></code></pre></div>



<ul class="wp-block-list">
<li>Player スクリプト自体を停止（ゴール後に操作できないようにする）</li>



<li>Update や移動処理が動かなくなる</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>ゴール後も動けてしまうと、演出が壊れてしまうため必須の処理です。</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc14">動作確認</span></h2>



<p>ゴールオブジェクトに触れて、UIを表示することができました！</p>



<video
  src="https://naiterukaiju.com/wp-content/uploads/2026/01/サンプルゲーム-SampleScene-Windows-Mac-Linux-Unity-2021.3.6f1-Personal-_DX11_-2026-01-18-20-03-18.mp4"
  autoplay
  loop
  muted
  playsinline
  width="640"
  height="360">
</video



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc15">まとめ</span></h2>



<ol class="wp-block-list">
<li>ゴールに触れたら <strong>GAME CLEAR!! UI を表示</strong></li>



<li>プレイヤー操作を停止</li>



<li><strong>SPACEキーを押すとシーンを最初からやり直す</strong></li>
</ol>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>最後まで読んでいただきありがとうございました！</p>
</div></div>



<p>これで、<strong>「遊ぶ → クリア → もう一回」</strong>という、<br><strong>ゲームとして最低限必要なループ</strong>が完成しました！</p>



<p>この記事が少しでもゲーム制作のお役に立てたら嬉しいです🦖</p>



<p>段々ゲームらしくなってきましたが、背景がまだ何も設定していなくて寂しいので<br>次回は<strong><span class="marker-under-red">背景の表示方法及び、</span><span class="marker-under-red">背景を歩行に合わせてスクロールさせる実装方法</span></strong>の解説を行う予定です！</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-next">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ae%e3%80%91%e6%ad%a9%e8%a1%8c%e3%81%ab%e5%90%88%e3%82%8f%e3%81%9b%e3%81%a6%e8%83%8c%e6%99%af%e3%82%92%e3%82%b9%e3%82%af%e3%83%ad%e3%83%bc%e3%83%ab%e3%81%95/" title="【Unity入門⑮】歩行に合わせて背景をスクロールさせよう！" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門⑮】歩行に合わせて背景をスクロールさせよう！</div><div class="blogcard-snippet internal-blogcard-snippet">前回の記事では、ゴールに触れたらゲームクリアUIを表示させる方法を解説しました。今回は歩行に合わせて背景画像をスクロールさせる方法 を解説します！背景があるだけでよりゲームらしさがグッと増して、世界観が一気に広がりますよね！ただ背景を用意す...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.02.17</div></div></div></div></a>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ad%e3%80%91%e3%82%b4%e3%83%bc%e3%83%ab%e3%81%ab%e8%a7%a6%e3%82%8c%e3%81%9f%e3%82%89%e3%82%b2%e3%83%bc%e3%83%a0%e3%82%af%e3%83%aa%e3%82%a2%ef%bc%81%e3%82%b4/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://naiterukaiju.com/wp-content/uploads/2026/01/サンプルゲーム-SampleScene-Windows-Mac-Linux-Unity-2021.3.6f1-Personal-_DX11_-2026-01-18-20-03-18.mp4" length="19472741" type="video/mp4" />

			</item>
		<item>
		<title>【Unity入門⑬】落下したらゲームオーバー！ゲームオーバーUIを表示させよう</title>
		<link>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ac%e3%80%91%e8%90%bd%e4%b8%8b%e3%81%97%e3%81%9f%e3%82%89%e3%82%b2%e3%83%bc%e3%83%a0%e3%82%aa%e3%83%bc%e3%83%90%e3%83%bc%ef%bc%81%e3%82%b2%e3%83%bc%e3%83%a0/</link>
					<comments>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ac%e3%80%91%e8%90%bd%e4%b8%8b%e3%81%97%e3%81%9f%e3%82%89%e3%82%b2%e3%83%bc%e3%83%a0%e3%82%aa%e3%83%bc%e3%83%90%e3%83%bc%ef%bc%81%e3%82%b2%e3%83%bc%e3%83%a0/#respond</comments>
		
		<dc:creator><![CDATA[怪獣]]></dc:creator>
		<pubDate>Sat, 10 Jan 2026 05:10:40 +0000</pubDate>
				<category><![CDATA[Unity2D入門（シリーズ）]]></category>
		<category><![CDATA[2Dゲーム]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[Unity]]></category>
		<category><![CDATA[Unity初心者]]></category>
		<category><![CDATA[アクションゲーム]]></category>
		<category><![CDATA[ゲームオーバー]]></category>
		<category><![CDATA[ゲーム制作]]></category>
		<category><![CDATA[落下]]></category>
		<guid isPermaLink="false">https://naiterukaiju.com/?p=565</guid>

					<description><![CDATA[前回の記事では、ゲーム開始時にBGMをつける方法の解説しました！ 今回は「プレイヤーがマップから落下したら、ゲームオーバーUIを表示する」実装方法を解説します。 落下判定は2Dアクションでよく使う定番ギミックです。ミスし [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>こんにちは！夜の街2Dアクションゲームを制作中の怪獣です🦖</p>
</div></div>



<p>前回の記事では、ゲーム開始時にBGMをつける方法の解説しました！</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-prev">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ab%e3%80%912d%e3%82%a2%e3%82%af%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%b2%e3%83%bc%e3%83%a0%e3%81%a7%e9%96%8b%e5%a7%8b%e6%99%82%e3%81%abbgm%e3%82%92%e6%b5%81%e3%81%9d/" title="【Unity入門⑫】2Dアクションゲームで開始時にBGMを流そう！" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門⑫】2Dアクションゲームで開始時にBGMを流そう！</div><div class="blogcard-snippet internal-blogcard-snippet">前回の記事では、効果音をつける方法の解説しました！今回はゲームを起動した瞬間に、 BGMを自動再生する方法を解説します。BGMが入るだけで、画面の印象やゲームの世界観が一気に引き締まり、ゲームらしさがグッと増します！BGMはゲーム全体で共通...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.01.01</div></div></div></div></a>
</div>



<p><br>今回は「プレイヤーがマップから落下したら、ゲームオーバーUIを表示する」実装方法を解説します。</p>



<p>落下判定は2Dアクションでよく使う定番ギミックです。<br><strong>ミスしたかが分かりやすくなる</strong>ので、よりゲームのテンポも良くなります！</p>



<p>この記事では、</p>



<ul class="wp-block-list">
<li><span class="marker-under-red"><strong>ゲームオーバーUIはすでに用意してある前提</strong></span></li>



<li><span class="marker-under-red"><strong>「プレイヤーがマップから落下したかどうか判定する」</strong></span></li>
</ul>



<p>という <strong>ロジック部分のみ</strong>を扱います。</p>



<p><strong>ゲームオーバーUIの作成方法自体は、すでに別記事で解説しています。</strong><br>詳しくは、先にこちらをご覧ください⬇️</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-related">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a8%e3%80%91hp%e3%81%8c0%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%9f%e3%82%89%e3%82%b2%e3%83%bc%e3%83%a0%e3%82%aa%e3%83%bc%e3%83%90%e3%83%bc%e3%81%ae%e6%bc%94%e5%87%ba/#toc4" title="【Unity入門⑨】HPが0になったらゲームオーバーの演出をさせよう" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門⑨】HPが0になったらゲームオーバーの演出をさせよう</div><div class="blogcard-snippet internal-blogcard-snippet">前回の記事で、敵に触れたらダメージを食らうHPバーを作りました。今回はプレイヤーのHPが0になったらゲームオーバになるUIを作ってみましょう！この記事では、・プレイヤーのHPが0になったら画面に「GAME OVER」、「リトライ」ボタンを表...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.10.18</div></div></div></div></a>
</div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">この記事ですること</a></li><li><a href="#toc2" tabindex="0">事前確認</a></li><li><a href="#toc3" tabindex="0">①Player.cs（落下を検知する処理だけ書く）</a></li><li><a href="#toc4" tabindex="0">②各処理の説明</a><ol><li><a href="#toc5" tabindex="0">落下ラインの設定</a></li><li><a href="#toc6" tabindex="0">MainManager を取得</a></li><li><a href="#toc7" tabindex="0">Update() で落下判定</a></li></ol></li><li><a href="#toc8" tabindex="0">なぜ「落下判定」と「ゲームオーバー処理」を分けるのか？</a></li><li><a href="#toc9" tabindex="0">落下ラインの調整方法</a></li><li><a href="#toc10" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">この記事ですること</span></h2>



<p>今回やることはシンプルで、流れはこんな感じです。</p>



<ol class="wp-block-list">
<li>プレイヤーの <strong>Y座標が一定より下</strong>になったら「落下」と判定</li>



<li>MainManager に「ゲームオーバーになった」と伝える</li>



<li>MainManager が ゲームオーバーUIを表示する</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc2">事前確認</span></h2>



<ul class="wp-block-list">
<li>「【Unity入門⑨】HPが0になったらゲームオーバーの演出をさせよう」の章を実装済である提で解説を進めています</li>



<li>ゲームオーバーUI、MainManager が既に作成済である前提で解説を進めています</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc3">①Player.cs（落下を検知する処理だけ書く）</span></h2>



<p>Player 側では<br><strong>「落ちたかどうか」だけを判断</strong>します。<br>落下判定は、<strong>一番分かりやすい Y座標チェック</strong>を使います。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>using UnityEngine;

public class Player : MonoBehaviour
{
    &#91;SerializeField&#93; private float _fallDeadLineY = -10f;

    private MainManager _mainManager;
    private bool _isDead;

    private void Start()
    {
        _mainManager = FindObjectOfType();
    }

    private void Update()
    {
        if (_isDead) return;

        if (transform.position.y &lt; _fallDeadLineY)
        {
            _isDead = true;
            _mainManager.Show();
        }
    }
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">UnityEngine</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #9CDCFE">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">Player</span><span style="color: #D4D4D4"> : </span><span style="color: #4EC9B0">MonoBehaviour</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">&#93; </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_fallDeadLineY</span><span style="color: #D4D4D4"> = -10</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">MainManager</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_mainManager</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">bool</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_isDead</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Start</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_mainManager</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">FindObjectOfType</span><span style="color: #D4D4D4">();</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Update</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_isDead</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4"> &lt; </span><span style="color: #9CDCFE">_fallDeadLineY</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">_isDead</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">true</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">_mainManager</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">Show</span><span style="color: #D4D4D4">();</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc4">②各処理の説明</span></h2>



<h3 class="wp-block-heading"><span id="toc5">落下ラインの設定</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&#91;SerializeField&#93; private float _fallDeadLineY = -10f;
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">&#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">&#93; </span><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_fallDeadLineY</span><span style="color: #D4D4D4"> = -10</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span></code></pre></div>



<ul class="wp-block-list">
<li>この Y 座標より下に行ったら<strong><span class="marker-under-red">「落下した」</span></strong>と判断するライン</li>
</ul>



<p>Inspectorから調整できるので、ステージが変わっても数値を変えるだけで対応可能！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc6">MainManager を取得</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>_mainManager = FindObjectOfType&lt;MainManager>();
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">_mainManager</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">FindObjectOfType</span><span style="color: #D4D4D4">&lt;</span><span style="color: #4EC9B0">MainManager</span><span style="color: #D4D4D4">&gt;();</span></span>
<span class="line"></span></code></pre></div>



<ul class="wp-block-list">
<li>シーン内にある MainManager を探して使えるようにしている</li>
</ul>



<p>➡️Player は<strong>「ゲームオーバーにしてほしい」と MainManager にお願いする役</strong>です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc7">Update() で落下判定</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>if (_isDead) return;
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_isDead</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span></code></pre></div>



<ul class="wp-block-list">
<li>すでに落下した後は何もしないようにしています</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>if (transform.position.y &lt; _fallDeadLineY)
{
    _isDead = true;
    _mainManager.Show();
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4"> &lt; </span><span style="color: #9CDCFE">_fallDeadLineY</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">_isDead</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">true</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">_mainManager</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">Show</span><span style="color: #D4D4D4">();</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<ol class="wp-block-list">
<li>プレイヤーの現在位置を取得</li>



<li>Y座標が落下ライン（Inspectorで設定したもの）より下かチェック</li>



<li>下ならゲームオーバー<br>という流れです。</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc8">なぜ「落下判定」と「ゲームオーバー処理」を分けるのか？</span></h2>



<p>ここが設計上大事なポイントです。</p>



<ul class="wp-block-list">
<li>Player<br> ➡️<strong>「落ちたかどうか」を判断するだけ</strong></li>



<li>MainManager<br> ➡️<strong>「ゲームオーバーにする」責任だけを持つ</strong></li>
</ul>



<p>こうしておくと、</p>



<ul class="wp-block-list">
<li>HPが0になった</li>



<li>トゲに当たった</li>



<li>制限時間切れ</li>
</ul>



<p>なども、すべて</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>_mainManager.Show();
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">_mainManager</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">Show</span><span style="color: #D4D4D4">();</span></span>
<span class="line"></span></code></pre></div>



<p>で統一することができます🦖</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc9">落下ラインの調整方法</span></h2>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&#91;SerializeField&#93; private float _fallDeadLineY = -10f;
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">&#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">&#93; </span><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_fallDeadLineY</span><span style="color: #D4D4D4"> = -10</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span></code></pre></div>



<ul class="wp-block-list">
<li>ステージの一番下より少し低めに設定</li>



<li>Inspector から調整できるようにしておく</li>
</ul>



<p>これだけで、<br><strong>ステージごとの微調整がとても楽</strong>になります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc10">まとめ</span></h2>



<ul class="wp-block-list">
<li>今回は <strong>「ゲームオーバーにする条件」だけ</strong>を実装</li>



<li>ゲームオーバー処理は MainManager に集約すると拡張しやすい</li>
</ul>



<p>この記事では、「プレイヤーがマップから落下したかどうか判定する」方法について解説しました。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>最後まで読んでいただきありがとうございました！</p>
</div></div>



<p>この記事が少しでもゲーム制作に役立てたら嬉しいです🦖</p>



<p>次回は、<strong><span class="marker-under-red">ゴールに触れたらゲームクリアさせ、</span><span class="marker-under-red">クリア</span><span class="marker-under-red">時のUIを作成～表示させる実装方法</span></strong>の解説を行う予定です！</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-next">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ad%e3%80%91%e3%82%b4%e3%83%bc%e3%83%ab%e3%81%ab%e8%a7%a6%e3%82%8c%e3%81%9f%e3%82%89%e3%82%b2%e3%83%bc%e3%83%a0%e3%82%af%e3%83%aa%e3%82%a2%ef%bc%81%e3%82%b4/" title="【Unity入門⑭】ゴールに触れたらゲームクリア！ゴールUIを表示しよう" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門⑭】ゴールに触れたらゲームクリア！ゴールUIを表示しよう</div><div class="blogcard-snippet internal-blogcard-snippet">前回の記事では、落下したらゲームオーバーにさせる実装方法の解説をしました。今回は、プレイヤーがゴールオブジェクトに触れたら「ゲームクリアUI」を表示する方法を解説します。ゲームでは、「敵に当たったらゲームオーバー」、「ゴールにたどり着いたら...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.01.18</div></div></div></div></a>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ac%e3%80%91%e8%90%bd%e4%b8%8b%e3%81%97%e3%81%9f%e3%82%89%e3%82%b2%e3%83%bc%e3%83%a0%e3%82%aa%e3%83%bc%e3%83%90%e3%83%bc%ef%bc%81%e3%82%b2%e3%83%bc%e3%83%a0/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【Unity入門⑫】2Dアクションゲームで開始時にBGMを流そう！</title>
		<link>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ab%e3%80%912d%e3%82%a2%e3%82%af%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%b2%e3%83%bc%e3%83%a0%e3%81%a7%e9%96%8b%e5%a7%8b%e6%99%82%e3%81%abbgm%e3%82%92%e6%b5%81%e3%81%9d/</link>
					<comments>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ab%e3%80%912d%e3%82%a2%e3%82%af%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%b2%e3%83%bc%e3%83%a0%e3%81%a7%e9%96%8b%e5%a7%8b%e6%99%82%e3%81%abbgm%e3%82%92%e6%b5%81%e3%81%9d/#respond</comments>
		
		<dc:creator><![CDATA[怪獣]]></dc:creator>
		<pubDate>Thu, 01 Jan 2026 08:20:34 +0000</pubDate>
				<category><![CDATA[Unity2D入門（シリーズ）]]></category>
		<category><![CDATA[2Dゲーム]]></category>
		<category><![CDATA[BGM]]></category>
		<category><![CDATA[MainManager]]></category>
		<category><![CDATA[SE]]></category>
		<category><![CDATA[Unity]]></category>
		<category><![CDATA[Unity初心者]]></category>
		<category><![CDATA[アクションゲーム]]></category>
		<category><![CDATA[ゲーム制作]]></category>
		<category><![CDATA[音楽]]></category>
		<guid isPermaLink="false">https://naiterukaiju.com/?p=554</guid>

					<description><![CDATA[前回の記事では、効果音をつける方法の解説しました！ 今回はゲームを起動した瞬間に、 BGMを自動再生する方法を解説します。BGMが入るだけで、画面の印象やゲームの世界観が一気に引き締まり、ゲームらしさがグッと増します！  [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>こんにちは！夜の街2Dアクションゲームを制作中の怪獣です🦖</p>
</div></div>



<p>前回の記事では、効果音をつける方法の解説しました！</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-prev">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ab%e3%80%912d%e3%82%a2%e3%82%af%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%b2%e3%83%bc%e3%83%a0%e3%81%a7%e5%8a%b9%e6%9e%9c%e9%9f%b3%e3%82%92%e9%b3%b4%e3%82%89%e3%81%9d/" title="【Unity入門⑪】2Dアクションゲームで効果音を鳴らそう！" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門⑪】2Dアクションゲームで効果音を鳴らそう！</div><div class="blogcard-snippet internal-blogcard-snippet">前回の入門では「敵を踏んで倒す処理」を実装しました！今回はそのアクションに効果音（SE）を追加して、より臨場感を出していきます！具体的には、「ジャンプした時」「敵にぶつかってダメージを受けたとき」「敵を上から踏んで再ジャンプしたとき」という...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.11.17</div></div></div></div></a>
</div>



<p>今回はゲームを起動した瞬間に、 <strong><span class="marker-under-red">BGMを自動再生</span></strong>する方法を解説します。<br>BGMが入るだけで、画面の印象やゲームの世界観が一気に引き締まり、ゲームらしさがグッと増します！</p>



<p>BGMはゲーム全体で共通の要素なので、<br>今回は <strong>MainManagerで一括管理</strong>し、<strong>UnityのInspectorから設定できる形</strong>にします。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8" checked><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">この記事ですること</a></li><li><a href="#toc2" tabindex="0">① BGM用Prefabを作成する</a><ol><li><a href="#toc3" tabindex="0">BGMオブジェクトを作成</a></li><li><a href="#toc4" tabindex="0">Prefab化する</a></li></ol></li><li><a href="#toc5" tabindex="0">② MainManagerに処理を書く</a></li><li><a href="#toc6" tabindex="0">③各処理の説明（初心者向け）</a><ol><li><a href="#toc7" tabindex="0">BGMの設定、制御について</a></li><li><a href="#toc8" tabindex="0">_PlayBGM()</a></li></ol></li><li><a href="#toc9" tabindex="0">④ Unity上でBGMを設定する方法</a></li><li><a href="#toc10" tabindex="0"> 動作確認</a></li><li><a href="#toc11" tabindex="0">トラブルシューティング</a><ol><li><a href="#toc12" tabindex="0">BGMが鳴らない</a></li><li><a href="#toc13" tabindex="0">BGMが二重で鳴る</a></li></ol></li><li><a href="#toc14" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">この記事ですること</span></h2>



<ul class="wp-block-list">
<li>ゲーム開始時にBGMが自動で再生される</li>



<li>BGMは MainManager が管理する</li>



<li>BGMの設定は <strong>コードを書き換えず Inspector から変更できる</strong></li>
</ul>



<figure class="wp-block-video"><video height="480" style="aspect-ratio: 852 / 480;" width="852" controls src="https://naiterukaiju.com/wp-content/uploads/2026/01/無題のビデオ-‐-Clipchampで作成-12.mp4"></video></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc2">① BGM用Prefabを作成する</span></h2>



<h4 class="wp-block-heading">Prefabとは？</h4>



<p>ゲームオブジェクトを<strong>“部品（パーツ）”</strong>として保存したものです。<br>Prefab化すると「一括管理」できるので、調整作業がラクになります！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc3">BGMオブジェクトを作成</span></h3>



<p>Prefab化するように、まずはBGMオブジェクトを作成していきます。</p>



<p><strong>Hierarchy → Create Empty → 名前を <code>BGM</code>に変更する</strong></p>



<ul class="wp-block-list">
<li><code>AudioSource</code> を追加し、以下を設定します。</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="622" src="https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-15.png" alt="AudioSource の設定" class="wp-image-556" srcset="https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-15.png 1000w, https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-15-300x187.png 300w, https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-15-768x478.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<p><code>AudioSource</code>は以下を設定します。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>項目</th><th>設定</th></tr></thead><tbody><tr><td>AudioClip（再生する音声ファイルを指定）</td><td>使用したいBGMをドラッグする</td></tr><tr><td>Play On Awake（オブジェクトが生成された瞬間に自動再生するか）</td><td>✅ ON</td></tr><tr><td>Loop（音を繰り返し再生するか）</td><td>✅ ON</td></tr><tr><td>Volume（音量）</td><td>0.2〜0.5（好み）</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc4">Prefab化する</span></h3>



<p>Hierarchy の <code>BGM</code> を Project ウィンドウへドラッグして Prefab にします。<br>Prefab化したら、<strong>シーン上の BGM オブジェクトは削除してOK</strong>です。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="622" src="https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-16.png" alt="Prefab化" class="wp-image-558" srcset="https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-16.png 1000w, https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-16-300x187.png 300w, https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-16-768x478.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc5">② MainManagerに処理を書く</span></h2>



<p>MainManager.csに以下の処理を書いていきます。(コピペOK！)</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>using UnityEngine;

public class MainManager : MonoBehaviour
{
    &#91;SerializeField, Header("BGM設定")&#93; private GameObject _bgmPrefab; // ← BGM を割り当て
    private static GameObject _bgmInstance;

    private void Awake()
    {
        // BGM開始
        _PlayBGM();
    }

    private void _PlayBGM()
    {
        // すでにBGMが生成されている場合は何もしない
        if (_bgmInstance != null) return;

        // BGMを生成（Prefab側の Play On Awake で再生される）こ
        _bgmInstance = Instantiate(_bgmPrefab);

        // シーンをまたいでもBGMを維持したい場合
        DontDestroyOnLoad(_bgmInstance);
    }
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">UnityEngine</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #9CDCFE">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">MainManager</span><span style="color: #D4D4D4"> : </span><span style="color: #4EC9B0">MonoBehaviour</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">, </span><span style="color: #DCDCAA">Header</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;BGM設定&quot;</span><span style="color: #D4D4D4">)&#93; </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">GameObject</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_bgmPrefab</span><span style="color: #D4D4D4">; </span><span style="color: #6A9955">// ← BGM を割り当て</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">static</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">GameObject</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_bgmInstance</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Awake</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// BGM開始</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">_PlayBGM</span><span style="color: #D4D4D4">();</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">_PlayBGM</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// すでにBGMが生成されている場合は何もしない</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_bgmInstance</span><span style="color: #D4D4D4"> != </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// BGMを生成（Prefab側の Play On Awake で再生される）こ</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_bgmInstance</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">Instantiate</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_bgmPrefab</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// シーンをまたいでもBGMを維持したい場合</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">DontDestroyOnLoad</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_bgmInstance</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc6">③各処理の説明（初心者向け）</span></h2>



<h3 class="wp-block-heading"><span id="toc7">BGMの設定、制御について</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&#91;SerializeField, Header("BGM設定")&#93;
private GameObject _bgmPrefab;
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">&#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">, </span><span style="color: #DCDCAA">Header</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;BGM設定&quot;</span><span style="color: #D4D4D4">)&#93;</span></span>
<span class="line"><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">GameObject</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_bgmPrefab</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span></code></pre></div>



<ul class="wp-block-list">
<li><strong>Unity上のInspectorに表示するための属性</strong></li>



<li>Unity上の設定で、①でPrefabしたBGMをドラッグします</li>
</ul>



<p>Inspectorでは次のように表示されます⬇️</p>



<pre class="wp-block-code"><code>MainManager
 └ BGM設定
     └ Bgm Prefab
</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>private static GameObject _bgmInstance;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">static</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">GameObject</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_bgmInstance</span><span style="color: #D4D4D4">;</span></span></code></pre></div>



<p>この変数は、<strong>今、BGMがすでに存在しているか？</strong>を覚えておくためのものです。<br>後に説明していますが、この情報を持たせておくことで<span class="marker-under-red"><strong>BGMの二重再生防止</strong></span>ができます。<br>また、<strong>static</strong>にすることで以下の設定をすることができます。</p>



<ul class="wp-block-list">
<li>新しい MainManager が作られても参照できるようになる</li>



<li>シーンが変わっても値が保持される（シーンをまたいでもBGMを維持したい場合）</li>
</ul>



<h3 class="wp-block-heading"><span id="toc8">_PlayBGM()</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>if (_bgmInstance != null) return;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_bgmInstance</span><span style="color: #D4D4D4"> != </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4">;</span></span></code></pre></div>



<p>すでにBGMが存在していたら、何もしないということをしています。</p>



<ul class="wp-block-list">
<li>BGMが鳴っている状態で</li>



<li>もう一度生成するのを防ぐ</li>
</ul>



<p><strong>これで二重再生を防止するようにしています。</strong></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>_bgmInstance = Instantiate(_bgmPrefab);</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">_bgmInstance</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">Instantiate</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_bgmPrefab</span><span style="color: #D4D4D4">);</span></span></code></pre></div>



<p>BGMのPrefabを生成して、変数に保存しています。</p>



<ul class="wp-block-list">
<li>Prefabを実体化</li>



<li>生成されたオブジェクトを <code>_bgmInstance</code> に代入</li>
</ul>



<p>これで、<strong>「今鳴っているBGMはこれだ」</strong>と MainManager が把握できるようになります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>DontDestroyOnLoad(_bgmInstance);</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">DontDestroyOnLoad</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_bgmInstance</span><span style="color: #D4D4D4">);</span></span></code></pre></div>



<p>シーンが切り替わっても、このBGMを消さない、ということをしています。</p>



<ul class="wp-block-list">
<li>リトライ</li>



<li>ステージ切り替え</li>



<li>タイトル → ゲーム</li>
</ul>



<p>でも <strong>同じBGMを鳴らし続けたい場合</strong> に使います。</p>



<p>※ シーンごとにBGMを変えたい場合は、この行を削除 or 制御を変えます。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc9">④ Unity上でBGMを設定する方法</span></h2>



<ol class="wp-block-list">
<li>Hierarchyで <strong>MainManager</strong> を選択する</li>



<li>Inspectorの「<strong>BGM設定</strong>」欄を確認</li>



<li><code>Bgm Prefab</code> に<br>作成した <strong>BGM.prefab</strong> を<strong>ドラッグ＆ドロップ</strong>します</li>
</ol>



<p>これで設定完了です✨<br><strong>コードを触らずにBGMを差し替え可能</strong>になります。</p>



<h2 class="wp-block-heading"><span id="toc10"> 動作確認</span></h2>



<figure class="wp-block-video"><video height="480" style="aspect-ratio: 852 / 480;" width="852" controls src="https://naiterukaiju.com/wp-content/uploads/2026/01/無題のビデオ-‐-Clipchampで作成-12.mp4"></video></figure>



<p>➡️BGMを入れることで一気にゲームの世界観が出ますね！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc11">トラブルシューティング</span></h2>



<p>上手くいかない場合は以下を見直してみてください。</p>



<h3 class="wp-block-heading"><span id="toc12">BGMが鳴らない</span></h3>



<ul class="wp-block-list">
<li>Inspectorで <code>_bgmPrefab</code> が未設定になっている</li>



<li>AudioSource の <code>Play On Awake</code> が OFFのまま</li>



<li>AudioClip が未設定になっている</li>
</ul>



<h3 class="wp-block-heading"><span id="toc13">BGMが二重で鳴る</span></h3>



<ul class="wp-block-list">
<li><code>static GameObject _bgmInstance</code> が無い</li>



<li><code>DontDestroyOnLoad</code> を使っているのに<br>別シーンにも MainManager が存在している</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc14">まとめ</span></h2>



<ul class="wp-block-list">
<li>BGMは MainManager で管理するのがわかりやすい</li>



<li>SerializeField + Header を使うと Inspector から設定できる</li>



<li>Prefab化 + Instantiate で柔軟なBGM再生が可能</li>



<li>static管理で二重再生を防ぐ</li>
</ul>



<p>この記事では<strong>ゲーム開始時に</strong>BGMを自動再生させる方法を解説しました。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>最後まで読んでいただきありがとうございました！</p>
</div></div>



<p>この記事が少しでもゲーム制作に役立てたら嬉しいです🦖<br><br>次回の記事では、「プレイヤーがマップから落下したら、ゲームオーバーUIを表示する」実装方法を解説していきます！</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-next">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ac%e3%80%91%e8%90%bd%e4%b8%8b%e3%81%97%e3%81%9f%e3%82%89%e3%82%b2%e3%83%bc%e3%83%a0%e3%82%aa%e3%83%bc%e3%83%90%e3%83%bc%ef%bc%81%e3%82%b2%e3%83%bc%e3%83%a0/" title="【Unity入門⑬】落下したらゲームオーバー！ゲームオーバーUIを表示させよう" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門⑬】落下したらゲームオーバー！ゲームオーバーUIを表示させよう</div><div class="blogcard-snippet internal-blogcard-snippet">前回の記事では、ゲーム開始時にBGMをつける方法の解説しました！今回は「プレイヤーがマップから落下したら、ゲームオーバーUIを表示する」実装方法を解説します。落下判定は2Dアクションでよく使う定番ギミックです。ミスしたかが分かりやすくなるの...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.01.10</div></div></div></div></a>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ab%e3%80%912d%e3%82%a2%e3%82%af%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%b2%e3%83%bc%e3%83%a0%e3%81%a7%e9%96%8b%e5%a7%8b%e6%99%82%e3%81%abbgm%e3%82%92%e6%b5%81%e3%81%9d/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://naiterukaiju.com/wp-content/uploads/2026/01/無題のビデオ-‐-Clipchampで作成-12.mp4" length="524567" type="video/mp4" />

			</item>
		<item>
		<title>【Unity入門⑪】2Dアクションゲームで効果音を鳴らそう！</title>
		<link>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ab%e3%80%912d%e3%82%a2%e3%82%af%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%b2%e3%83%bc%e3%83%a0%e3%81%a7%e5%8a%b9%e6%9e%9c%e9%9f%b3%e3%82%92%e9%b3%b4%e3%82%89%e3%81%9d/</link>
					<comments>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ab%e3%80%912d%e3%82%a2%e3%82%af%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%b2%e3%83%bc%e3%83%a0%e3%81%a7%e5%8a%b9%e6%9e%9c%e9%9f%b3%e3%82%92%e9%b3%b4%e3%82%89%e3%81%9d/#respond</comments>
		
		<dc:creator><![CDATA[怪獣]]></dc:creator>
		<pubDate>Mon, 17 Nov 2025 14:18:16 +0000</pubDate>
				<category><![CDATA[Unity2D入門（シリーズ）]]></category>
		<category><![CDATA[2Dゲーム]]></category>
		<category><![CDATA[SE]]></category>
		<category><![CDATA[Unity]]></category>
		<category><![CDATA[Unity初心者]]></category>
		<category><![CDATA[アクション]]></category>
		<category><![CDATA[ゲーム制作]]></category>
		<category><![CDATA[ジャンプ]]></category>
		<category><![CDATA[ダメージ]]></category>
		<category><![CDATA[効果音]]></category>
		<category><![CDATA[敵]]></category>
		<guid isPermaLink="false">https://naiterukaiju.com/?p=422</guid>

					<description><![CDATA[前回の入門では「敵を踏んで倒す処理」を実装しました！ 今回はそのアクションに効果音（SE）を追加して、より臨場感を出していきます！具体的には、 というタイミングでSEをつけていきます！ SEの鳴らす方法方は色々あると思い [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>こんにちは！夜の街2Dアクションゲームを制作中の怪獣です🦖</p>
</div></div>



<p>前回の入門では「敵を踏んで倒す処理」を実装しました！</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-prev">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%aa%e3%80%91%e6%95%b5%e3%82%92%e8%b8%8f%e3%82%93%e3%81%a0%e3%82%89%e5%80%92%e3%81%99%e5%87%a6%e7%90%86%e3%82%92%e4%bd%9c%e3%82%8d%e3%81%86%ef%bc%81/" title="【Unity入門⑩】敵を踏んだら倒す処理を作ろう！" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門⑩】敵を踏んだら倒す処理を作ろう！</div><div class="blogcard-snippet internal-blogcard-snippet">前回は「HPが0になったらゲームオーバーの演出させる」処理を実装しました。今回は2Dアクションゲームらしく、上から踏んだら敵を倒す処理を追加します！💥この記事でやることプレイヤーが上から敵を踏むと倒す横や下からぶつかるとダメージを受ける反動...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.11.08</div></div></div></div></a>
</div>



<p><br>今回はそのアクションに<strong>効果音（SE）</strong>を追加して、より臨場感を出していきます！<br>具体的には、</p>



<ul class="wp-block-list">
<li>「ジャンプした時」</li>



<li>「敵にぶつかってダメージを受けたとき」</li>



<li>「敵を上から踏んで再ジャンプしたとき」</li>
</ul>



<p>というタイミングでSEをつけていきます！</p>



<p>SEの鳴らす方法方は色々あると思いますが、今回は<strong>AudioSource と PlayOneShot を使った、簡単にできる方法</strong>で作っていきます！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10" checked><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">この記事でやること</a></li><li><a href="#toc2" tabindex="0">①AudioSourceを追加する</a><ol><li><a href="#toc3" tabindex="0">手順</a></li></ol></li><li><a href="#toc4" tabindex="0">②効果音ファイルを準備する</a></li><li><a href="#toc5" tabindex="0">③効果音を呼び出す処理を書く</a></li><li><a href="#toc6" tabindex="0">④AudioSource、音声ファイルをアタッチする</a></li><li><a href="#toc7" tabindex="0">動作確認</a></li><li><a href="#toc8" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">この記事でやること</span></h2>



<ul class="wp-block-list">
<li>ジャンプしたときに「ピョン！」という音を出す</li>



<li>敵にぶつかってダメージを受けたときに「ダメージ音」を出す</li>



<li>敵を上から踏んで再ジャンプしたときにも効果音を出す<br><video controls="" src="https://naiterukaiju.com/wp-content/uploads/2025/11/無題のビデオ-‐-Clipchampで作成-9-1.mp4"></video></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc2">①AudioSourceを追加する</span></h2>



<p>Unityで効果音を鳴らすには、主に次の2つを使います。</p>



<ul class="wp-block-list">
<li><strong>AudioSource</strong><br>音を再生するためのコンポーネント</li>



<li><strong>AudioClip</strong><br>実際の音声データ</li>
</ul>



<p>ざっくり言うと、<strong><span class="marker-under-red">AudioClipが音のデータ、AudioSourceがその音を鳴らす再生機</span></strong>です。</p>



<h3 class="wp-block-heading"><span id="toc3">手順</span></h3>



<p>以下の手順で、<strong>AudioSourceコンポーネント</strong>を追加します！</p>



<p>１．Hierarchyでプレイヤーオブジェクトを選択する。<br>２．Inspector の <strong>Add Component</strong> をクリック</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="710" height="420" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー.png" alt="Add Componentを押す" class="wp-image-1258" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー.png 710w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー-300x177.png 300w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー-376x222.png 376w" sizes="(max-width: 710px) 100vw, 710px" /></figure>



<p>３．<strong>AudioSource</strong> を追加する</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="710" height="420" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー-1.png" alt="AudioSource の追加" class="wp-image-1259" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー-1.png 710w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー-1-300x177.png 300w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー-1-376x222.png 376w" sizes="(max-width: 710px) 100vw, 710px" /></figure>



<p>勝手にSEが再生されないように、まずはこの2つを設定値をOFFにしておくのがおすすめです！</p>



<ul class="wp-block-list">
<li><strong>Play On Awake</strong>：OFF</li>



<li><strong>Loop</strong>：OFF</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="536" height="301" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー-2.png" alt="AudioSource の設定値" class="wp-image-1260" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー-2.png 536w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー-2-300x168.png 300w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー-2-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー-2-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー-2-320x180.png 320w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー-2-376x211.png 376w" sizes="(max-width: 536px) 100vw, 536px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc4">②効果音ファイルを準備する</span></h2>



<ol class="wp-block-list">
<li>効果音を管理するフォルダを作り、その中に使用するSEファイル（.wavや.mp3）をいれます
<ul class="wp-block-list">
<li> &nbsp;<code>Assets/Audio/</code>SEなど</li>
</ul>
</li>
</ol>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="404" height="293" src="https://naiterukaiju.com/wp-content/uploads/2025/11/image-3.png" alt="効果音ファイルのフォルダ" class="wp-image-1261" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/image-3.png 404w, https://naiterukaiju.com/wp-content/uploads/2025/11/image-3-300x218.png 300w, https://naiterukaiju.com/wp-content/uploads/2025/11/image-3-376x273.png 376w" sizes="(max-width: 404px) 100vw, 404px" /></figure>



<p>今回は、ジャンプ音、ダメージ音を例に進めます！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc5">③効果音を呼び出す処理を書く</span></h2>



<p>Playerスクリプトに、効果音を鳴らす処理を書いていきます！<br>（★今回追加・・・前回入門記事から追加した処理です）</p>



<p>以下のタイミングにSEを鳴らす処理を追加します。</p>



<ul class="wp-block-list">
<li>敵を上から踏んで再ジャンプしたとき</li>



<li>敵にぶつかってダメージを受けたとき</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>using UnityEngine;
using UnityEngine.UI;
using UnityEngine.InputSystem;

public class Player : MonoBehaviour
{
    &#91;SerializeField&#93; private AudioSource _audioSource;
    &#91;SerializeField&#93; private AudioClip _jumpSE;
    &#91;SerializeField&#93; private AudioClip _damageSE;

    // 敵に触れたときの処理
    private void _HitEnemy(GameObject enemy)
    {
        // 処理省略
        // ① プレイヤーが敵の上からぶつかった場合（踏んだとき）
        if (playerBottom >= enemyTop)
        {
          // 処理省略
          // ジャンプ効果音（踏んだときも再利用OK）
            if (_jumpSE != null)
                _audioSource.PlayOneShot(_jumpSE);　// ★今回追加
        }
        // ② 横や下からぶつかった場合（ダメージを受ける）
        else
        {
            // 処理省略
            // ダメージ時の効果音を鳴らす
            if (_damageSE != null)
               audioSource.PlayOneShot(_damageSE);　// ★今回追加
        }
    }
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">UnityEngine</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">UnityEngine</span><span style="color: #D4D4D4">.UI;</span></span>
<span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">UnityEngine</span><span style="color: #D4D4D4">.InputSystem;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #9CDCFE">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">Player</span><span style="color: #D4D4D4"> : </span><span style="color: #4EC9B0">MonoBehaviour</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">&#93; </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">AudioSource</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_audioSource</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">&#93; </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">AudioClip</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_jumpSE</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">&#93; </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">AudioClip</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_damageSE</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// 敵に触れたときの処理</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">_HitEnemy</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">GameObject</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">enemy</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 処理省略</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// ① プレイヤーが敵の上からぶつかった場合（踏んだとき）</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">playerBottom</span><span style="color: #D4D4D4"> &gt;= </span><span style="color: #9CDCFE">enemyTop</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">          </span><span style="color: #6A9955">// 処理省略</span></span>
<span class="line"><span style="color: #D4D4D4">          </span><span style="color: #6A9955">// ジャンプ効果音（踏んだときも再利用OK）</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_jumpSE</span><span style="color: #D4D4D4"> != </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">                </span><span style="color: #9CDCFE">_audioSource</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">PlayOneShot</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_jumpSE</span><span style="color: #D4D4D4">);　</span><span style="color: #6A9955">// ★今回追加</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// ② 横や下からぶつかった場合（ダメージを受ける）</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">else</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #6A9955">// 処理省略</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #6A9955">// ダメージ時の効果音を鳴らす</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_damageSE</span><span style="color: #D4D4D4"> != </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">               </span><span style="color: #9CDCFE">audioSource</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">PlayOneShot</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_damageSE</span><span style="color: #D4D4D4">);　</span><span style="color: #6A9955">// ★今回追加</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<p>以下のタイミングにSEを鳴らす処理を追加します。</p>



<ul class="wp-block-list">
<li>ジャンプしたとき</li>
</ul>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>    //　ジャンプ処理
    public void _OnJump(InputAction.CallbackContext context)
    {
        // 処理省略
        // ジャンプ時の効果音を鳴らす
        if (_jumpSE != null)
        {
            _audioSource.PlayOneShot(_jumpSE);　　// ★今回追加
        }
    }</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">//　ジャンプ処理</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">_OnJump</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">InputAction</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">CallbackContext</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">context</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 処理省略</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// ジャンプ時の効果音を鳴らす</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_jumpSE</span><span style="color: #D4D4D4"> != </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">_audioSource</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">PlayOneShot</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_jumpSE</span><span style="color: #D4D4D4">);　　</span><span style="color: #6A9955">// ★今回追加</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span></code></pre></div>



<p><strong><span class="marker-under-blue">_audioSource.PlayOneShot()</span></strong>という処理で、指定した音を1回だけ再生するようにしています。<br>今回はこの <strong>PlayOneShot</strong> を使うことで、シンプルに効果音を鳴らしています！</p>



<h2 class="wp-block-heading"><span id="toc6">④AudioSource、音声ファイルをアタッチする</span></h2>



<p>このままだと音声ファイルとプログラム上が紐づいていないので、アタッチしていきます！</p>



<p>１．AudioSourceを追加済みのプレイヤーオブジェクトを選択する<br>２．Inspectorの <code>_audioSource</code> 欄に<strong>AudioSourceコンポーネントをドラッグ</strong>する</p>



<ol class="wp-block-list"></ol>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="710" height="420" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー-4.png" alt="AudioSourceコンポーネントをドラッグ" class="wp-image-1267" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー-4.png 710w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー-4-300x177.png 300w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー-4-376x222.png 376w" sizes="(max-width: 710px) 100vw, 710px" /></figure>



<p>３．ソース上で定義した「JumpSE」、「_damageSE」に、音声ファイルをそれぞれドラッグします</p>



<ol class="wp-block-list"></ol>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="710" height="420" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー-5.png" alt="音声ファイルをドラッグ" class="wp-image-1268" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー-5.png 710w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー-5-300x177.png 300w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！のコピーのコピー-5-376x222.png 376w" sizes="(max-width: 710px) 100vw, 710px" /></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>ここまで設定すれば全て完了です！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc7">動作確認</span></h2>



<p>ゲームを再生し、動作確認する</p>



<figure class="wp-block-video"><video height="480" style="aspect-ratio: 852 / 480;" width="852" controls src="https://naiterukaiju.com/wp-content/uploads/2025/11/無題のビデオ-‐-Clipchampで作成-9-1.mp4"></video></figure>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>条件</th><th>動作</th></tr></thead><tbody><tr><td>スペースキーでジャンプ</td><td>ピョン！と音が鳴る</td></tr><tr><td>敵に上から当たる</td><td>敵が消えてジャンプ音</td></tr><tr><td>敵に横から当たる</td><td>HPバーが減ってダメージ音</td></tr></tbody></table></figure>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>効果音をつけることでより2Dアクションゲームらしさが出てきました！</p>
</div></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc8">まとめ</span></h2>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>最後まで読んでいただきありがとうございました！</p>
</div></div>



<p>今回は、Unityで効果音を鳴らす基本として、PlayOneShot を使った方を紹介しました。<br>効果音を追加すると、ジャンプやダメージなどの動きがわかりやすくなり、ゲームらしさも一気にアップします！<br>まずは今回の方法でシンプルに音を鳴らせるようになっておくと、今後ほかの効果音も追加しやすくなります！<br><br>この記事が少しでもゲーム制作のお役に立てたら嬉しいです🦖<br>次回の記事では、ゲーム内<strong>で<span class="marker-under-red">BGMを自動再生</span></strong>する方法を解説します！</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-next">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ab%e3%80%912d%e3%82%a2%e3%82%af%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%b2%e3%83%bc%e3%83%a0%e3%81%a7%e9%96%8b%e5%a7%8b%e6%99%82%e3%81%abbgm%e3%82%92%e6%b5%81%e3%81%9d/" title="【Unity入門⑫】2Dアクションゲームで開始時にBGMを流そう！" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門⑫】2Dアクションゲームで開始時にBGMを流そう！</div><div class="blogcard-snippet internal-blogcard-snippet">前回の記事では、効果音をつける方法の解説しました！今回はゲームを起動した瞬間に、 BGMを自動再生する方法を解説します。BGMが入るだけで、画面の印象やゲームの世界観が一気に引き締まり、ゲームらしさがグッと増します！BGMはゲーム全体で共通...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.01.01</div></div></div></div></a>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ab%e3%80%912d%e3%82%a2%e3%82%af%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%b2%e3%83%bc%e3%83%a0%e3%81%a7%e5%8a%b9%e6%9e%9c%e9%9f%b3%e3%82%92%e9%b3%b4%e3%82%89%e3%81%9d/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://naiterukaiju.com/wp-content/uploads/2025/11/無題のビデオ-‐-Clipchampで作成-9-1.mp4" length="383766" type="video/mp4" />

			</item>
		<item>
		<title>【Unity入門⑩】敵を踏んだら倒す処理を作ろう！</title>
		<link>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%aa%e3%80%91%e6%95%b5%e3%82%92%e8%b8%8f%e3%82%93%e3%81%a0%e3%82%89%e5%80%92%e3%81%99%e5%87%a6%e7%90%86%e3%82%92%e4%bd%9c%e3%82%8d%e3%81%86%ef%bc%81/</link>
					<comments>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%aa%e3%80%91%e6%95%b5%e3%82%92%e8%b8%8f%e3%82%93%e3%81%a0%e3%82%89%e5%80%92%e3%81%99%e5%87%a6%e7%90%86%e3%82%92%e4%bd%9c%e3%82%8d%e3%81%86%ef%bc%81/#respond</comments>
		
		<dc:creator><![CDATA[怪獣]]></dc:creator>
		<pubDate>Sat, 08 Nov 2025 07:29:28 +0000</pubDate>
				<category><![CDATA[Unity2D入門（シリーズ）]]></category>
		<category><![CDATA[2Dゲーム]]></category>
		<category><![CDATA[Unity]]></category>
		<category><![CDATA[Unity初心者]]></category>
		<category><![CDATA[アクションゲーム]]></category>
		<category><![CDATA[ゲーム制作]]></category>
		<category><![CDATA[倒し方]]></category>
		<category><![CDATA[倒す]]></category>
		<category><![CDATA[敵]]></category>
		<guid isPermaLink="false">https://naiterukaiju.com/?p=371</guid>

					<description><![CDATA[前回は「HPが0になったらゲームオーバーの演出させる」処理を実装しました。 今回は2Dアクションゲームらしく、上から踏んだら敵を倒す処理を追加します！💥 目次 この記事でやること処理の流れPlayer.cs に踏みつけ処 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>こんにちは！夜の街2Dアクションゲームを制作中の怪獣です🦖</p>
</div></div>



<p>前回は「HPが0になったらゲームオーバーの演出させる」処理を実装しました。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-prev">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a8%e3%80%91hp%e3%81%8c0%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%9f%e3%82%89%e3%82%b2%e3%83%bc%e3%83%a0%e3%82%aa%e3%83%bc%e3%83%90%e3%83%bc%e3%81%ae%e6%bc%94%e5%87%ba/" title="【Unity入門⑨】HPが0になったらゲームオーバーの演出をさせよう" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門⑨】HPが0になったらゲームオーバーの演出をさせよう</div><div class="blogcard-snippet internal-blogcard-snippet">前回の記事で、敵に触れたらダメージを食らうHPバーを作りました。今回はプレイヤーのHPが0になったらゲームオーバになるUIを作ってみましょう！この記事では、・プレイヤーのHPが0になったら画面に「GAME OVER」、「リトライ」ボタンを表...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.10.18</div></div></div></div></a>
</div>



<p><br>今回は2Dアクションゲームらしく、<strong>上から踏んだら敵を倒す処理</strong>を追加します！💥</p>



<video
  src="https://naiterukaiju.com/wp-content/uploads/2025/11/無題のビデオ-‐-Clipchampで作成-8.mp4"
  autoplay
  loop
  muted
  playsinline
  width="640"
  height="360">
</video>



<hr class="wp-block-separator has-alpha-channel-opacity"/>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-12" checked><label class="toc-title" for="toc-checkbox-12">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">この記事でやること</a></li><li><a href="#toc2" tabindex="0">処理の流れ</a></li><li><a href="#toc3" tabindex="0">Player.cs に踏みつけ処理を追加する</a></li><li><a href="#toc4" tabindex="0">処理の解説</a><ol><li><a href="#toc5" tabindex="0">OnCollisionEnter2D</a></li><li><a href="#toc6" tabindex="0">プレイヤーと敵の高さを取得</a></li><li><a href="#toc7" tabindex="0">上から踏んだかどうかを判定</a></li><li><a href="#toc8" tabindex="0">踏んだ場合の処理</a></li><li><a href="#toc9" tabindex="0">横や下から当たった場合</a></li></ol></li><li><a href="#toc10" tabindex="0">敵オブジェクトの設定</a></li><li><a href="#toc11" tabindex="0">動作確認</a></li><li><a href="#toc12" tabindex="0">よくあるつまずきポイント💡</a></li><li><a href="#toc13" tabindex="0">まとめ✅</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">この記事でやること</span></h2>



<ul class="wp-block-list">
<li>プレイヤーが上から敵を踏むと倒す</li>



<li>横や下からぶつかるとダメージを受ける</li>



<li>反動で小さくジャンプする</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc2">処理の流れ</span></h2>



<ol class="wp-block-list">
<li><strong>敵との当たり判定</strong>を取得する</li>



<li><strong>プレイヤーと敵の高さ</strong>を比べる</li>



<li>プレイヤーが上にいたら「踏んだ」と判定して敵を消す</li>



<li>横や下から当たった場合はダメージを受ける</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc3">Player.cs に踏みつけ処理を追加する</span></h2>



<p>以下のコードを Player.cs に追加します。（コピペOK！）</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Enemy"))
        {
            _HitEnemy(collision.gameObject);
        }
    }
    // 敵に触れたときの処理
    private void _HitEnemy(GameObject enemy)
    {
        // プレイヤーと敵の高さを取得
        float halfScaleY = transform.localScale.y / 2.0f;
        float enemyHalfScaleY = enemy.transform.lossyScale.y / 2.0f;

        // プレイヤーの「足元の高さ」
        float playerBottom = transform.position.y - (halfScaleY - 0.1f);
        // 敵の「頭の高さ」
        float enemyTop = enemy.transform.position.y + (enemyHalfScaleY - 0.1f);

        // ① プレイヤーが敵の上からぶつかった場合（踏んだとき）
        if (playerBottom >= enemyTop)
        {
            // 敵を削除
            Destroy(enemy);

            // 上方向にジャンプして反動表現
            _rigid.velocity = new Vector2(_rigid.velocity.x, 0f); // 一度落下速度をリセット
            _rigid.AddForce(Vector2.up * _jumpSpeed * 0.7f, ForceMode2D.Impulse);

            // （オプション）ジャンプ音などの効果音を鳴らす
            // Instantiate(_jumpSE);

            Debug.Log("敵を踏んで倒した！");
        }
        // ② 横や下からぶつかった場合（ダメージを受ける）
        else
        {
            Debug.Log("敵にぶつかってダメージ！");

            _TakeDamage(1); // HPを減らす
        }
    }g.Log("敵を踏んで倒した！");
    }
    // ② 横や下からぶつかった場合（ダメージを受ける）
    else
    {
        Debug.Log("敵にぶつかってダメージ！");
        _TakeDamage(1); // HPを減らす処理
    }
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">OnCollisionEnter2D</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">Collision2D</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">collision</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">collision</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">gameObject</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">CompareTag</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Enemy&quot;</span><span style="color: #D4D4D4">))</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #DCDCAA">_HitEnemy</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">collision</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">gameObject</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// 敵に触れたときの処理</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">_HitEnemy</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">GameObject</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">enemy</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// プレイヤーと敵の高さを取得</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">halfScaleY</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">localScale</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4"> / 2.0</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">enemyHalfScaleY</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">enemy</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">lossyScale</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4"> / 2.0</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// プレイヤーの「足元の高さ」</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">playerBottom</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4"> - (</span><span style="color: #9CDCFE">halfScaleY</span><span style="color: #D4D4D4"> - 0.1</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 敵の「頭の高さ」</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">enemyTop</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">enemy</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4"> + (</span><span style="color: #9CDCFE">enemyHalfScaleY</span><span style="color: #D4D4D4"> - 0.1</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// ① プレイヤーが敵の上からぶつかった場合（踏んだとき）</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">playerBottom</span><span style="color: #D4D4D4"> &gt;= </span><span style="color: #9CDCFE">enemyTop</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #6A9955">// 敵を削除</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #DCDCAA">Destroy</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">enemy</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #6A9955">// 上方向にジャンプして反動表現</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">_rigid</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">velocity</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Vector2</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_rigid</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">velocity</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4">, 0</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">); </span><span style="color: #6A9955">// 一度落下速度をリセット</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">_rigid</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">AddForce</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">Vector2</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">up</span><span style="color: #D4D4D4"> * </span><span style="color: #9CDCFE">_jumpSpeed</span><span style="color: #D4D4D4"> * 0.7</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">ForceMode2D</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">Impulse</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #6A9955">// （オプション）ジャンプ音などの効果音を鳴らす</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #6A9955">// Instantiate(_jumpSE);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">Debug</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">Log</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;敵を踏んで倒した！&quot;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// ② 横や下からぶつかった場合（ダメージを受ける）</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">else</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">Debug</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">Log</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;敵にぶつかってダメージ！&quot;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #DCDCAA">_TakeDamage</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">); </span><span style="color: #6A9955">// HPを減らす</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span><span style="color: #9CDCFE">g</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">Log</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;敵を踏んで倒した！&quot;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// ② 横や下からぶつかった場合（ダメージを受ける）</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">else</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">Debug</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">Log</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;敵にぶつかってダメージ！&quot;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">_TakeDamage</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">); </span><span style="color: #6A9955">// HPを減らす処理</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc4">処理の解説</span></h2>



<h3 class="wp-block-heading"><span id="toc5">OnCollisionEnter2D</span></h3>



<p>敵にぶつかった瞬間に呼ばれるUnityのイベント関数です。<br><code>CompareTag("Enemy")</code> で、ぶつかった相手が「敵」かどうかを判定します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc6">プレイヤーと敵の高さを取得</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>float halfScaleY = transform.localScale.y / 2.0f;
float enemyHalfScaleY = enemy.transform.lossyScale.y / 2.0f;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">halfScaleY</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">localScale</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4"> / 2.0</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">enemyHalfScaleY</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">enemy</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">lossyScale</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4"> / 2.0</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">;</span></span></code></pre></div>



<p>プレイヤーと敵の<strong>高さの半分</strong>を求めています。<br><code>localScale</code> はオブジェクトの大きさを表すため、<br>これを2で割ると「中心から端までの距離」がわかります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc7">上から踏んだかどうかを判定</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>float playerBottom = transform.position.y - (halfScaleY - 0.1f);
float enemyTop = enemy.transform.position.y + (enemyHalfScaleY - 0.1f);

if (playerBottom >= enemyTop)</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">playerBottom</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4"> - (</span><span style="color: #9CDCFE">halfScaleY</span><span style="color: #D4D4D4"> - 0.1</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">enemyTop</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">enemy</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4"> + (</span><span style="color: #9CDCFE">enemyHalfScaleY</span><span style="color: #D4D4D4"> - 0.1</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">playerBottom</span><span style="color: #D4D4D4"> &gt;= </span><span style="color: #9CDCFE">enemyTop</span><span style="color: #D4D4D4">)</span></span></code></pre></div>



<ul class="wp-block-list">
<li>プレイヤーの「足元」と敵の「頭の位置」を比較</li>



<li>プレイヤーが<strong>敵の頭より高い位置から当たった場合</strong>のみ「踏んだ」と判定します</li>
</ul>



<p><code>0.1f</code> は“ゆとり”です。<br>完全に同じ高さだと判定が曖昧になるため、少し余裕を持たせています。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc8">踏んだ場合の処理</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>Destroy(enemy);
_rigid.velocity = new Vector2(_rigid.velocity.x, 0f);
_rigid.AddForce(Vector2.up * _jumpSpeed * 0.7f, ForceMode2D.Impulse);</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">Destroy</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">enemy</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #9CDCFE">_rigid</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">velocity</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Vector2</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_rigid</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">velocity</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4">, 0</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #9CDCFE">_rigid</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">AddForce</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">Vector2</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">up</span><span style="color: #D4D4D4"> * </span><span style="color: #9CDCFE">_jumpSpeed</span><span style="color: #D4D4D4"> * 0.7</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">ForceMode2D</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">Impulse</span><span style="color: #D4D4D4">);</span></span></code></pre></div>



<ol class="wp-block-list">
<li><code>Destroy(enemy)</code> … 敵を消す</li>



<li><code>_rigid.velocity = ...</code> … 一度落下速度をリセット</li>



<li><code>_rigid.AddForce()</code> … 反動で小ジャンプ</li>
</ol>



<p>これで「踏んだ感」が出ます！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc9">横や下から当たった場合</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>_TakeDamage(1);</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #DCDCAA">_TakeDamage</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">);</span></span></code></pre></div>



<p>踏めていなければダメージを受けます。<br>HPバーが減るなど、前回の記事で作った処理が呼ばれます💡</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc10">敵オブジェクトの設定</span></h2>



<ol class="wp-block-list">
<li><strong>Tag</strong> を <code>"Enemy"</code> に設定</li>



<li><strong>Collider2D</strong> を追加（<code>IsTrigger</code> は OFF）</li>



<li><strong>Rigidbody2D</strong> は Kinematic でも可</li>



<li>プレイヤーにも Rigidbody2D と Collider2D が必要</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc11">動作確認</span></h2>



<p>ゲームを再生し、プレイヤーを左右に歩かせる</p>



<video
  src="https://naiterukaiju.com/wp-content/uploads/2025/11/無題のビデオ-‐-Clipchampで作成-8.mp4"
  autoplay
  loop
  muted
  playsinline
  width="640"
  height="360">
</video>



<p>上から踏むと小ジャンプをし、敵を倒すことが出来ました！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc12">よくあるつまずきポイント💡</span></h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>症状</th><th>原因</th><th>対策</th></tr></thead><tbody><tr><td>横からでも倒せる</td><td>敵やプレイヤーのScaleが一致していない</td><td><code>Scale</code>を1,1,1に戻す</td></tr><tr><td>踏んでも反応しない</td><td>Tagが「Enemy」になっていない</td><td>Inspectorで設定</td></tr><tr><td>踏んでも跳ねない</td><td><code>_jumpSpeed * 0.7f</code> の係数が小さい</td><td>倍率を上げる（0.9fなど）</td></tr><tr><td>当たり判定がズレる</td><td>Colliderのサイズが大きすぎる</td><td>頭側を少し小さく調整</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc13">まとめ✅</span></h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>処理</th><th>内容</th></tr></thead><tbody><tr><td>OnCollisionEnter2D</td><td>敵との接触を検知</td></tr><tr><td><code>_HitEnemy()</code></td><td>踏んだかぶつかったかを判定</td></tr><tr><td><code>Destroy(enemy)</code></td><td>踏んだら敵を消す</td></tr><tr><td><code>_TakeDamage(1)</code></td><td>横から当たったらHPを減らす</td></tr><tr><td><code>_jumpSpeed * 0.7f</code></td><td>踏んだ反動の強さを調整</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>最後まで読んでいただきありがとうございました！</p>
</div></div>



<p>次回は、<strong><span class="marker-under-red">ジャンプをしたとき、敵に触れてダメージを食らった場合の効果音を追加</span></strong>して、<br>より2Dゲームのアクション性を上げていこうと思います！</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-next">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ab%e3%80%912d%e3%82%a2%e3%82%af%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%b2%e3%83%bc%e3%83%a0%e3%81%a7%e5%8a%b9%e6%9e%9c%e9%9f%b3%e3%82%92%e9%b3%b4%e3%82%89%e3%81%9d/" title="【Unity入門⑪】2Dアクションゲームで効果音を鳴らそう！" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門⑪】2Dアクションゲームで効果音を鳴らそう！</div><div class="blogcard-snippet internal-blogcard-snippet">前回の入門では「敵を踏んで倒す処理」を実装しました！今回はそのアクションに効果音（SE）を追加して、より臨場感を出していきます！具体的には、「ジャンプした時」「敵にぶつかってダメージを受けたとき」「敵を上から踏んで再ジャンプしたとき」という...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.11.17</div></div></div></div></a>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%aa%e3%80%91%e6%95%b5%e3%82%92%e8%b8%8f%e3%82%93%e3%81%a0%e3%82%89%e5%80%92%e3%81%99%e5%87%a6%e7%90%86%e3%82%92%e4%bd%9c%e3%82%8d%e3%81%86%ef%bc%81/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://naiterukaiju.com/wp-content/uploads/2025/11/無題のビデオ-‐-Clipchampで作成-8.mp4" length="334139" type="video/mp4" />

			</item>
		<item>
		<title>【Unity入門⑨】HPが0になったらゲームオーバーの演出をさせよう</title>
		<link>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a8%e3%80%91hp%e3%81%8c0%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%9f%e3%82%89%e3%82%b2%e3%83%bc%e3%83%a0%e3%82%aa%e3%83%bc%e3%83%90%e3%83%bc%e3%81%ae%e6%bc%94%e5%87%ba/</link>
					<comments>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a8%e3%80%91hp%e3%81%8c0%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%9f%e3%82%89%e3%82%b2%e3%83%bc%e3%83%a0%e3%82%aa%e3%83%bc%e3%83%90%e3%83%bc%e3%81%ae%e6%bc%94%e5%87%ba/#respond</comments>
		
		<dc:creator><![CDATA[怪獣]]></dc:creator>
		<pubDate>Sat, 18 Oct 2025 12:55:49 +0000</pubDate>
				<category><![CDATA[Unity2D入門（シリーズ）]]></category>
		<category><![CDATA[2Dゲーム]]></category>
		<category><![CDATA[GAMEOVER]]></category>
		<category><![CDATA[HPバー]]></category>
		<category><![CDATA[RETRY]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[Unity]]></category>
		<category><![CDATA[Unity初心者]]></category>
		<category><![CDATA[アクションゲーム]]></category>
		<category><![CDATA[ゲームオーバー]]></category>
		<category><![CDATA[ゲーム制作]]></category>
		<category><![CDATA[リトライ]]></category>
		<guid isPermaLink="false">https://naiterukaiju.com/?p=303</guid>

					<description><![CDATA[前回の記事で、敵に触れたらダメージを食らうHPバーを作りました。 今回はプレイヤーのHPが0になったらゲームオーバになるUIを作ってみましょう！ この記事では、・プレイヤーのHPが0になったら画面に「GAME OVER」 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>こんにちは！夜の街2Dアクションゲームを制作中の怪獣です🦖</p>
</div></div>



<p>前回の記事で、敵に触れたらダメージを食らうHPバーを作りました。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-prev">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a7%e3%80%91%e6%95%b5%e3%81%ab%e8%a7%a6%e3%82%8c%e3%81%9f%e3%82%89%e3%83%80%e3%83%a1%e3%83%bc%e3%82%b8%ef%bc%81%e4%bd%93%e5%8a%9bui%e3%82%92%e4%bd%9c%e3%81%a3/" title="【Unity入門⑧】敵に触れたらダメージ！体力UIを作ってみよう" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門⑧】敵に触れたらダメージ！体力UIを作ってみよう</div><div class="blogcard-snippet internal-blogcard-snippet">前回の記事では、敵を作る方法を解説しました👾今回はそこから一歩進んで、プレイヤーが敵に触れたら体力が減る仕組みを作ってみましょう👾さらに、体力UI（HPバー）を画面に表示して、減っていく演出も追加します！⬇️画像のように、左上に赤いHPバー...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.10.12</div></div></div></div></a>
</div>



<p><br>今回は<strong>プレイヤーのHPが0になったらゲームオーバになるUI</strong>を作ってみましょう！<br><br>この記事では、<br>・<strong>プレイヤーのHPが0になったら画面に「GAME OVER」、「リトライ」ボタンを表示させる<br>・「リトライ」ボタン押したら初期位置にリスポーンする</strong><br>のような仕組みを解説していきます！</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-14" checked><label class="toc-title" for="toc-checkbox-14">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">完成イメージ</a></li><li><a href="#toc2" tabindex="0">① UI を用意する（Canvas）</a></li><li><a href="#toc3" tabindex="0">② MainManager.csの新規作成</a></li><li><a href="#toc4" tabindex="0">③各処理の説明</a><ol><li><a href="#toc5" tabindex="0">UI参照の変数</a></li><li><a href="#toc6" tabindex="0">ゲームオーバーの多重実行防止</a></li><li><a href="#toc7" tabindex="0">Awake() の役割</a></li><li><a href="#toc8" tabindex="0">Show() メソッド（ゲームオーバーにさせる）</a></li><li><a href="#toc9" tabindex="0">Restart()（リトライボタンを押したとき）</a></li></ol></li><li><a href="#toc10" tabindex="0">④MainManagerのセットアップ</a></li><li><a href="#toc11" tabindex="0">⑤Player からゲームオーバーを呼ぶ処理を書く</a><ol><li><a href="#toc12" tabindex="0"> 全体の流れをまとめると…</a></li></ol></li><li><a href="#toc13" tabindex="0">動作確認</a></li><li><a href="#toc14" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">完成イメージ</span></h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="440" src="https://naiterukaiju.com/wp-content/uploads/2025/10/image-3-1024x440.png" alt="GAME OVERのUI" class="wp-image-318" srcset="https://naiterukaiju.com/wp-content/uploads/2025/10/image-3-1024x440.png 1024w, https://naiterukaiju.com/wp-content/uploads/2025/10/image-3-300x129.png 300w, https://naiterukaiju.com/wp-content/uploads/2025/10/image-3-768x330.png 768w, https://naiterukaiju.com/wp-content/uploads/2025/10/image-3.png 1514w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>画面中央に「GAME OVER」＋「リトライ」ボタンを表示</li>



<li>リトライボタンを押すとシーンを再読み込みして最初からスタートできる</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc2">① UI を用意する（Canvas）</span></h2>



<p>ゲームオーバーになった場合に表示させるUI（テキスト、ボタン）を作っていきましょう！</p>



<ol class="wp-block-list">
<li><strong>Canvas を作成</strong>
<ul class="wp-block-list">
<li>Hierarchy → 右クリック → <strong>UI &gt; Canvas</strong></li>



<li>Render Mode：<strong>Screen Space &#8211; Overlay</strong>（そのままでOK）</li>



<li>※自動で <strong>EventSystem</strong> も作られます（なければ <code>UI &gt; Event System</code> を追加）</li>
</ul>
</li>



<li><strong>全画面の暗幕を作る</strong>
<ul class="wp-block-list">
<li>Canvas を右クリック → <strong>UI &gt; Panel</strong>（名前：<code>GameOverPanel</code>にする）</li>



<li><code>Image</code> の色を <strong>黒 (0,0,0)</strong>、<strong>Alpha=160/255</strong> くらい（薄暗く）</li>



<li><strong>Inactive（非アクティブ）</strong> にしておく（起動直後に見えないように）</li>
</ul>
</li>



<li><strong>ゲームオーバー時のテキスト &amp; リトライボタン</strong>
<ul class="wp-block-list">
<li><code>GameOverPanel</code> の子に <strong>UI &gt; Text (TMP)</strong> か <strong>UI &gt; Text</strong>（名前：<code>Title</code>）
<ul class="wp-block-list">
<li>文字：<strong>GAME OVER</strong></li>
</ul>
</li>



<li><code>GameOverPanel</code> の子に <strong>UI &gt; Button</strong>（名前：<code>RetryButton</code>、ラベル：<strong>RETRY</strong>）<br>👉「RETRY」ボタンを押したときに <strong>シーンを再読み込み（ゲーム再スタート）</strong> するため用のボタンです</li>
</ul>
</li>
</ol>



<p>＜3.<strong>ゲームオーバー時のテキスト</strong>＞<br>テキストのサイズ、位置などを調整します。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="747" src="https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-15-214606-2-1024x747.png" alt="ゲームオーバー時のテキスト設定" class="wp-image-307" srcset="https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-15-214606-2-1024x747.png 1024w, https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-15-214606-2-300x219.png 300w, https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-15-214606-2-768x560.png 768w, https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-15-214606-2.png 1223w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>＜3.<strong>リトライボタン</strong>＞<br>ボタンの位置はPos X、Pos Yで調整します。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="758" src="https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-15-215008-1-1024x758.png" alt="リトライボタンの設定" class="wp-image-309" srcset="https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-15-215008-1-1024x758.png 1024w, https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-15-215008-1-300x222.png 300w, https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-15-215008-1-768x568.png 768w, https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-15-215008-1.png 1223w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc3">② MainManager.csの新規作成</span></h2>



<p>ゲームオーバー時のUI表示、リトライをまとめて管理するMainManager.csを新規作成します📝（コピペOK）</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
using System.Collections;

public class MainManager : MonoBehaviour
{
    &#91;Header("UI 参照")&#93;
    &#91;SerializeField&#93; private GameObject _gameOverPanel;   // ← GameOverPanel を割り当て
    &#91;SerializeField&#93; private Button _retryButton;         // ← RetryButton を割り当て

    private bool _shown = false;

    private void Awake()
    {
        // 起動直後は非表示
        if (_gameOverPanel != null) _gameOverPanel.SetActive(false);

        if (_retryButton != null)
            _retryButton.onClick.AddListener(Restart);
    }

    // 外部（Player）から呼ぶ
    public void Show()
    {
        if (_shown) return;
        _shown = true;

        // パネルを出す
        if (_gameOverPanel != null) _gameOverPanel.SetActive(true);

        // 時間停止（UI演出は unscaledDeltaTime で動かす）
        Time.timeScale = 0f;

    }

    public void Restart()
    {
        // 時間を戻してからリロード
        Time.timeScale = 1f;
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">UnityEngine</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">UnityEngine</span><span style="color: #D4D4D4">.SceneManagement;</span></span>
<span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">UnityEngine</span><span style="color: #D4D4D4">.UI;</span></span>
<span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">System</span><span style="color: #D4D4D4">.Collections;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #9CDCFE">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">MainManager</span><span style="color: #D4D4D4"> : </span><span style="color: #4EC9B0">MonoBehaviour</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #DCDCAA">Header</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;UI 参照&quot;</span><span style="color: #D4D4D4">)&#93;</span></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">&#93; </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">GameObject</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_gameOverPanel</span><span style="color: #D4D4D4">;   </span><span style="color: #6A9955">// ← GameOverPanel を割り当て</span></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">&#93; </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Button</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_retryButton</span><span style="color: #D4D4D4">;         </span><span style="color: #6A9955">// ← RetryButton を割り当て</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">bool</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_shown</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">false</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Awake</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 起動直後は非表示</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_gameOverPanel</span><span style="color: #D4D4D4"> != </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">) </span><span style="color: #9CDCFE">_gameOverPanel</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">SetActive</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">false</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_retryButton</span><span style="color: #D4D4D4"> != </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">_retryButton</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">onClick</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">AddListener</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">Restart</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// 外部（Player）から呼ぶ</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Show</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_shown</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_shown</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">true</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// パネルを出す</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_gameOverPanel</span><span style="color: #D4D4D4"> != </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">) </span><span style="color: #9CDCFE">_gameOverPanel</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">SetActive</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">true</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 時間停止（UI演出は unscaledDeltaTime で動かす）</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">Time</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">timeScale</span><span style="color: #D4D4D4"> = 0</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Restart</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 時間を戻してからリロード</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">Time</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">timeScale</span><span style="color: #D4D4D4"> = 1</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">SceneManager</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">LoadScene</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">SceneManager</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">GetActiveScene</span><span style="color: #D4D4D4">().</span><span style="color: #9CDCFE">buildIndex</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc4">③各処理の説明</span></h2>



<h3 class="wp-block-heading"><span id="toc5">UI参照の変数</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>&#91;SerializeField&#93; private GameObject _gameOverPanel;
&#91;SerializeField&#93; private Button _retryButton;
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4">&#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">&#93; </span><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">GameObject</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_gameOverPanel</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">&#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">&#93; </span><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Button</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_retryButton</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span></code></pre></div>



<ul class="wp-block-list">
<li>UnityのInspectorから
<ul class="wp-block-list">
<li>ゲームオーバー用のPanel</li>



<li>Retryボタン<br>を <strong>紐づけるための変数</strong>です。</li>
</ul>
</li>
</ul>



<ul class="wp-block-list">
<li>Unity上の設定から設定できるようにする</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc6">ゲームオーバーの多重実行防止</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>private bool _shown = false;
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">bool</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_shown</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">false</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span></code></pre></div>



<ul class="wp-block-list">
<li>ゲームオーバー処理が<br><strong>何回も呼ばれてしまうのを防ぐため</strong>のフラグです。</li>
</ul>



<p>落下判定は <code>Update()</code> で毎フレーム実行されるため、<br>何もしないと <strong>何度もゲームオーバー処理が走る</strong>可能性があります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc7">Awake() の役割</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>private void Awake()
{
    if (_gameOverPanel != null)
        _gameOverPanel.SetActive(false);

    if (_retryButton != null)
        _retryButton.onClick.AddListener(Restart);
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Awake</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_gameOverPanel</span><span style="color: #D4D4D4"> != </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_gameOverPanel</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">SetActive</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">false</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_retryButton</span><span style="color: #D4D4D4"> != </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_retryButton</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">onClick</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">AddListener</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">Restart</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<h4 class="wp-block-heading">Awake とは？</h4>



<ul class="wp-block-list">
<li><strong>オブジェクトが生成された直後に1回だけ呼ばれる</strong></li>



<li>「初期設定」を書くのに向いている</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>_gameOverPanel.SetActive(false);
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">_gameOverPanel</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">SetActive</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">false</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span></code></pre></div>



<p>GameOverPanel を非表示にする設定をしています。<br><strong>ゲーム開始直後からゲームオーバー画面が表示されないようにするため</strong>です。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>_retryButton.onClick.AddListener(Restart);
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">_retryButton</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">onClick</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">AddListener</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">Restart</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span></code></pre></div>



<p>Retryボタンに処理を登録しています。<br><strong>Retryボタンが押されたら<code>Restart()</code> メソッドを実行するという 予約</strong>をしています。</p>



<p>※ ボタンを押すたびに処理を追加しないため、<strong>Awakeで1回だけ登録する</strong>のがポイントです。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc8">Show() メソッド（ゲームオーバーにさせる）</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>public void Show()
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Show</span><span style="color: #D4D4D4">()</span></span>
<span class="line"></span></code></pre></div>



<ul class="wp-block-list">
<li>「ゲームオーバーになった瞬間」に呼ばれる</li>



<li>Player や他のクラスから呼び出す用</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>if (_shown) return;
_shown = true;
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_shown</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #9CDCFE">_shown</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">true</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span></code></pre></div>



<ul class="wp-block-list">
<li>落下中は毎フレーム条件を満たす</li>



<li>そのたびに呼ばれると不具合の原因になる</li>
</ul>



<p> ➡️<strong>「最初の1回だけ実行する」ための安全装置</strong>です（2重実行を防止）</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>_gameOverPanel.SetActive(true);
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">_gameOverPanel</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">SetActive</span><span style="color: #D4D4D4">(</span><span style="color: #569CD6">true</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span></code></pre></div>



<p>GameOver UI を表示させるということをしています。</p>



<ul class="wp-block-list">
<li>非表示だったUIを表示する</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc9">Restart()（リトライボタンを押したとき）</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>public void Restart()
{
    Time.timeScale = 1f; // 時間を元に戻す
    SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex); // 同じシーンを再読み込み
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Restart</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">Time</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">timeScale</span><span style="color: #D4D4D4"> = 1</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">; </span><span style="color: #6A9955">// 時間を元に戻す</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">SceneManager</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">LoadScene</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">SceneManager</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">GetActiveScene</span><span style="color: #D4D4D4">().</span><span style="color: #9CDCFE">buildIndex</span><span style="color: #D4D4D4">); </span><span style="color: #6A9955">// 同じシーンを再読み込み</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span></code></pre></div>



<p>「RETRY」ボタンを押したときに呼ばれます。</p>



<ul class="wp-block-list">
<li><strong><code>Time.timeScale = 1</code></strong><br>→ ゲームを再開できるように時間を元通りにする</li>



<li><strong><code>SceneManager.LoadScene()</code></strong><br>→ 今のシーンをリロードして最初からスタート！</li>
</ul>



<p>これで「やり直し」ができるようになります。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc10">④MainManagerのセットアップ</span></h2>



<p>②で作成したスクリプトを管理する用の<strong>MainManager</strong>オブジェクトを作成します。<br></p>



<ol class="wp-block-list">
<li><strong>MainManagerオブジェクトを作成する</strong>
<ul class="wp-block-list">
<li>Hierarchy → ＋ボタンクリック →「create Empty」で空のオブジェクトを作成する</li>



<li>名前を「MainManager」に変更<br>（<strong>create Empty</strong>はスクリプトだけ入れたい時などに使用されます）</li>
</ul>
</li>



<li><strong>MainManager.csの適用</strong>
<ul class="wp-block-list">
<li>Add Component<strong>&gt; </strong>MainManager.csを選択して適用する</li>
</ul>
</li>



<li><strong>UIのセットアップ</strong>
<ul class="wp-block-list">
<li>「gameOverPanel」 に CanvasのGameOverPanel をドラッグする</li>



<li>「retryButton」 に CanvasのRetryButton をドラッグする</li>
</ul>
</li>
</ol>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="523" src="https://naiterukaiju.com/wp-content/uploads/2025/10/↑作成したUIをドラッグする-1024x523.png" alt="GameOverPanel 、RetryButton をドラッグ" class="wp-image-313" srcset="https://naiterukaiju.com/wp-content/uploads/2025/10/↑作成したUIをドラッグする-1024x523.png 1024w, https://naiterukaiju.com/wp-content/uploads/2025/10/↑作成したUIをドラッグする-300x153.png 300w, https://naiterukaiju.com/wp-content/uploads/2025/10/↑作成したUIをドラッグする-768x392.png 768w, https://naiterukaiju.com/wp-content/uploads/2025/10/↑作成したUIをドラッグする.png 1218w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc11">⑤Player からゲームオーバーを呼ぶ処理を書く</span></h2>



<p>Player.csにMainManager.csで追加した処理を呼び出します。<br>HP処理の <code>_TakeDamage()</code> で<span class="marker-under-red"> <strong>0 以下になった瞬間に</strong> <code>Show()</code> </span>を呼びます。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>using UnityEngine;
using UnityEngine.UI;
using UnityEngine.InputSystem;

public class Player : MonoBehaviour
{
    &#91;SerializeField, Header("最大HP")&#93;
    private int _maxHP = 5;

    private int _currentHP;
    &#91;SerializeField, Header("HPバーのImage")&#93;
    private Image _hpBarFill;

    private MainManager _mainManager;　// 追加
    private PlayerInput _input;　// 追加

    void Start()
    {
        _currentHP = _maxHP;
        _UpdateHPBar();
        _mainManager = FindObjectOfType&lt;MainManager>(); // 追加
        _input = GetComponent&lt;PlayerInput>(); // 追加
    }

    private void OnCollisionEnter2D(Collision2D col)
    {
        if (col.collider.CompareTag("Enemy"))
        {
            _TakeDamage(1);
        }
    }

    // ダメージ処理
    private void _TakeDamage(int damage)
    {
        _currentHP -= damage;
        _currentHP = Mathf.Clamp(_currentHP, 0, _maxHP);

        _UpdateHPBar();

        if (_currentHP &lt;= 0)　// 追加
        {
            // 操作を止める
            if (_input != null) _input.enabled = false;

            // ゲームオーバーを表示
            if (_mainManager != null) _mainManager.Show();
        }
    }

    // HPバーの見た目を更新
    private void _UpdateHPBar()
    {
        if (_hpBarFill != null)
        {
            _hpBarFill.fillAmount = (float)_currentHP / _maxHP;
        }
    }
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">UnityEngine</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">UnityEngine</span><span style="color: #D4D4D4">.UI;</span></span>
<span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">UnityEngine</span><span style="color: #D4D4D4">.InputSystem;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #9CDCFE">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">Player</span><span style="color: #D4D4D4"> : </span><span style="color: #4EC9B0">MonoBehaviour</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">, </span><span style="color: #DCDCAA">Header</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;最大HP&quot;</span><span style="color: #D4D4D4">)&#93;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">int</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_maxHP</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">5</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">int</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_currentHP</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">, </span><span style="color: #DCDCAA">Header</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;HPバーのImage&quot;</span><span style="color: #D4D4D4">)&#93;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Image</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_hpBarFill</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">MainManager</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_mainManager</span><span style="color: #D4D4D4">;　</span><span style="color: #6A9955">// 追加</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">PlayerInput</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_input</span><span style="color: #D4D4D4">;　</span><span style="color: #6A9955">// 追加</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Start</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_currentHP</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_maxHP</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">_UpdateHPBar</span><span style="color: #D4D4D4">();</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_mainManager</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">FindObjectOfType</span><span style="color: #D4D4D4">&lt;</span><span style="color: #4EC9B0">MainManager</span><span style="color: #D4D4D4">&gt;(); </span><span style="color: #6A9955">// 追加</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_input</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">GetComponent</span><span style="color: #D4D4D4">&lt;</span><span style="color: #4EC9B0">PlayerInput</span><span style="color: #D4D4D4">&gt;(); </span><span style="color: #6A9955">// 追加</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">OnCollisionEnter2D</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">Collision2D</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">col</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">col</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">collider</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">CompareTag</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Enemy&quot;</span><span style="color: #D4D4D4">))</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #DCDCAA">_TakeDamage</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// ダメージ処理</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">_TakeDamage</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">int</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">damage</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_currentHP</span><span style="color: #D4D4D4"> -= </span><span style="color: #9CDCFE">damage</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_currentHP</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">Mathf</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">Clamp</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_currentHP</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">_maxHP</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">_UpdateHPBar</span><span style="color: #D4D4D4">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_currentHP</span><span style="color: #D4D4D4"> &lt;= </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">)　</span><span style="color: #6A9955">// 追加</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #6A9955">// 操作を止める</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_input</span><span style="color: #D4D4D4"> != </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">) </span><span style="color: #9CDCFE">_input</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">enabled</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">false</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #6A9955">// ゲームオーバーを表示</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_mainManager</span><span style="color: #D4D4D4"> != </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">) </span><span style="color: #9CDCFE">_mainManager</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">Show</span><span style="color: #D4D4D4">();</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// HPバーの見た目を更新</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">_UpdateHPBar</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_hpBarFill</span><span style="color: #D4D4D4"> != </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">_hpBarFill</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">fillAmount</span><span style="color: #D4D4D4"> = (</span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4">)</span><span style="color: #9CDCFE">_currentHP</span><span style="color: #D4D4D4"> / </span><span style="color: #9CDCFE">_maxHP</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc12"> 全体の流れをまとめると…</span></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>手順</th><th>処理</th><th>担当関数</th></tr></thead><tbody><tr><td>ゲーム開始</td><td>パネル非表示、ボタン登録</td><td>Awake()</td></tr><tr><td>HP0になる</td><td>パネルを表示、時間停止</td><td>Show()</td></tr><tr><td>RETRY押下</td><td>時間再開、シーン再読み込み</td><td>Restart()</td></tr></tbody></table></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc13">動作確認</span></h2>



<ol class="wp-block-list">
<li><strong>GameOverPanel を非アクティブ</strong>にしておく（Startで有効化されないように）</li>



<li>プレイして敵に触れ、HPを0にする</li>



<li>画面が<strong>暗転＋GAME OVER</strong>、操作が止まり、<strong>RETRY</strong>でシーン再読み込み</li>
</ol>



<video
  src="https://naiterukaiju.com/wp-content/uploads/2025/10/無題のビデオ-‐-Clipchampで作成-4.mp4"
  autoplay
  loop
  muted
  playsinline
  width="640"
  height="360">
</video



<p><br>➡️ HPが0になったらゲームオーバーUIを表示させ、リトライボタンでリスポーンすることが出来ました！！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc14">まとめ</span></h2>



<ul class="wp-block-list">
<li><strong>GameOverPanel</strong> を用意して <strong>MainManager</strong> で表示・停止・再開を管理</li>



<li>Player 側は <strong>HPが0の瞬間だけ</strong> <code>Show()</code> を呼ぶ</li>
</ul>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>最後まで読んでいただきありがとうございました！</p>
</div></div>



<p>敵からダメージを食らうようにしましたが、このままだと敵を倒す処理が実装されていないので次回では倒せるようにします！</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-next">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%aa%e3%80%91%e6%95%b5%e3%82%92%e8%b8%8f%e3%82%93%e3%81%a0%e3%82%89%e5%80%92%e3%81%99%e5%87%a6%e7%90%86%e3%82%92%e4%bd%9c%e3%82%8d%e3%81%86%ef%bc%81/" title="【Unity入門⑩】敵を踏んだら倒す処理を作ろう！" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門⑩】敵を踏んだら倒す処理を作ろう！</div><div class="blogcard-snippet internal-blogcard-snippet">前回は「HPが0になったらゲームオーバーの演出させる」処理を実装しました。今回は2Dアクションゲームらしく、上から踏んだら敵を倒す処理を追加します！💥この記事でやることプレイヤーが上から敵を踏むと倒す横や下からぶつかるとダメージを受ける反動...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.11.08</div></div></div></div></a>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a8%e3%80%91hp%e3%81%8c0%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%9f%e3%82%89%e3%82%b2%e3%83%bc%e3%83%a0%e3%82%aa%e3%83%bc%e3%83%90%e3%83%bc%e3%81%ae%e6%bc%94%e5%87%ba/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://naiterukaiju.com/wp-content/uploads/2025/10/無題のビデオ-‐-Clipchampで作成-4.mp4" length="460747" type="video/mp4" />

			</item>
		<item>
		<title>【Unity入門⑧】敵に触れたらダメージ！体力UIを作ってみよう</title>
		<link>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a7%e3%80%91%e6%95%b5%e3%81%ab%e8%a7%a6%e3%82%8c%e3%81%9f%e3%82%89%e3%83%80%e3%83%a1%e3%83%bc%e3%82%b8%ef%bc%81%e4%bd%93%e5%8a%9bui%e3%82%92%e4%bd%9c%e3%81%a3/</link>
					<comments>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a7%e3%80%91%e6%95%b5%e3%81%ab%e8%a7%a6%e3%82%8c%e3%81%9f%e3%82%89%e3%83%80%e3%83%a1%e3%83%bc%e3%82%b8%ef%bc%81%e4%bd%93%e5%8a%9bui%e3%82%92%e4%bd%9c%e3%81%a3/#respond</comments>
		
		<dc:creator><![CDATA[怪獣]]></dc:creator>
		<pubDate>Sun, 12 Oct 2025 05:27:26 +0000</pubDate>
				<category><![CDATA[Unity2D入門（シリーズ）]]></category>
		<category><![CDATA[2Dゲーム]]></category>
		<category><![CDATA[HPバー]]></category>
		<category><![CDATA[Unity]]></category>
		<category><![CDATA[Unity初心者]]></category>
		<category><![CDATA[アクションゲーム]]></category>
		<category><![CDATA[ゲーム制作]]></category>
		<category><![CDATA[ダメージ]]></category>
		<category><![CDATA[体力UI]]></category>
		<category><![CDATA[敵]]></category>
		<guid isPermaLink="false">https://naiterukaiju.com/?p=289</guid>

					<description><![CDATA[前回の記事では、敵を作る方法を解説しました👾 今回はそこから一歩進んで、プレイヤーが敵に触れたら体力が減る仕組みを作ってみましょう👾さらに、体力UI（HPバー）を画面に表示して、減っていく演出も追加します！ ⬇️画像のよ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>こんにちは！夜の街2Dアクションゲームを制作中の怪獣です🦖</p>
</div></div>



<p>前回の記事では、敵を作る方法を解説しました👾</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-prev">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a6%e3%80%91%e6%95%b5%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%88%e3%81%86%ef%bc%81/" title="【Unity入門⑦】2Dアクションゲームで敵を作ってみよう！" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門⑦】2Dアクションゲームで敵を作ってみよう！</div><div class="blogcard-snippet internal-blogcard-snippet">前回の記事では、プレイヤーにカメラを追従させる実装方法を解説しました。横スクロールアクションといえば「敵キャラ」👾！今回は 地面の上を左右に歩くだけのシンプルな敵 を作ってみましょう！↓実装イメージ↓(); _moveDirection =...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.10.05</div></div></div></div></a>
</div>



<p><br><br>今回はそこから一歩進んで、<strong>プレイヤーが敵に触れたら体力が減る仕組み</strong>を作ってみましょう👾<br>さらに、<strong>体力UI（HPバー）を画面に表示して、減っていく演出</strong>も追加します！</p>



<p>⬇️画像のように、左上に赤いHPバーを作成していきます！</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="710" height="420" src="https://naiterukaiju.com/wp-content/uploads/2025/10/Unityで2Dアクションゲームを作ろう！のコピーのコピー-6.png" alt="体力UI（HPバー）の" class="wp-image-1087" srcset="https://naiterukaiju.com/wp-content/uploads/2025/10/Unityで2Dアクションゲームを作ろう！のコピーのコピー-6.png 710w, https://naiterukaiju.com/wp-content/uploads/2025/10/Unityで2Dアクションゲームを作ろう！のコピーのコピー-6-300x177.png 300w" sizes="(max-width: 710px) 100vw, 710px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-16" checked><label class="toc-title" for="toc-checkbox-16">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">完成イメージ</a></li><li><a href="#toc2" tabindex="0">① 体力UI（HPバー）の準備</a><ol><li><a href="#toc3" tabindex="0">① Canvasを作成</a></li><li><a href="#toc4" tabindex="0">② HPの枠部分のバーを作る</a></li><li><a href="#toc5" tabindex="0">③ ゲージ部分を作る（赤のバー）</a></li></ol></li><li><a href="#toc6" tabindex="0">② プレイヤーにHP処理を追加（Player.cs）</a></li><li><a href="#toc7" tabindex="0">③ 敵オブジェクトの設定</a></li><li><a href="#toc8" tabindex="0">④ プレイヤーのInspector設定</a></li><li><a href="#toc9" tabindex="0"> 動作確認</a></li><li><a href="#toc10" tabindex="0"> まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">完成イメージ</span></h2>



<ul class="wp-block-list">
<li>画面左上にHPバーが表示される</li>



<li>プレイヤーが敵に触れるとHPバーが減る</li>



<li>HPが0になったらプレイヤーが倒れる（Unity入門⑨で追加予定）</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc2">① 体力UI（HPバー）の準備</span></h2>



<h3 class="wp-block-heading"><span id="toc3">① Canvasを作成</span></h3>



<p>まずはUIの土台となる<strong>Canvas</strong>を作ります。</p>



<p><strong>Canvas（キャンバス）とは、一言でいうと<br>Unityで「UIを表示するための土台（画面）」です。</strong></p>



<p>テキスト、ボタン、パネルなどの&nbsp;<strong>UI要素は、必ず Canvas の子オブジェクトとして配置されます。</strong></p>



<p><strong><span class="marker-under-blue">Hierarchy → 右クリック → <code>UI &gt; Canvas</code> で作成します。</span></strong></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="710" height="420" src="https://naiterukaiju.com/wp-content/uploads/2026/04/Unityで2Dアクションゲームを作ろう！のコピーのコピー-1.png" alt="Canvasの作り方の画像" class="wp-image-1065" srcset="https://naiterukaiju.com/wp-content/uploads/2026/04/Unityで2Dアクションゲームを作ろう！のコピーのコピー-1.png 710w, https://naiterukaiju.com/wp-content/uploads/2026/04/Unityで2Dアクションゲームを作ろう！のコピーのコピー-1-300x177.png 300w" sizes="(max-width: 710px) 100vw, 710px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc4">② HPの枠部分のバーを作る</span></h3>



<p>背景バーのベースとなる枠部分を追加します！</p>



<p>①で作った<strong><span class="marker-under-blue">Canvasを選択 → 右クリック → UI → Imageを追加</span></strong>します</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="710" height="420" src="https://naiterukaiju.com/wp-content/uploads/2026/04/Unityで2Dアクションゲームを作ろう！のコピーのコピー.png" alt="Imageの作り方の画像" class="wp-image-1066" srcset="https://naiterukaiju.com/wp-content/uploads/2026/04/Unityで2Dアクションゲームを作ろう！のコピーのコピー.png 710w, https://naiterukaiju.com/wp-content/uploads/2026/04/Unityで2Dアクションゲームを作ろう！のコピーのコピー-300x177.png 300w" sizes="(max-width: 710px) 100vw, 710px" /></figure>



<p>追加した<strong>Image</strong>を選択し、以下を変更します。</p>



<ul class="wp-block-list">
<li><strong><span class="marker-under-blue">名前：HPBar_Backに変更</span></strong></li>



<li><span class="marker-under-blue"><strong>色：黒やグレーに変更する</strong></span></li>



<li><span class="marker-under-blue"><strong>サイズ：横長（例：300×30</strong></span><span class="marker-under-blue"><strong>ぐらい</strong></span><span class="marker-under-blue"><strong>）</strong></span></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><span id="toc5">③ ゲージ部分を作る（赤のバー）</span></h3>



<p>②で作った背景バーに対して、子オブジェクトとしてゲージ部分を作ります！<br>この③で作る部分は<strong>ゲージのHPが減る見た目の赤い部分を指しています。</strong></p>



<p>②で作った<strong><span class="marker-under-blue">HPBar_Backを選択→ 右クリック → UI → Image</span></strong>を追加します<br>（<strong>親子関係にするのがポイントです💡</strong>）</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="710" height="420" src="https://naiterukaiju.com/wp-content/uploads/2026/04/Unityで2Dアクションゲームを作ろう！のコピーのコピー-2.png" alt="Imageの作り方の画像" class="wp-image-1067" srcset="https://naiterukaiju.com/wp-content/uploads/2026/04/Unityで2Dアクションゲームを作ろう！のコピーのコピー-2.png 710w, https://naiterukaiju.com/wp-content/uploads/2026/04/Unityで2Dアクションゲームを作ろう！のコピーのコピー-2-300x177.png 300w" sizes="(max-width: 710px) 100vw, 710px" /></figure>



<p><br>追加した<strong>Image</strong>を選択し、以下を変更します。</p>



<ul class="wp-block-list">
<li><strong><span class="marker-under-blue">名前：「HPBar_Fill」に変更する</span></strong></li>



<li><span class="marker-under-blue"><strong>Inspector <code style=""><b>&gt;</b></code></strong><code style=""><b>Image &gt; Source Image</b></code><b>を適当なスプライトに設定</b>する</span>（Squareなど）</li>



<li><strong><span class="marker-under-blue">Color：赤など</span></strong></li>



<li><span class="marker-under-blue"><strong>Image Type：Filled</strong>に変更</span>（画像を少しずつ消したり、伸ばしたりできる機能にする）</li>



<li><span class="marker-under-blue"><strong>Fill Method</strong>：<strong>Horizontal</strong>に変更</span>（横に左→右（または右→左）にゲージが減るようになる）</li>



<li><span class="marker-under-blue"><strong>Fill Origin</strong>：<strong>Left</strong>に変更</span>（左から減る）</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="710" height="420" src="https://naiterukaiju.com/wp-content/uploads/2026/04/Unityで2Dアクションゲームを作ろう！のコピーのコピー-3.png" alt="Imageの各種設定の画像" class="wp-image-1068" srcset="https://naiterukaiju.com/wp-content/uploads/2026/04/Unityで2Dアクションゲームを作ろう！のコピーのコピー-3.png 710w, https://naiterukaiju.com/wp-content/uploads/2026/04/Unityで2Dアクションゲームを作ろう！のコピーのコピー-3-300x177.png 300w" sizes="(max-width: 710px) 100vw, 710px" /></figure>



<p>➡️<strong><span class="marker-under-red">これで「左から減るHPバー」仕組みになります！</span></strong></p>



<ul class="wp-block-list">
<li>背景（Back）：HPの枠</li>



<li>前面（Fill）：実際に減る部分</li>
</ul>



<p>こうして分けることで、見た目調整がしやすくなります！</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="513" src="https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-12-141558-1024x513.png" alt="HPUIを作成している画像" class="wp-image-297" srcset="https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-12-141558-1024x513.png 1024w, https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-12-141558-300x150.png 300w, https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-12-141558-768x385.png 768w, https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-12-141558-1536x769.png 1536w, https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-12-141558.png 1919w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc6">② プレイヤーにHP処理を追加（Player.cs）</span></h2>



<p>以下のように、Player.csに体力変数とダメージ処理を追加します⬇️</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>using UnityEngine;
using UnityEngine.UI; // ← UIを扱うために追加

public class Player : MonoBehaviour
{
    &#91;SerializeField, Header("最大HP")&#93;
    private int _maxHP = 5;

    private int _currentHP;
    &#91;SerializeField, Header("HPバーのImage")&#93;
    private Image _hpBarFill;

    private void Start()
    {
        _currentHP = _maxHP;
        _UpdateHPBar();
    }

    // 敵に触れたときの処理
    private void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Enemy"))
        {
            _TakeDamage(1);
        }
    }

    // ダメージ処理
    private void _TakeDamage(int damage)
    {
        _currentHP -= damage;
        _currentHP = Mathf.Clamp(_currentHP, 0, _maxHP);

        _UpdateHPBar();

        if (_currentHP &lt;= 0)
        {
            Debug.Log("プレイヤーが倒れました");
            // 次回以降でリスポーンなどの処理を追加予定
        }
    }

    // HPバーの見た目を更新
    private void _UpdateHPBar()
    {
        if (_hpBarFill != null)
        {
            _hpBarFill.fillAmount = (float)_currentHP / _maxHP;
        }
    }
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">UnityEngine</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">UnityEngine</span><span style="color: #D4D4D4">.UI; </span><span style="color: #6A9955">// ← UIを扱うために追加</span></span>
<span class="line"></span>
<span class="line"><span style="color: #9CDCFE">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">Player</span><span style="color: #D4D4D4"> : </span><span style="color: #4EC9B0">MonoBehaviour</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">, </span><span style="color: #DCDCAA">Header</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;最大HP&quot;</span><span style="color: #D4D4D4">)&#93;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">int</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_maxHP</span><span style="color: #D4D4D4"> = </span><span style="color: #B5CEA8">5</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">int</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_currentHP</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">, </span><span style="color: #DCDCAA">Header</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;HPバーのImage&quot;</span><span style="color: #D4D4D4">)&#93;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Image</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_hpBarFill</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Start</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_currentHP</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_maxHP</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">_UpdateHPBar</span><span style="color: #D4D4D4">();</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// 敵に触れたときの処理</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">OnCollisionEnter2D</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">Collision2D</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">collision</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">collision</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">gameObject</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">CompareTag</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Enemy&quot;</span><span style="color: #D4D4D4">))</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #DCDCAA">_TakeDamage</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// ダメージ処理</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">_TakeDamage</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">int</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">damage</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_currentHP</span><span style="color: #D4D4D4"> -= </span><span style="color: #9CDCFE">damage</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_currentHP</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">Mathf</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">Clamp</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_currentHP</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">_maxHP</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">_UpdateHPBar</span><span style="color: #D4D4D4">();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_currentHP</span><span style="color: #D4D4D4"> &lt;= </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">Debug</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">Log</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;プレイヤーが倒れました&quot;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #6A9955">// 次回以降でリスポーンなどの処理を追加予定</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// HPバーの見た目を更新</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">_UpdateHPBar</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_hpBarFill</span><span style="color: #D4D4D4"> != </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">_hpBarFill</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">fillAmount</span><span style="color: #D4D4D4"> = (</span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4">)</span><span style="color: #9CDCFE">_currentHP</span><span style="color: #D4D4D4"> / </span><span style="color: #9CDCFE">_maxHP</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><strong>OnCollisionEnter2D()</strong>は「ぶつかったときに呼ばれる処理」です。<br>今回はここで敵かどうかを判定して、ダメージ処理を呼び出してHPバーの見た目を更新するようにしています。<br>各処理の詳しい説明は別記事で解説していますので、ご興味あればこちらを参照ください👾</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-together">

<a href="https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91%e6%95%b5%e3%81%ab%e8%a7%a6%e3%82%8c%e3%81%9f%e3%82%89%e3%83%80%e3%83%a1%e3%83%bc%e3%82%b8%e3%82%92%e5%8f%97%e3%81%91%e3%82%8b%e4%bb%95%e7%b5%84%e3%81%bf%e3%81%ae%e4%bd%9c/" title="【Unity2D】敵に触れたらダメージを受ける仕組みの作り方｜（コード全文・解説付き）" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-29-195746-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-29-195746-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-29-195746-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-29-195746-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity2D】敵に触れたらダメージを受ける仕組みの作り方｜（コード全文・解説付き）</div><div class="blogcard-snippet internal-blogcard-snippet">Unity2Dでアクションゲームを作っていると、敵に触れたらHPを減らしたいダメージ処理を入れたいと思うことがありますよね。この記事では、敵に触れたらプレイヤーがダメージを受ける仕組みの作り方を、初心者向けにわかりやすく解説します！今回は ...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.03.29</div></div></div></div></a>
</div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc7">③ 敵オブジェクトの設定</span></h2>



<ol class="wp-block-list">
<li><code>Enemy</code> オブジェクトに <strong>Tag: Enemy</strong> を新規作成をして設定します。</li>



<li><code>Rigidbody2D</code> と <code>Collider2D</code> をつけて、物理的に触れられる状態にします。</li>
</ol>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="418" src="https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-11-225746-1024x418.png" alt="Tag: Enemyを選択" class="wp-image-296" srcset="https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-11-225746-1024x418.png 1024w, https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-11-225746-300x123.png 300w, https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-11-225746-768x314.png 768w, https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-11-225746.png 1246w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>➡️これで、プレイヤーと敵がぶつかると <strong>OnCollisionEnter2D</strong> が発動します。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc8">④ プレイヤーのInspector設定</span></h2>



<ul class="wp-block-list">
<li><code>_hpBarFill</code> の欄に、Canvas上の <strong>HPBar_Fill</strong> をドラッグして割り当てます。</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="710" height="327" src="https://naiterukaiju.com/wp-content/uploads/2025/10/Unityで2Dアクションゲームを作ろう！のコピーのコピー-4.png" alt="_hpBarFillにドラッグする画像" class="wp-image-1035" srcset="https://naiterukaiju.com/wp-content/uploads/2025/10/Unityで2Dアクションゲームを作ろう！のコピーのコピー-4.png 710w, https://naiterukaiju.com/wp-content/uploads/2025/10/Unityで2Dアクションゲームを作ろう！のコピーのコピー-4-300x138.png 300w" sizes="(max-width: 710px) 100vw, 710px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc9"> 動作確認</span></h2>



<ol class="wp-block-list">
<li>プレイヤーと敵を配置してプレイ</li>



<li>敵に触れるとHPバーがスッと減るのを確認</li>



<li>体力が0になると、コンソールに「プレイヤーが倒れました」と表示</li>
</ol>



<video
  src="https://naiterukaiju.com/wp-content/uploads/2025/10/無題のビデオ-‐-Clipchampで作成-3.mp4"
  autoplay
  loop
  muted
  playsinline
  width="640"
  height="360">
</video



<p><br>➡️敵に触れたら赤いバーが減っていくようになりました！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc10"> まとめ</span></h2>



<ul class="wp-block-list">
<li>敵にぶつかると体力が減る仕組みを追加</li>



<li>HPバーをUIとして表示して、減少を視覚化</li>



<li>体力が0になると「倒れた状態」にできるよう準備</li>
</ul>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>最後まで読んでいただきありがとうございました！</p>
</div></div>



<p>体力UIを視覚的に作り、徐々に減少していく演出をさせることが出来ました！<br>これにプラスして、体力が0になったら「ゲームオーバー」と表示させるのが一般的ですよね。<br>次の記事では、<strong><span class="marker-under-red">体力が0になったときにゲームオーバー演出を出す処理</span></strong>を追加していきます！</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-next">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a8%e3%80%91hp%e3%81%8c0%e3%81%ab%e3%81%aa%e3%81%a3%e3%81%9f%e3%82%89%e3%82%b2%e3%83%bc%e3%83%a0%e3%82%aa%e3%83%bc%e3%83%90%e3%83%bc%e3%81%ae%e6%bc%94%e5%87%ba/" title="【Unity入門⑨】HPが0になったらゲームオーバーの演出をさせよう" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門⑨】HPが0になったらゲームオーバーの演出をさせよう</div><div class="blogcard-snippet internal-blogcard-snippet">前回の記事で、敵に触れたらダメージを食らうHPバーを作りました。今回はプレイヤーのHPが0になったらゲームオーバになるUIを作ってみましょう！この記事では、・プレイヤーのHPが0になったら画面に「GAME OVER」、「リトライ」ボタンを表...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.10.18</div></div></div></div></a>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a7%e3%80%91%e6%95%b5%e3%81%ab%e8%a7%a6%e3%82%8c%e3%81%9f%e3%82%89%e3%83%80%e3%83%a1%e3%83%bc%e3%82%b8%ef%bc%81%e4%bd%93%e5%8a%9bui%e3%82%92%e4%bd%9c%e3%81%a3/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://naiterukaiju.com/wp-content/uploads/2025/10/無題のビデオ-‐-Clipchampで作成-3.mp4" length="221111" type="video/mp4" />

			</item>
		<item>
		<title>【Unity入門⑦】2Dアクションゲームで敵を作ってみよう！</title>
		<link>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a6%e3%80%91%e6%95%b5%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%88%e3%81%86%ef%bc%81/</link>
					<comments>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a6%e3%80%91%e6%95%b5%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%88%e3%81%86%ef%bc%81/#respond</comments>
		
		<dc:creator><![CDATA[怪獣]]></dc:creator>
		<pubDate>Sun, 05 Oct 2025 12:19:08 +0000</pubDate>
				<category><![CDATA[Unity2D入門（シリーズ）]]></category>
		<category><![CDATA[2Dゲーム]]></category>
		<category><![CDATA[Unity]]></category>
		<category><![CDATA[Unity初心者]]></category>
		<category><![CDATA[アクションゲーム]]></category>
		<category><![CDATA[ゲーム制作]]></category>
		<category><![CDATA[敵]]></category>
		<category><![CDATA[敵キャラ]]></category>
		<guid isPermaLink="false">https://naiterukaiju.com/?p=278</guid>

					<description><![CDATA[前回の記事では、プレイヤーにカメラを追従させる実装方法を解説しました。 横スクロールアクションといえば「敵キャラ」👾！今回は 地面の上を左右に歩くだけのシンプルな敵 を作ってみましょう！ ↓実装イメージ↓]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>こんにちは！夜の街2Dアクションゲームを制作中の怪獣です🦖</p>
</div></div>



<p>前回の記事では、プレイヤーにカメラを追従させる実装方法を解説しました。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-prev">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a5%e3%80%91%e3%83%97%e3%83%ac%e3%82%a4%e3%83%a4%e3%83%bc%e3%81%ab%e3%82%ab%e3%83%a1%e3%83%a9%e3%82%92%e8%bf%bd%e5%be%93%e3%81%95%e3%81%9b%e3%81%a62d%e3%82%a2/" title="【Unity入門⑥】プレイヤーにカメラを追従させて2Dアクションゲーム感を出そう" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門⑥】プレイヤーにカメラを追従させて2Dアクションゲーム感を出そう</div><div class="blogcard-snippet internal-blogcard-snippet">前回の記事ではTilemapでマップを作る方法を解説しました。横スクロールゲームを作るときに欠かせないのがプレイヤーの歩行に合わせて追従する「カメラの追従処理」です。プレイヤーが動いてもカメラが止まったままだと、すぐに画面の外に出てしまいま...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.10.01</div></div></div></div></a>
</div>



<p>横スクロールアクションといえば「敵キャラ」👾！<br>今回は <strong>地面の上を左右に歩くだけのシンプルな敵</strong> を作ってみましょう！</p>



<p>↓実装イメージ↓</p>



<video
  src="https://naiterukaiju.com/wp-content/uploads/2025/10/無題のビデオ-‐-Clipchampで作成-2.mp4"
  autoplay
  loop
  muted
  playsinline
  width="640"
  height="360">
</video



<p></p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-18" checked><label class="toc-title" for="toc-checkbox-18">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">①事前準備</a><ol><li><a href="#toc2" tabindex="0">敵オブジェクトの作成</a></li></ol></li><li><a href="#toc3" tabindex="0">②完成コード（Enemy.cs）</a></li><li><a href="#toc4" tabindex="0">③各処理の説明（初心者向け）</a><ol><li><a href="#toc5" tabindex="0">Start</a></li><li><a href="#toc6" tabindex="0">Update</a></li><li><a href="#toc7" tabindex="0">_Move</a></li></ol></li><li><a href="#toc8" tabindex="0">④Enemy.csをEnemyオブジェクトに割り当てる</a></li><li><a href="#toc9" tabindex="0">⑤ 動作確認</a></li><li><a href="#toc10" tabindex="0">⑥ まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">①事前準備</span></h2>



<h3 class="wp-block-heading"><span id="toc2">敵オブジェクトの作成</span></h3>



<p>まずは敵オブジェクトを作っていきましょう！<br>基本的にはプレイヤーと同じ作り方です。</p>



<ol class="wp-block-list">
<li>Hierarchyで「2Dオブジェクト → Sprite → Square」を作成</li>



<li>名前を「Enemy」に変更</li>



<li>Add Componentでコンポーネントを追加
<ul class="wp-block-list">
<li><strong>Rigidbody2D</strong>（物理挙動を持たせるため）</li>



<li><strong>BoxCollider2D</strong>（床との当たり判定を行うため）</li>
</ul>
</li>



<li>敵の見た目を変更する
<ul class="wp-block-list">
<li>Sprite Rendererタブの「Sprite」に敵の画像をドラッグする（ここではAssetStoreの素材を使用します）</li>
</ul>
</li>
</ol>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="625" src="https://naiterukaiju.com/wp-content/uploads/2025/10/image-1024x625.png" alt="Enemyオブジェクトの設定" class="wp-image-280" srcset="https://naiterukaiju.com/wp-content/uploads/2025/10/image-1024x625.png 1024w, https://naiterukaiju.com/wp-content/uploads/2025/10/image-300x183.png 300w, https://naiterukaiju.com/wp-content/uploads/2025/10/image-768x469.png 768w, https://naiterukaiju.com/wp-content/uploads/2025/10/image.png 1447w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>【使用した敵の画像はこちら】</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-reference-link">

<a rel="noopener" href="https://assetstore.unity.com/packages/2d/characters/simple-2d-platformer-assets-pack-188518#description" title="Simple 2D Platformer Assets Pack | 2D Characters | Unity Asset Store" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://naiterukaiju.com/wp-content/uploads/cocoon-resources/blog-card-cache/92a59d9c0b0d34480303391a8ee12da1.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Simple 2D Platformer Assets Pack | 2D Characters | Unity Asset Store</div><div class="blogcard-snippet external-blogcard-snippet">Elevate your workflow with the Simple 2D Platformer Assets Pack asset from Goldmetal. Find this &amp; more Characters on the...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://assetstore.unity.com/packages/2d/characters/simple-2d-platformer-assets-pack-188518#description" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">assetstore.unity.com</div></div></div></div></a>
</div>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>これで敵オブジェクトの作成が出来ました</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc3">②完成コード（Enemy.cs）</span></h2>



<p>Enemy.csを新規作成します。<br>まずは左に移動するだけの処理を作ってみましょう（コピペOK！）</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Enemy : MonoBehaviour
{
    &#91;SerializeField, Header("移動速度")&#93;
    private float _moveSpeed;

    private Rigidbody2D _rigid;
    private Vector2 _moveDirection;

    void Start()
    {
        _rigid = GetComponent&lt;Rigidbody2D>();
        _moveDirection = Vector2.left; // 初期は左に歩かせる
    }

    void Update()
    {
        _Move();              // 移動処理
    }

    // 移動処理
    private void _Move()
    {
        _rigid.velocity = new Vector2(_moveDirection.x * _moveSpeed, _rigid.velocity.y);
    }
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">System</span><span style="color: #D4D4D4">.Collections;</span></span>
<span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">System</span><span style="color: #D4D4D4">.Collections.Generic;</span></span>
<span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">UnityEngine</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #9CDCFE">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">Enemy</span><span style="color: #D4D4D4"> : </span><span style="color: #4EC9B0">MonoBehaviour</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">, </span><span style="color: #DCDCAA">Header</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;移動速度&quot;</span><span style="color: #D4D4D4">)&#93;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_moveSpeed</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Rigidbody2D</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_rigid</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Vector2</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_moveDirection</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Start</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_rigid</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">GetComponent</span><span style="color: #D4D4D4">&lt;</span><span style="color: #4EC9B0">Rigidbody2D</span><span style="color: #D4D4D4">&gt;();</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_moveDirection</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">Vector2</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">left</span><span style="color: #D4D4D4">; </span><span style="color: #6A9955">// 初期は左に歩かせる</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Update</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">_Move</span><span style="color: #D4D4D4">();              </span><span style="color: #6A9955">// 移動処理</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// 移動処理</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">_Move</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_rigid</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">velocity</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Vector2</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_moveDirection</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4"> * </span><span style="color: #9CDCFE">_moveSpeed</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">_rigid</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">velocity</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<h2 class="wp-block-heading"><span id="toc4">③各処理の説明（初心者向け）</span></h2>



<h3 class="wp-block-heading"><span id="toc5">Start</span></h3>



<ul class="wp-block-list">
<li>Rigidbody2Dのコンポーネント（Unity上で設定した）を取得して移動に使えるようにする</li>



<li>最初は「左へ進む」ように設定</li>
</ul>



<h3 class="wp-block-heading"><span id="toc6">Update</span></h3>



<ul class="wp-block-list">
<li>毎フレーム <code>_Move()</code> を呼び出して移動させます。</li>
</ul>



<h3 class="wp-block-heading"><span id="toc7">_Move</span></h3>



<ul class="wp-block-list">
<li>敵の横方向の速度を設定します。（移動速度はUnity上で設定したものが実行される）</li>



<li>「横向きの速度」を与えて歩かせる</li>
</ul>



<h2 class="wp-block-heading"><span id="toc8">④Enemy.csをEnemyオブジェクトに割り当てる</span></h2>



<ol class="wp-block-list">
<li>Add Componentで以下のコンポーネントを追加
<ul class="wp-block-list">
<li>Enemy.cs
<ul class="wp-block-list">
<li>Unity上の設定で「移動速度」を設定します。</li>
</ul>
</li>
</ul>
</li>
</ol>



<h2 class="wp-block-heading"><span id="toc9">⑤ 動作確認</span></h2>



<ol class="wp-block-list">
<li><code>Enemy</code> を地面に配置</li>



<li>プレイして敵が<strong>左右に歩く</strong>か確認</li>



<li>地面の端まで来たら<strong>方向転換</strong>するかチェック</li>
</ol>



<video
  src="https://naiterukaiju.com/wp-content/uploads/2025/10/無題のビデオ-‐-Clipchampで作成-2.mp4"
  autoplay
  loop
  muted
  playsinline
  width="640"
  height="360">
</video



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc10">⑥ まとめ</span></h2>



<ul class="wp-block-list">
<li>Rigidbody2D と Collider2D で物理的に動かす</li>
</ul>



<p>これで「シンプルな敵キャラ」ができました！<br>次回は<strong><span class="marker-under-red">「プレイヤーが敵に触れたらダメージを受けるようにする」</span><span class="marker-under-red">、</span><span class="marker-under-red">「体力UIの作り方」</span></strong>の実装解説を行う予定です！</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-next">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a7%e3%80%91%e6%95%b5%e3%81%ab%e8%a7%a6%e3%82%8c%e3%81%9f%e3%82%89%e3%83%80%e3%83%a1%e3%83%bc%e3%82%b8%ef%bc%81%e4%bd%93%e5%8a%9bui%e3%82%92%e4%bd%9c%e3%81%a3/" title="【Unity入門⑧】敵に触れたらダメージ！体力UIを作ってみよう" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門⑧】敵に触れたらダメージ！体力UIを作ってみよう</div><div class="blogcard-snippet internal-blogcard-snippet">前回の記事では、敵を作る方法を解説しました👾今回はそこから一歩進んで、プレイヤーが敵に触れたら体力が減る仕組みを作ってみましょう👾さらに、体力UI（HPバー）を画面に表示して、減っていく演出も追加します！⬇️画像のように、左上に赤いHPバー...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.10.12</div></div></div></div></a>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a6%e3%80%91%e6%95%b5%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%88%e3%81%86%ef%bc%81/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://naiterukaiju.com/wp-content/uploads/2025/10/無題のビデオ-‐-Clipchampで作成-2.mp4" length="121820" type="video/mp4" />

			</item>
		<item>
		<title>【Unity入門⑥】プレイヤーにカメラを追従させて2Dアクションゲーム感を出そう</title>
		<link>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a5%e3%80%91%e3%83%97%e3%83%ac%e3%82%a4%e3%83%a4%e3%83%bc%e3%81%ab%e3%82%ab%e3%83%a1%e3%83%a9%e3%82%92%e8%bf%bd%e5%be%93%e3%81%95%e3%81%9b%e3%81%a62d%e3%82%a2/</link>
					<comments>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a5%e3%80%91%e3%83%97%e3%83%ac%e3%82%a4%e3%83%a4%e3%83%bc%e3%81%ab%e3%82%ab%e3%83%a1%e3%83%a9%e3%82%92%e8%bf%bd%e5%be%93%e3%81%95%e3%81%9b%e3%81%a62d%e3%82%a2/#respond</comments>
		
		<dc:creator><![CDATA[怪獣]]></dc:creator>
		<pubDate>Wed, 01 Oct 2025 13:59:01 +0000</pubDate>
				<category><![CDATA[Unity2D入門（シリーズ）]]></category>
		<category><![CDATA[2Dゲーム]]></category>
		<category><![CDATA[Unity]]></category>
		<category><![CDATA[Unity初心者]]></category>
		<category><![CDATA[アクションゲーム]]></category>
		<category><![CDATA[カメラ]]></category>
		<category><![CDATA[カメラ処理]]></category>
		<category><![CDATA[ゲーム制作]]></category>
		<category><![CDATA[マップ作成]]></category>
		<category><![CDATA[追従]]></category>
		<guid isPermaLink="false">https://naiterukaiju.com/?p=266</guid>

					<description><![CDATA[前回の記事ではTilemapでマップを作る方法を解説しました。 横スクロールゲームを作るときに欠かせないのがプレイヤーの歩行に合わせて追従する「カメラの追従処理」です。プレイヤーが動いてもカメラが止まったままだと、すぐに [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>こんにちは！夜の街2Dアクションゲームを制作中の怪獣です🦖</p>
</div></div>



<p>前回の記事ではTilemapでマップを作る方法を解説しました。</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-prev">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a4%e3%80%91tilemap%e3%81%a7%e3%83%9e%e3%83%83%e3%83%97%e3%82%92%e4%bd%9c%e3%82%8d%e3%81%86/" title="【Unity入門⑤】Tilemapでマップを作ろう" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門⑤】Tilemapでマップを作ろう</div><div class="blogcard-snippet internal-blogcard-snippet">今回からいよいよ「マップづくり」に挑戦します。Tilemapを使えば、床や地形をペイント感覚で配置できるので、ステージ制作が一気に楽になります🦖↓実装イメージ↓この記事でやることTilemapを作成して床タイルを描くTilemapColli...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.09.28</div></div></div></div></a>
</div>



<p>横スクロールゲームを作るときに欠かせないのがプレイヤーの歩行に合わせて追従する「<strong>カメラの追従処理</strong>」です。<br>プレイヤーが動いてもカメラが止まったままだと、すぐに画面の外に出てしまいます。<br>今回は<span class="marker-under-red">「<strong>プレイヤーに合わせてカメラを動かす基本処理</strong>」</span>を実装していきます📝</p>




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-20" checked><label class="toc-title" for="toc-checkbox-20">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">①この記事で出来るようになること</a></li><li><a href="#toc2" tabindex="0">②完成コード（CameraManager.cs）</a></li><li><a href="#toc3" tabindex="0">③カメラにCameraManagerを適用する</a></li><li><a href="#toc4" tabindex="0">④動作確認</a></li><li><a href="#toc5" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">①この記事で出来るようになること</span></h2>



<ul class="wp-block-list">
<li>プレイヤーの<strong>横移動に合わせて追従</strong>するカメラ処理を作る</li>
</ul>



<video
  src="https://naiterukaiju.com/wp-content/uploads/2025/10/無題のビデオ-‐-Clipchampで作成-1.mp4"
  autoplay
  loop
  muted
  playsinline
  width="640"
  height="360">
</video



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc2">②完成コード（CameraManager.cs）</span></h2>



<p>CameraManager.csを新規作成し、カメラ処理をこちらに書いていきます。（コピペOK！）</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>using UnityEngine;

public class CameraManager : MonoBehaviour
{
    &#91;Header("追従対象")&#93;
    &#91;SerializeField&#93; private Player _player;     // Inspector側でPlayerオブジェクトをドラッグ

    &#91;Header("カメラ位置オフセット")&#93;
    public Vector3 offset = new Vector3(0f, 0f, -10f); // Zは-10で2D既定の距離

    private Transform _playerT;    // プレイヤーの位置情報を扱うための変数

    void Start()
    {
        // 1) 追従対象の参照を安全に確保
        if (_player == null)
            _player = FindObjectOfType&lt;Player>();

        if (_player != null)
            _playerT = _player.transform;
    }
    // Update のあとに毎フレーム呼ばれる処理
    void LateUpdate()
    {
        if (_playerT == null) return;

        // 2) 「プレイヤーの位置 + オフセット」を 目標位置 として計算
        Vector3 target = _playerT.position + offset;

        // 3) 横スクロール想定
        //    Y座標（縦方向）とZ座標（奥行き） は固定にして「横スクロール専用カメラ」にする
        float nextX = target.x;
        float nextY = transform.position.y;   // 縦は固定（必要なら追従に変更可）
        float nextZ = target.z;               // -10固定

        // 4) 実際にカメラを移動
        transform.position = new Vector3(nextX, nextY, nextZ);
    }
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">UnityEngine</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #9CDCFE">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">CameraManager</span><span style="color: #D4D4D4"> : </span><span style="color: #4EC9B0">MonoBehaviour</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #DCDCAA">Header</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;追従対象&quot;</span><span style="color: #D4D4D4">)&#93;</span></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">&#93; </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Player</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_player</span><span style="color: #D4D4D4">;     </span><span style="color: #6A9955">// Inspector側でPlayerオブジェクトをドラッグ</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #DCDCAA">Header</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;カメラ位置オフセット&quot;</span><span style="color: #D4D4D4">)&#93;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Vector3</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">offset</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Vector3</span><span style="color: #D4D4D4">(0</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">, 0</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">, -10</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">); </span><span style="color: #6A9955">// Zは-10で2D既定の距離</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Transform</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_playerT</span><span style="color: #D4D4D4">;    </span><span style="color: #6A9955">// プレイヤーの位置情報を扱うための変数</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Start</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 1) 追従対象の参照を安全に確保</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_player</span><span style="color: #D4D4D4"> == </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">_player</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">FindObjectOfType</span><span style="color: #D4D4D4">&lt;</span><span style="color: #4EC9B0">Player</span><span style="color: #D4D4D4">&gt;();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_player</span><span style="color: #D4D4D4"> != </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">_playerT</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_player</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// Update のあとに毎フレーム呼ばれる処理</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">LateUpdate</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_playerT</span><span style="color: #D4D4D4"> == </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 2) 「プレイヤーの位置 + オフセット」を 目標位置 として計算</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">Vector3</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">target</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_playerT</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">offset</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 3) 横スクロール想定</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">//    Y座標（縦方向）とZ座標（奥行き） は固定にして「横スクロール専用カメラ」にする</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">nextX</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">target</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">nextY</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4">;   </span><span style="color: #6A9955">// 縦は固定（必要なら追従に変更可）</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">nextZ</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">target</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">z</span><span style="color: #D4D4D4">;               </span><span style="color: #6A9955">// -10固定</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 4) 実際にカメラを移動</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Vector3</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">nextX</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">nextY</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">nextZ</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>LateUpdateはUpdate のあとに毎フレーム呼ばれる関数です。</p>



<p>そのたびに</p>



<p>プレイヤーの位置を取得<br>↓<br>カメラを移動</p>



<p>という処理を繰り返すことで、<br><strong>常にプレイヤーを追従するカメラ</strong>が完成します！</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>1行1行の処理が何をしているかは以下の記事で詳しく解説しているので、<br>ご興味あればこちらも参照してみてください🦖</p>
</div></div>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-together">

<a href="https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91%e3%83%97%e3%83%ac%e3%82%a4%e3%83%a4%e3%83%bc%e3%82%92%e8%bf%bd%e5%be%93%e3%81%95%e3%81%9b%e3%82%8b%e3%82%ab%e3%83%a1%e3%83%a9%e3%81%ae%e5%ae%9f%e8%a3%85%e6%96%b9%e6%b3%95/" title="【Unity2D】プレイヤーを追従させるカメラを作るには？｜実装方法（コード全文・解説付き）" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-14-233140-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-14-233140-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-14-233140-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-14-233140-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity2D】プレイヤーを追従させるカメラを作るには？｜実装方法（コード全文・解説付き）</div><div class="blogcard-snippet internal-blogcard-snippet">Unityで2Dアクションゲームを作っていると、「プレイヤーの歩行に合わせてカメラも追従させたい」「プレイヤーを歩かせてもカメラが追従しない」「横だけ追従したい」といったことはありませんか？この記事では、プレイヤーにカメラを追従させる基本実...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.03.14</div></div></div></div></a>
</div>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc3">③カメラにCameraManagerを適用する</span></h2>



<p>カメラオブジェクト（MainCamera）を選択した状態でAdd Componentをクリックし、<br>先ほど作った<strong>CameraManager</strong>を選択します。</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="710" height="420" src="https://naiterukaiju.com/wp-content/uploads/2025/10/Unityで2Dアクションゲームを作ろう！のコピーのコピー-2.png" alt="CameraManagerを選択してAdd Componentを押す" class="wp-image-961" style="width:710px;height:auto" srcset="https://naiterukaiju.com/wp-content/uploads/2025/10/Unityで2Dアクションゲームを作ろう！のコピーのコピー-2.png 710w, https://naiterukaiju.com/wp-content/uploads/2025/10/Unityで2Dアクションゲームを作ろう！のコピーのコピー-2-300x177.png 300w" sizes="(max-width: 710px) 100vw, 710px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="710" height="420" src="https://naiterukaiju.com/wp-content/uploads/2025/10/Unityで2Dアクションゲームを作ろう！のコピーのコピー-3.png" alt="CameraManagerを選択" class="wp-image-963" srcset="https://naiterukaiju.com/wp-content/uploads/2025/10/Unityで2Dアクションゲームを作ろう！のコピーのコピー-3.png 710w, https://naiterukaiju.com/wp-content/uploads/2025/10/Unityで2Dアクションゲームを作ろう！のコピーのコピー-3-300x177.png 300w" sizes="(max-width: 710px) 100vw, 710px" /></figure>



<p><strong>「追従対象」</strong>にプレイヤーをドラッグします。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="710" height="420" src="https://naiterukaiju.com/wp-content/uploads/2025/10/Unityで2Dアクションゲームを作ろう！のコピーのコピー.png" alt="追従対象をドラッグ" class="wp-image-960" srcset="https://naiterukaiju.com/wp-content/uploads/2025/10/Unityで2Dアクションゲームを作ろう！のコピーのコピー.png 710w, https://naiterukaiju.com/wp-content/uploads/2025/10/Unityで2Dアクションゲームを作ろう！のコピーのコピー-300x177.png 300w" sizes="(max-width: 710px) 100vw, 710px" /></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc4">④動作確認</span></h2>



<ol class="wp-block-list">
<li>ゲームを再生し、プレイヤーを左右に歩かせる
<ul class="wp-block-list">
<li>右に歩くとカメラが追従する</li>
</ul>
</li>
</ol>



<video
  src="https://naiterukaiju.com/wp-content/uploads/2025/10/無題のビデオ-‐-Clipchampで作成-1.mp4"
  autoplay
  loop
  muted
  playsinline
  width="640"
  height="360">
</video



<p><br>➡️プレイヤーに合わせてカメラを追従させることが出来ました！</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><span id="toc5">まとめ</span></h2>



<ul class="wp-block-list">
<li>プレイヤーの位置を基準に、カメラを動かす処理を作成した</li>



<li>縦と奥行きは固定、横だけ追従</li>
</ul>



<p>カメラを追従させるようにして大分2Dゲームらしくなってきました！<br>しかしまだ敵が一人もおらず寂しい状態なので、<br>次回の記事では、いよいよ敵を使っていこうと思います！👾</p>



<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-next">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a6%e3%80%91%e6%95%b5%e3%82%92%e4%bd%9c%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%88%e3%81%86%ef%bc%81/" title="【Unity入門⑦】2Dアクションゲームで敵を作ってみよう！" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門⑦】2Dアクションゲームで敵を作ってみよう！</div><div class="blogcard-snippet internal-blogcard-snippet">前回の記事では、プレイヤーにカメラを追従させる実装方法を解説しました。横スクロールアクションといえば「敵キャラ」👾！今回は 地面の上を左右に歩くだけのシンプルな敵 を作ってみましょう！↓実装イメージ↓(); _moveDirection =...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.10.05</div></div></div></div></a>
</div>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a5%e3%80%91%e3%83%97%e3%83%ac%e3%82%a4%e3%83%a4%e3%83%bc%e3%81%ab%e3%82%ab%e3%83%a1%e3%83%a9%e3%82%92%e8%bf%bd%e5%be%93%e3%81%95%e3%81%9b%e3%81%a62d%e3%82%a2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://naiterukaiju.com/wp-content/uploads/2025/10/無題のビデオ-‐-Clipchampで作成-1.mp4" length="3356935" type="video/mp4" />

			</item>
	</channel>
</rss>
