<?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>点滅 | 怪獣の2Dアクションゲーム制作開発記</title>
	<atom:link href="https://naiterukaiju.com/tag/%e7%82%b9%e6%bb%85/feed/" rel="self" type="application/rss+xml" />
	<link>https://naiterukaiju.com</link>
	<description>👾Unityでゲームを作ったり、実装に役立ちそうな情報を記録👾</description>
	<lastBuildDate>Sun, 16 Aug 2026 05:18:56 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.4</generator>

<image>
	<url>https://naiterukaiju.com/wp-content/uploads/2026/05/cropped-kaiju-1-32x32.png</url>
	<title>点滅 | 怪獣の2Dアクションゲーム制作開発記</title>
	<link>https://naiterukaiju.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【Unity2D】ダメージを連続で受けないように無敵時間を実装する方法｜点滅処理も追加【初心者向け】</title>
		<link>https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91%e3%83%80%e3%83%a1%e3%83%bc%e3%82%b8%e3%82%92%e9%80%a3%e7%b6%9a%e3%81%a7%e5%8f%97%e3%81%91%e3%81%aa%e3%81%84%e3%82%88%e3%81%86%e3%81%ab%e7%84%a1%e6%95%b5%e6%99%82%e9%96%93/</link>
					<comments>https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91%e3%83%80%e3%83%a1%e3%83%bc%e3%82%b8%e3%82%92%e9%80%a3%e7%b6%9a%e3%81%a7%e5%8f%97%e3%81%91%e3%81%aa%e3%81%84%e3%82%88%e3%81%86%e3%81%ab%e7%84%a1%e6%95%b5%e6%99%82%e9%96%93/#respond</comments>
		
		<dc:creator><![CDATA[怪獣]]></dc:creator>
		<pubDate>Sun, 16 Aug 2026 05:15:54 +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>
		<category><![CDATA[無敵時間]]></category>
		<guid isPermaLink="false">https://naiterukaiju.com/?p=1716</guid>

					<description><![CDATA[Unityで敵との接触ダメージを実装したとき、次のような問題が起きることがあります。 そこで今回の記事では、 『プレイヤーが一度ダメージを受けたあと、一定時間ダメージを受けない「無敵時間」を実装させる』方法を当記事で解説 [&#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/07/IMG_7446.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p class="wp-block-paragraph">こんにちは！<br>個人でゲームを作っている怪獣と申します🦖</p>
</div></div>



<p class="wp-block-paragraph">Unityで敵との接触ダメージを実装したとき、次のような問題が起きることがあります。</p>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-9 sbs-think 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/06/kaisya_komaru_man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p class="wp-block-paragraph">「敵に触れている間、HPが一気に減ってしまう。」<br>「一度接触しただけなのに何度もダメージを受ける。」<br>「ダメージを受けたことが画面上で分かりにくい。」</p>
</div></div>



<p class="wp-block-paragraph">そこで今回の記事では、</p>



<p class="wp-block-paragraph">『<span style="" class="marker-under-red"><b>プレイヤーが一度ダメージを受けたあと、</b></span><br><span style="" class="marker-under-red"><b>一定時間ダメージを受けない「無敵時間」を実装</b></span><strong><span class="marker-under-red">させる</span></strong>』方法を当記事で解説しようと思います！</p>



<p class="wp-block-paragraph">さらに、<br><strong><span class="marker-under-red">無敵時間中にプレイヤーを点滅させて、</span></strong><br><strong><span class="marker-under-red">現在ダメージを受けない状態であること</span></strong>を視覚的に分かりやすくしていきます！</p>



<p class="wp-block-paragraph">今回実装する処理の流れは、次のとおりです。</p>



<pre class="wp-block-preformatted">1.プレイヤーが敵に接触する<br>2.HPを減らす<br>3.一定時間、無敵状態にする<br>4.無敵時間中はプレイヤーを点滅させる<br>5.一定時間が経過したら、再びダメージを受けられるようにする</pre>



<p class="wp-block-paragraph">この記事では、まず<strong>簡単な敵との接触ダメージを使って仕組み</strong>を解説します。</p>



<p class="wp-block-paragraph">記事の後半では、実際に制作中のゲームでボスのマシンガン攻撃に無敵時間を適用した例も紹介します🦖</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></li><li><a href="#toc3" tabindex="0">①無敵状態を管理する変数を追加する</a><ol><li><a href="#toc4" tabindex="0">_invincibleDuration</a></li><li><a href="#toc5" tabindex="0">_blinkInterval</a></li><li><a href="#toc6" tabindex="0">_isInvincible</a></li><li><a href="#toc7" tabindex="0">_spriteRenderer</a></li><li><a href="#toc8" tabindex="0">_defaultColor</a></li></ol></li><li><a href="#toc9" tabindex="0">②AwakeでSpriteRendererを取得する</a></li><li><a href="#toc10" tabindex="0">③ダメージ処理に無敵判定を追加する</a><ol><li><a href="#toc11" tabindex="0">無敵時間中はダメージ処理を終了する</a></li><li><a href="#toc12" tabindex="0">ダメージを受けた直後に無敵状態にする</a></li></ol></li><li><a href="#toc13" tabindex="0">④コルーチンで無敵時間を作る</a><ol><li><a href="#toc14" tabindex="0">点滅処理の仕組み</a></li><li><a href="#toc15" tabindex="0">無敵時間終了後に通常状態へ戻す</a></li></ol></li><li><a href="#toc16" tabindex="0">⑤敵との接触判定を追加する</a></li><li><a href="#toc17" tabindex="0">⑥敵オブジェクトの設定</a><ol><li><a href="#toc18" tabindex="0">Enemyタグを設定する</a></li><li><a href="#toc19" tabindex="0">Collider2Dを設定する</a></li></ol></li><li><a href="#toc20" tabindex="0">⑦Inspectorで無敵時間を調整する</a></li><li><a href="#toc21" tabindex="0">完成した全コード</a></li><li><a href="#toc22" tabindex="0">TriggerをONにしている場合の方法</a></li><li><a href="#toc23" tabindex="0">プレイヤーが点滅しない場合の原因</a></li><li><a href="#toc24" tabindex="0">制作中のゲームで実装した例</a></li><li><a href="#toc25" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

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



<p class="wp-block-paragraph">今回の実装が完成すると、<br><strong><span class="marker-under-red">敵に触れたときにHPが1だけ減り、その後は一定時間ダメージを受けなくなります。</span></strong><br><strong><span class="marker-under-red">無敵時間中はプレイヤーが点滅し、無敵時間が終了すると再びダメージを受けられる状態に戻ります！</span></strong></p>



<video
  src="https://naiterukaiju.com/wp-content/uploads/2026/07/点滅.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 class="wp-block-paragraph">最初に、無敵時間を設定していない場合の動きを確認してみましょう。<br>今回は、<strong>プレイヤーが敵に触れている間、ダメージ処理を呼び出す簡単な実装</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>private void OnCollisionStay2D(Collision2D collision)
{
    if (collision.gameObject.CompareTag("Enemy"))
    {
        _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: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">OnCollisionStay2D</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></code></pre></div>



<p class="wp-block-paragraph"><code>OnCollisionStay2D</code>は、オブジェクト同士が接触している間、繰り返し呼び出されます。<br>そのため、このままではプレイヤーが敵に触れている間、何度も<code>_TakeDamage</code>が実行されてしまいます。<br>例えばHPが5あったとしても、敵に少し触れただけで次のようにHPが減少します。</p>



<pre class="wp-block-code"><code>HP5
↓
HP4
↓
HP3
↓
HP2
↓
HP1
↓
HP0
</code></pre>



<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/07/IMG_7446.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p class="wp-block-paragraph">プレイヤーから見ると、一度しか敵に触れていないように見えても、<br>内部では短時間にこのように何度もダメージ処理をくらってしまいます。</p>
</div></div>



<video
  src="https://naiterukaiju.com/wp-content/uploads/2026/07/無敵なし.mp4"
  autoplay
  loop
  muted
  playsinline
  width="640"
  height="360">
</video



<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/07/IMG_7446.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p class="wp-block-paragraph">この問題を防ぐために、ダメージを受けたあとは一定時間、次のダメージ処理を受け付けないようにします！</p>
</div></div>



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



<h2 class="wp-block-heading"><span id="toc3">①無敵状態を管理する変数を追加する</span></h2>



<p class="wp-block-paragraph">最初に、Playerスクリプトへ無敵時間に必要な変数を追加します。</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>&#91;SerializeField, Header("無敵時間")&#93;
private float _invincibleDuration = 1.0f;

&#91;SerializeField, Header("点滅間隔")&#93;
private float _blinkInterval = 0.1f;

private bool _isInvincible;

private SpriteRenderer _spriteRenderer;
private Color _defaultColor;</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">)&#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">_invincibleDuration</span><span style="color: #D4D4D4"> = 1.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">&#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: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_blinkInterval</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: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">bool</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_isInvincible</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">SpriteRenderer</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_spriteRenderer</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Color</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_defaultColor</span><span style="color: #D4D4D4">;</span></span></code></pre></div>



<p class="wp-block-paragraph">それぞれの変数には、次の役割があります。</p>



<h3 class="wp-block-heading"><span id="toc4">_invincibleDuration</span></h3>



<p class="wp-block-paragraph">ダメージを受けたあと、無敵状態を継続する時間です。<br>今回は初期値を<code>1.0f</code>にしているため、<strong><span class="marker-under-red">1秒間ダメージを受けなくなります。</span></strong></p>



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



<p class="wp-block-paragraph">無敵時間中にプレイヤーを点滅させる間隔です。<br>値を小さくすると速く点滅し、値を大きくするとゆっくり点滅します。</p>



<h3 class="wp-block-heading"><span id="toc6">_isInvincible</span></h3>



<p class="wp-block-paragraph">現在プレイヤーが無敵状態かどうかを管理する変数です。</p>



<ul class="wp-block-list">
<li><code>true</code>：無敵状態</li>



<li><code>false</code>：通常状態</li>
</ul>



<p class="wp-block-paragraph">となります。</p>



<h3 class="wp-block-heading"><span id="toc7">_spriteRenderer</span></h3>



<p class="wp-block-paragraph">プレイヤーの表示を点滅させるために使用する<code>SpriteRenderer</code>です。</p>



<h3 class="wp-block-heading"><span id="toc8">_defaultColor</span></h3>



<p class="wp-block-paragraph">点滅処理が終わったあと、プレイヤーの色を元に戻すために使用します。</p>



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



<h2 class="wp-block-heading"><span id="toc9">②AwakeでSpriteRendererを取得する</span></h2>



<p class="wp-block-paragraph">続いて、<code>Awake</code>でプレイヤーの<code>SpriteRenderer</code>を取得するようにします。</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 Awake()
{
    _spriteRenderer = GetComponent&lt;SpriteRenderer>();

    if (_spriteRenderer != null)
    {
        _defaultColor = _spriteRenderer.color;
    }
}</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">_spriteRenderer</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>
<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">_spriteRenderer</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">_defaultColor</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_spriteRenderer</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">color</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></code></pre></div>



<p class="wp-block-paragraph"><code>GetComponent&lt;SpriteRenderer&gt;()</code>を使用して、Playerオブジェクトに設定されている<code>SpriteRenderer</code>（プレイヤーの画像）を取得しています。<br>取得したSpriteRendererの色は、<code>_defaultColor</code>へ保存しておきます。<br>無敵時間終了後にこの色を再設定することで、<strong><span class="marker-under-red">点滅によって変更した透明度を元に戻すことができます</span><span class="marker-under-red">！</span></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/07/IMG_7446.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p class="wp-block-paragraph">すでに<code>Awake</code>関数がある場合は、新しく<code>Awake</code>を追加するのではなく、既存の<code>Awake</code>内へ処理を追加してください！</p>
</div></div>



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



<h2 class="wp-block-heading"><span id="toc10">③ダメージ処理に無敵判定を追加する</span></h2>



<p class="wp-block-paragraph">現在のダメージ処理は、次のようになっているとします。</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 _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();
    }
}
</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">_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: #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></code></pre></div>



<p class="wp-block-paragraph">この処理へ、無敵状態の確認と無敵時間を開始する処理を追加します。</p>



<p class="wp-block-paragraph"><span class="marker-under-blue">↓<strong>修正後のコードは次のとおりです。</strong></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;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 _TakeDamage(int damage)
{
    // 無敵時間中、またはHPが0の場合はダメージを受けない
    if (_isInvincible || _currentHP &lt;= 0)
    {
        return;
    }

    // ダメージを受けた直後から無敵状態にする
    _isInvincible = true;

    _currentHP -= damage;
    _currentHP = Mathf.Clamp(_currentHP, 0, _maxHP);

    _UpdateHPBar();

    if (_currentHP &lt;= 0)
    {
        // 点滅で変更した色を元に戻す
        if (_spriteRenderer != null)
        {
            _spriteRenderer.color = _defaultColor;
        }

        // 操作を止める
        if (_input != null)
        {
            _input.enabled = false;
        }

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

        return;
    }

    // 無敵時間と点滅処理を開始する
    StartCoroutine(_InvincibleCoroutine());
}
</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">_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: #6A9955">// 無敵時間中、またはHPが0の場合はダメージを受けない</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">_isInvincible</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: #C586C0">return</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: #9CDCFE">_isInvincible</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: #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: #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">_spriteRenderer</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">_spriteRenderer</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">color</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_defaultColor</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: #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>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><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 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>
<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">Show</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: #C586C0">return</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: #DCDCAA">StartCoroutine</span><span style="color: #D4D4D4">(</span><span style="color: #DCDCAA">_InvincibleCoroutine</span><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"/>



<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/07/IMG_7446.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p class="wp-block-paragraph">次に、追加した処理を順番に確認していきましょう！</p>
</div></div>



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



<h3 class="wp-block-heading"><span id="toc11">無敵時間中はダメージ処理を終了する</span></h3>



<p class="wp-block-paragraph">最初に、次の条件を追加しています。</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>if (_isInvincible || _currentHP &lt;= 0)
{
    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">_isInvincible</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: #C586C0">return</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph"><code>_isInvincible</code>が<code>true</code>の場合は、すでに無敵時間中です。<br>そのため、これ以降のHPを減らす処理を実行せず、<code>return</code>でメソッドを終了します。<br>また、HPがすでに0の場合も、それ以上ダメージ処理を実行しないようにしています。</p>



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



<h3 class="wp-block-heading"><span id="toc12">ダメージを受けた直後に無敵状態にする</span></h3>



<p class="wp-block-paragraph">続いて、次の処理で無敵状態を開始します。</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>_isInvincible = 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">_isInvincible</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 class="wp-block-paragraph">ダメージを受けた直後に<code>true</code>へ変更することで、次に<code>_TakeDamage</code>が呼び出されたときは、先ほど追加した条件によって処理が終了します。</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>if (_isInvincible)
{
    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">_isInvincible</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">return</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">これにより、敵に触れ続けて<code>_TakeDamage</code>が何度も呼び出された場合でも、HPが連続で減らなくなります！</p>



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



<h2 class="wp-block-heading"><span id="toc13">④コルーチンで無敵時間を作る</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/07/IMG_7446.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p class="wp-block-paragraph">次に、無敵時間と点滅を管理するコルーチンを作成します。<br>Player側のスクリプトへ次の処理を追加してください。</p>
</div></div>



<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 IEnumerator _InvincibleCoroutine()
{
    // 無敵時間が始まってからの経過時間を管理する
    float elapsedTime = 0f;

    // 経過時間が設定した無敵時間を超えるまで点滅処理を繰り返す
    while (elapsedTime &lt; _invincibleDuration)
    {
        // SpriteRendererが取得できている場合
        if (_spriteRenderer != null)
        {
            // プレイヤーの元の色をコピーする
            Color transparentColor = _defaultColor;

            // 透明度（Alpha値）を0.3にして半透明にする
            transparentColor.a = 0.3f;

            // 半透明にした色をプレイヤーに設定する
            _spriteRenderer.color = transparentColor;
        }

        // 設定した点滅間隔だけ処理を待つ
        yield return new WaitForSeconds(_blinkInterval);

        // SpriteRendererが取得できている場合
        if (_spriteRenderer != null)
        {
            // プレイヤーの色を元の色に戻す
            _spriteRenderer.color = _defaultColor;
        }

        // 再び設定した点滅間隔だけ処理を待つ
        yield return new WaitForSeconds(_blinkInterval);

        // 「半透明で待った時間 + 元の色で待った時間」を経過時間に加算する
        elapsedTime += _blinkInterval * 2;
    }

    // SpriteRendererが取得できている場合
    if (_spriteRenderer != null)
    {
        // 点滅終了後、念のためプレイヤーの色を元に戻す
        _spriteRenderer.color = _defaultColor;
    }

    // 無敵状態を解除して、再びダメージを受けられるようにする
    _isInvincible = 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">IEnumerator</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">_InvincibleCoroutine</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">elapsedTime</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 style="color: #6A9955">// 経過時間が設定した無敵時間を超えるまで点滅処理を繰り返す</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">while</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">elapsedTime</span><span style="color: #D4D4D4"> &lt; </span><span style="color: #9CDCFE">_invincibleDuration</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">// SpriteRendererが取得できている場合</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">_spriteRenderer</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: #6A9955">// プレイヤーの元の色をコピーする</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">Color</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">transparentColor</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_defaultColor</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #6A9955">// 透明度（Alpha値）を0.3にして半透明にする</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">transparentColor</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">a</span><span style="color: #D4D4D4"> = 0.3</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">_spriteRenderer</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">color</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">transparentColor</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: #C586C0">yield</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">WaitForSeconds</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_blinkInterval</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// SpriteRendererが取得できている場合</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">_spriteRenderer</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: #6A9955">// プレイヤーの色を元の色に戻す</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">_spriteRenderer</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">color</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_defaultColor</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: #C586C0">yield</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">WaitForSeconds</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_blinkInterval</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">elapsedTime</span><span style="color: #D4D4D4"> += </span><span style="color: #9CDCFE">_blinkInterval</span><span style="color: #D4D4D4"> * </span><span style="color: #B5CEA8">2</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">// SpriteRendererが取得できている場合</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">_spriteRenderer</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: #6A9955">// 点滅終了後、念のためプレイヤーの色を元に戻す</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_spriteRenderer</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">color</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_defaultColor</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: #9CDCFE">_isInvincible</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 class="wp-block-paragraph"><code>IEnumerator</code>を使用するため、スクリプトの上部に次の記述が必要です。<br>※すでに記述されている場合は、追加する必要はありません。</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;</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></code></pre></div>



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



<h5 class="wp-block-heading">コルーチンとは？</h5>



<p class="wp-block-paragraph">一言でいうと、<br><strong><span class="marker-under-red">「途中で一時停止し、あとで続きを実行できる処理」</span></strong>です。</p>



<p class="wp-block-paragraph">普通の関数は、</p>



<pre class="wp-block-code"><code>スタート
 ↓
処理①
 ↓
処理②
 ↓
処理③
 ↓
終了</code></pre>



<p class="wp-block-paragraph">という風に上から順に実行されてきますが、</p>



<p class="wp-block-paragraph">コルーチンの場合は、</p>



<pre class="wp-block-code"><code>スタート
 ↓
処理①
 ↓
一時停止
 ↓
（1秒後）
 ↓
処理②
 ↓
終了</code></pre>



<p class="wp-block-paragraph">という違いがあり、コルーチンなら途中で止めることができます！<br>今回のように無敵時間を実装する場合に最適です！</p>



<pre class="wp-block-code"><code>ダメージ
 ↓
無敵ON
 ↓
1秒待つ
 ↓
無敵OFF</code></pre>



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



<h3 class="wp-block-heading"><span id="toc14">点滅処理の仕組み</span></h3>



<p class="wp-block-paragraph">点滅処理では、プレイヤー画像の透明度を変更しています。</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>Color transparentColor = _defaultColor;
transparentColor.a = 0.3f;

_spriteRenderer.color = transparentColor;
</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">Color</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">transparentColor</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_defaultColor</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #9CDCFE">transparentColor</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">a</span><span style="color: #D4D4D4"> = 0.3</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #9CDCFE">_spriteRenderer</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">color</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">transparentColor</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span></code></pre></div>



<p class="wp-block-paragraph">Colorの<code>a</code>は、画像の透明度を表します。</p>



<ul class="wp-block-list">
<li><code>1.0f</code>：完全に表示される</li>



<li><code>0.5f</code>：半透明になる</li>



<li><code>0.0f</code>：完全に透明になる</li>
</ul>



<p class="wp-block-paragraph">今回は<code>0.3f</code>を設定しているため、プレイヤーが薄く表示されます。<br>一定時間待ったあと、保存しておいた元の色へ戻します。</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>yield return new WaitForSeconds(_blinkInterval);

_spriteRenderer.color = _defaultColor;</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">yield</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">WaitForSeconds</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_blinkInterval</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #9CDCFE">_spriteRenderer</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">color</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_defaultColor</span><span style="color: #D4D4D4">;</span></span></code></pre></div>



<p class="wp-block-paragraph">この処理を無敵時間が終了するまで繰り返すことで、プレイヤーが点滅しているように見えます✨</p>



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



<h3 class="wp-block-heading"><span id="toc15">無敵時間終了後に通常状態へ戻す</span></h3>



<p class="wp-block-paragraph">点滅処理が終了したら、次の処理で無敵状態を解除します。</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>_isInvincible = 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">_isInvincible</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">false</span><span style="color: #D4D4D4">;</span></span></code></pre></div>



<p class="wp-block-paragraph">これによって、次に敵へ接触したときは再びダメージを受けられるようになります。<br>↓無敵時間中の状態は、次のように変化します。</p>



<pre class="wp-block-code"><code>敵に接触する
↓
HPが1減る
↓
_isInvincibleをtrueにする
↓
プレイヤーが点滅する
↓
一定時間経過
↓
_isInvincibleをfalseに戻す
</code></pre>



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



<h2 class="wp-block-heading"><span id="toc16">⑤敵との接触判定を追加する</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/07/IMG_7446.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p class="wp-block-paragraph">今回は例として、プレイヤーが<code>Enemy</code>タグの付いた敵に触れている間、ダメージ処理を呼び出します。<br>Playerスクリプトへ次の処理を追加します！</p>
</div></div>



<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"))
        {
            _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: #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">_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></code></pre></div>



<p class="wp-block-paragraph"><code>OnCollisionStay2D</code>は、Collider2D同士が接触している間、繰り返し呼び出されます。<br>しかし、③の手順で<code>_TakeDamage</code>内に以下の無敵判定を追加しているため、HPが減るのは最初の1回だけになります。<br>無敵時間が終了したあとも敵に接触し続けている場合は、再びダメージを受けます。</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>if (_isInvincible)
{
    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">_isInvincible</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">return</span><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="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/07/IMG_7446.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p class="wp-block-paragraph">敵オブジェクトの用意をしておきます。<br>敵オブジェクトには、次の設定はしておきましょう！</p>
</div></div>



<ul class="wp-block-list">
<li>SpriteRenderer</li>



<li>Collider2D</li>



<li>必要に応じてRigidbody2D</li>



<li>Enemyタグ</li>
</ul>



<h3 class="wp-block-heading"><span id="toc18">Enemyタグを設定する</span></h3>



<p class="wp-block-paragraph">敵オブジェクトを選択し、Inspector上部の「Tag」から<code>Enemy</code>を設定します。<br>まだEnemyタグがない場合は、以下の手順に沿って新しく追加しましょう！</p>



<ol class="wp-block-list">
<li><strong>敵オブジェクトを選択する</strong></li>



<li><strong>Inspector 上部の Tag を開く</strong></li>



<li><strong><code>Enemy</code> がなければ Add Tag で追加する</strong></li>



<li><strong>敵オブジェクトに <code>Enemy</code> タグを設定する</strong></li>
</ol>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="418" src="https://naiterukaiju.com/wp-content/uploads/2025/10/スクリーンショット-2025-10-11-225746-1024x418.png" alt="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>



<h3 class="wp-block-heading"><span id="toc19">Collider2Dを設定する</span></h3>



<p class="wp-block-paragraph">敵オブジェクトには、次のようなCollider2Dを設定します。</p>



<ul class="wp-block-list">
<li>Box Collider 2D</li>



<li>Capsule Collider 2D</li>



<li>Circle Collider 2D</li>
</ul>



<p class="wp-block-paragraph">敵の形に合わせて選びましょう。<br><strong>また、PlayerオブジェクトにもCollider2DとRigidbody2Dが必要です。</strong></p>



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



<h2 class="wp-block-heading"><span id="toc20">⑦Inspectorで無敵時間を調整する</span></h2>



<p class="wp-block-paragraph">Unityへ戻り、Playerオブジェクトを選択します。<br>Playerスクリプトに、次の項目が表示されます。</p>



<ul class="wp-block-list">
<li>無敵時間</li>



<li>点滅間隔</li>
</ul>



<p class="wp-block-paragraph">まずは、次の設定ぐらいにしておきます。</p>



<pre class="wp-block-code"><code>無敵時間：1
点滅間隔：0.1
</code></pre>



<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/07/IMG_7446.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p class="wp-block-paragraph">点滅が速すぎる場合は、点滅間隔を<code>0.15</code>や<code>0.2</code>へ変更してみてください。<br>無敵時間が短いと感じる場合は、<code>1.5</code>などへ変更できます。<br>ゲームの難易度や敵の攻撃方法に合わせて調整しましょう。</p>
</div></div>



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



<h2 class="wp-block-heading"><span id="toc21">完成した全コード</span></h2>



<p class="wp-block-paragraph">今回追加した処理をまとめると、次のようになります！</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 UnityEngine;

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

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

    private int _currentHP;
    
    &#91;SerializeField, Header("最大HP")&#93;
    private int _maxHP = 5;

    &#91;SerializeField, Header("無敵時間")&#93;
    private float _invincibleDuration = 1.0f;

    &#91;SerializeField, Header("点滅間隔")&#93;
    private float _blinkInterval = 0.1f;

    private int _currentHP;
    private bool _isInvincible;

    private SpriteRenderer _spriteRenderer;
    private Color _defaultColor;

    private void Awake()
    {
        _spriteRenderer = GetComponent&lt;SpriteRenderer>();

        if (_spriteRenderer != null)
        {
            _defaultColor = _spriteRenderer.color;
        }
    }

    private void Start()
    {
        _currentHP = _maxHP;
    }

    private void OnCollisionStay2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Enemy"))
        {
            _TakeDamage(1);
        }
    }

    private void _TakeDamage(int damage)
    {
        // 無敵時間中、またはHPが0の場合はダメージを受けない
        if (_isInvincible || _currentHP &lt;= 0)
        {
            return;
        }

        // ダメージを受けた直後から無敵状態にする
        _isInvincible = true;

        _currentHP -= damage;
        _currentHP = Mathf.Clamp(_currentHP, 0, _maxHP);

        _UpdateHPBar();

        if (_currentHP &lt;= 0)
        {
            // 点滅で変更した色を元に戻す
            if (_spriteRenderer != null)
            {
                _spriteRenderer.color = _defaultColor;
            }

            // 操作を止める
            if (_input != null)
            {
                _input.enabled = false;
            }

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

            return;
        }

        // 無敵時間と点滅処理を開始する
        StartCoroutine(_InvincibleCoroutine());
    }

    private IEnumerator _InvincibleCoroutine()
    {
        // 無敵時間が始まってからの経過時間を管理する
        float elapsedTime = 0f;
    
        // 経過時間が設定した無敵時間を超えるまで点滅処理を繰り返す
        while (elapsedTime &lt; _invincibleDuration)
        {
            // SpriteRendererが取得できている場合
            if (_spriteRenderer != null)
            {
                // プレイヤーの元の色をコピーする
                Color transparentColor = _defaultColor;
    
                // 透明度（Alpha値）を0.3にして半透明にする
                transparentColor.a = 0.3f;
    
                // 半透明にした色をプレイヤーに設定する
                _spriteRenderer.color = transparentColor;
            }
    
            // 設定した点滅間隔だけ処理を待つ
            yield return new WaitForSeconds(_blinkInterval);
    
            // SpriteRendererが取得できている場合
            if (_spriteRenderer != null)
            {
                // プレイヤーの色を元の色に戻す
                _spriteRenderer.color = _defaultColor;
            }
    
            // 再び設定した点滅間隔だけ処理を待つ
            yield return new WaitForSeconds(_blinkInterval);
    
            // 「半透明で待った時間 + 元の色で待った時間」を経過時間に加算する
            elapsedTime += _blinkInterval * 2;
        }
    
        // SpriteRendererが取得できている場合
        if (_spriteRenderer != null)
        {
            // 点滅終了後、念のためプレイヤーの色を元に戻す
            _spriteRenderer.color = _defaultColor;
        }
    
        // 無敵状態を解除して、再びダメージを受けられるようにする
        _isInvincible = false;
    }

    private void _UpdateHPBar()
    {
        // 既存のHPバー更新処理など
       if (_hpBarFill == null) return;

        _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">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">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">, </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">    &#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">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">    </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">    &#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">_invincibleDuration</span><span style="color: #D4D4D4"> = 1.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">    &#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">_blinkInterval</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: #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">    </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">_isInvincible</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">SpriteRenderer</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_spriteRenderer</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">Color</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_defaultColor</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: #9CDCFE">_spriteRenderer</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>
<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">_spriteRenderer</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">_defaultColor</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_spriteRenderer</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">color</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: #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>
<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">OnCollisionStay2D</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: #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: #6A9955">// 無敵時間中、またはHPが0の場合はダメージを受けない</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">_isInvincible</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: #C586C0">return</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: #9CDCFE">_isInvincible</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: #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: #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">_spriteRenderer</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">_spriteRenderer</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">color</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_defaultColor</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: #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>
<span class="line"><span style="color: #D4D4D4">            {</span></span>
<span class="line"><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 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>
<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">Show</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: #C586C0">return</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: #DCDCAA">StartCoroutine</span><span style="color: #D4D4D4">(</span><span style="color: #DCDCAA">_InvincibleCoroutine</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: #9CDCFE">IEnumerator</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">_InvincibleCoroutine</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">elapsedTime</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: #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">while</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">elapsedTime</span><span style="color: #D4D4D4"> &lt; </span><span style="color: #9CDCFE">_invincibleDuration</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">// SpriteRendererが取得できている場合</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">_spriteRenderer</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: #6A9955">// プレイヤーの元の色をコピーする</span></span>
<span class="line"><span style="color: #D4D4D4">                </span><span style="color: #9CDCFE">Color</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">transparentColor</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_defaultColor</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">// 透明度（Alpha値）を0.3にして半透明にする</span></span>
<span class="line"><span style="color: #D4D4D4">                </span><span style="color: #9CDCFE">transparentColor</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">a</span><span style="color: #D4D4D4"> = 0.3</span><span style="color: #9CDCFE">f</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">_spriteRenderer</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">color</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">transparentColor</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: #C586C0">yield</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">WaitForSeconds</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_blinkInterval</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">// SpriteRendererが取得できている場合</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">_spriteRenderer</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: #6A9955">// プレイヤーの色を元の色に戻す</span></span>
<span class="line"><span style="color: #D4D4D4">                </span><span style="color: #9CDCFE">_spriteRenderer</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">color</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_defaultColor</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: #C586C0">yield</span><span style="color: #D4D4D4"> </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">WaitForSeconds</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_blinkInterval</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">elapsedTime</span><span style="color: #D4D4D4"> += </span><span style="color: #9CDCFE">_blinkInterval</span><span style="color: #D4D4D4"> * </span><span style="color: #B5CEA8">2</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">// SpriteRendererが取得できている場合</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">_spriteRenderer</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: #6A9955">// 点滅終了後、念のためプレイヤーの色を元に戻す</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">_spriteRenderer</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">color</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_defaultColor</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">_isInvincible</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>
<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: #6A9955">// 既存のHPバー更新処理など</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 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: #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></code></pre></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/07/IMG_7446.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p class="wp-block-paragraph">このコードの体力UIを減らす関数、「<code><strong>_UpdateHPBar</strong></code>」については、それぞれのゲームで使用している既存の処理に合わせてください！<br><code><strong>_UpdateHPBar</strong></code>の処理のソースコードは別記事で紹介しているので、詳しくはそちらをご覧ください🦖</p>
</div></div>



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

<a href="https://naiterukaiju.com/unity-2d-hp-bar-image/" title="【Unity2D】HPゲージ（体力UI）をImageで簡単に作る｜（コードあり・解説付き）【初心者向け】" 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/2026/04/Unityで2Dアクションゲームを作ろう！-5-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2026/04/Unityで2Dアクションゲームを作ろう！-5-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2026/04/Unityで2Dアクションゲームを作ろう！-5-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2026/04/Unityで2Dアクションゲームを作ろう！-5-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】HPゲージ（体力UI）をImageで簡単に作る｜（コードあり・解説付き）【初心者向け】</div><div class="blogcard-snippet internal-blogcard-snippet">Unityでゲーム制作を続けていると、「HPを数値だけで管理すると、プレイヤーにとって分かりづらい…」「体力UIを表示させるようにしたい」て感じることってあるかと思います。そんなときは、視覚的に分かる体力UIを作るのがおススメです。体力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.04.05</div></div></div></div></a>
</div>



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



<h2 class="wp-block-heading"><span id="toc22">TriggerをONにしている場合の方法</span></h2>



<p class="wp-block-paragraph">敵のCollider2Dで「Is Trigger」を有効にしている場合は、CollisionではなくTrigger用のメソッドを使用します。</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 OnTriggerStay2D(Collider2D collision)
{
    if (collision.CompareTag("Enemy"))
    {
        _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: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">OnTriggerStay2D</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">Collider2D</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: #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></code></pre></div>



<p class="wp-block-paragraph">処理の考え方は<code>OnCollisionStay2D</code>と同じです。<br>使用しているCollider2Dの設定に合わせて選択してください！</p>



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



<h2 class="wp-block-heading"><span id="toc23">プレイヤーが点滅しない場合の原因</span></h2>



<p class="wp-block-paragraph">プレイヤーが点滅しない場合は、PlayerスクリプトとSpriteRendererが別のオブジェクトに設定されている可能性があります。</p>



<p class="wp-block-paragraph">例えば、次のような構成になっている場合です。</p>



<pre class="wp-block-code"><code>Player
└── PlayerSprite
    └── SpriteRenderer
</code></pre>



<p class="wp-block-paragraph">この場合、Playerオブジェクトで次の処理を実行しても、SpriteRendererを取得できません。</p>



<pre class="wp-block-code"><code>_spriteRenderer = GetComponent&lt;SpriteRenderer&gt;();
</code></pre>



<p class="wp-block-paragraph">子オブジェクトにSpriteRendererがある場合は、次のように変更します。</p>



<pre class="wp-block-code"><code>_spriteRenderer = GetComponentInChildren&lt;SpriteRenderer&gt;();
</code></pre>



<p class="wp-block-paragraph">または、InspectorからSpriteRendererを設定できる形にしてもよいでしょう🦖</p>



<pre class="wp-block-code"><code>&#91;SerializeField]
private SpriteRenderer _spriteRenderer;
</code></pre>



<p class="wp-block-paragraph">こちらの方法では、PlayerSpriteオブジェクトをInspectorの項目へドラッグ＆ドロップして設定します。</p>



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



<h2 class="wp-block-heading"><span id="toc24">制作中のゲームで実装した例</span></h2>



<p class="wp-block-paragraph">制作しているゲームではマシンガン攻撃を行う敵を実装していますが、<br>弾が連続的に当たるとその分ダメージを食らってしまい、即死になる場合がありました。<br>複数の弾が短時間に連続で当たることで、プレイヤーのHPが一瞬で減ってしまっていました・・</p>



<video
  src="https://naiterukaiju.com/wp-content/uploads/2026/08/mutekinashi.mp4"
  autoplay
  loop
  muted
  playsinline
  width="640"
  height="360">
</video



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



<p class="wp-block-paragraph">マシンガンは連続攻撃であるため、弾ごとにそのままダメージを受けると、避ける余裕がほとんどありませんでした。<br>そこで今回紹介した無敵時間をプレイヤーのダメージ処理へ追加し、一度ダメージを受けたあとは、一定時間ほかの弾に当たってもダメージを受けないようにしました！</p>



<p class="wp-block-paragraph">無敵時間中にはプレイヤーを点滅させ、現在ダメージを受けない状態であることも分かるようにしています。</p>



<p class="wp-block-paragraph"><strong><span class="marker-red">↓無敵時間有↓</span></strong></p>



<video
  src="https://naiterukaiju.com/wp-content/uploads/2026/08/mutekiari.mp4"
  autoplay
  loop
  muted
  playsinline
  width="640"
  height="360">
</video



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



<p class="wp-block-paragraph">無敵時間を追加したことで、マシンガン攻撃の危険さを残しながらも、一度の接触だけでHPがすべてなくなることを防げました。</p>



<p class="wp-block-paragraph">今回のように、基本的な無敵時間の仕組みをPlayer側のダメージ処理へ入れておくと、マシンガンだけでなく、次のような攻撃にも共通して使用できます！</p>



<ul class="wp-block-list">
<li>通常の敵との接触</li>



<li>敵が発射する弾</li>



<li>ミサイル攻撃</li>



<li>トゲなどの障害物</li>



<li>炎や電流などの継続ダメージ</li>
</ul>



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



<h2 class="wp-block-heading"><span id="toc25">まとめ</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/07/IMG_7446.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p class="wp-block-paragraph">最後まで読んでいただきありがとうございました！</p>
</div></div>



<p class="wp-block-paragraph">今回は、敵からダメージを連続で受けないように、<strong>無敵時間</strong>と<strong>点滅処理</strong>を実装しました。</p>



<p class="wp-block-paragraph">今回のポイントをまとめると、以下のとおりです。</p>



<ul class="wp-block-list">
<li><code>_isInvincible</code>を使って、現在無敵状態かどうかを管理する</li>



<li>無敵時間中にダメージ処理が呼ばれた場合は、<code>return</code>で処理を終了する</li>



<li>コルーチンを使って、一定時間だけ無敵状態を継続する</li>



<li>無敵時間中は<code>SpriteRenderer</code>の透明度を変更して、プレイヤーを点滅させる</li>



<li>無敵時間が終了したら、<code>_isInvincible</code>を<code>false</code>に戻して再びダメージを受けられるようにする</li>
</ul>



<p class="wp-block-paragraph">無敵時間を実装しておくことで、敵に触れ続けたときや複数の攻撃が短時間に当たったときに、<strong>HPが一気に減ってしまうことを防げます。</strong></p>



<p class="wp-block-paragraph">今回の仕組みは通常の敵との接触だけでなく、<strong>弾・マシンガン・ミサイル・トゲなど、さまざまな攻撃にも応用できます。</strong></p>



<p class="wp-block-paragraph">ゲームの難易度や攻撃の間隔に合わせて、無敵時間と点滅速度を調整してみてください🦖</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91%e3%83%80%e3%83%a1%e3%83%bc%e3%82%b8%e3%82%92%e9%80%a3%e7%b6%9a%e3%81%a7%e5%8f%97%e3%81%91%e3%81%aa%e3%81%84%e3%82%88%e3%81%86%e3%81%ab%e7%84%a1%e6%95%b5%e6%99%82%e9%96%93/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://naiterukaiju.com/wp-content/uploads/2026/07/点滅.mp4" length="2712786" type="video/mp4" />
<enclosure url="https://naiterukaiju.com/wp-content/uploads/2026/07/無敵なし.mp4" length="2326873" type="video/mp4" />
<enclosure url="https://naiterukaiju.com/wp-content/uploads/2026/08/mutekinashi.mp4" length="6185924" type="video/mp4" />
<enclosure url="https://naiterukaiju.com/wp-content/uploads/2026/08/mutekiari.mp4" length="6221621" type="video/mp4" />

			</item>
	</channel>
</rss>
