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

<channel>
	<title>Unity2D実装解説（テクニック） | 怪獣の2Dアクションゲーム制作開発記</title>
	<atom:link href="https://naiterukaiju.com/category/unity2d%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF/feed/" rel="self" type="application/rss+xml" />
	<link>https://naiterukaiju.com</link>
	<description>Unityでゲームを作る方法を初心者目線で発信👾</description>
	<lastBuildDate>Wed, 15 Apr 2026 13:52:32 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://naiterukaiju.com/wp-content/uploads/2025/09/cropped-Enemy-32x32.png</url>
	<title>Unity2D実装解説（テクニック） | 怪獣の2Dアクションゲーム制作開発記</title>
	<link>https://naiterukaiju.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【Unity2D】HPゲージ（体力UI）をImageで簡単に作る｜（コードあり・解説付き）</title>
		<link>https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91hp%e3%83%90%e3%83%bc%ef%bc%88%e4%bd%93%e5%8a%9bui%ef%bc%89%e3%82%92image%e3%81%a7%e4%bd%9c%e3%82%8b%e6%96%b9%e6%b3%95/</link>
					<comments>https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91hp%e3%83%90%e3%83%bc%ef%bc%88%e4%bd%93%e5%8a%9bui%ef%bc%89%e3%82%92image%e3%81%a7%e4%bd%9c%e3%82%8b%e6%96%b9%e6%b3%95/#respond</comments>
		
		<dc:creator><![CDATA[怪獣]]></dc:creator>
		<pubDate>Sun, 05 Apr 2026 05:29:23 +0000</pubDate>
				<category><![CDATA[Unity2D実装解説（テクニック）]]></category>
		<category><![CDATA[2Dゲーム]]></category>
		<category><![CDATA[Filled]]></category>
		<category><![CDATA[HP]]></category>
		<category><![CDATA[HPUI]]></category>
		<category><![CDATA[Image]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[Unity]]></category>
		<category><![CDATA[Unity初心者]]></category>
		<category><![CDATA[アクションゲーム]]></category>
		<category><![CDATA[ゲーム制作]]></category>
		<category><![CDATA[バー]]></category>
		<category><![CDATA[体力UI]]></category>
		<guid isPermaLink="false">https://naiterukaiju.com/?p=1045</guid>

					<description><![CDATA[Unityでゲーム制作をしていると、「体力UIを表示させるようにしたい」「HPを数値だけで管理すると、プレイヤーにとって分かりづらい…」て思うことってありますよね。 そんなときは、減っていくHPバー（体力ゲージ） を表示 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<hr class="wp-block-separator has-alpha-channel-opacity"/>



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>こんにちは！夜の街2Dアクションゲームを制作中の怪獣です🦖</p>
</div></div>



<p>Unityでゲーム制作をしていると、<br><strong>「体力UIを表示させるようにしたい」</strong><br><strong>「HPを数値だけで管理すると、プレイヤーにとって分かりづらい…」</strong><br>て思うことってありますよね。</p>



<p>そんなときは、<strong><span class="marker-under-red">減っていくHPバー（体力ゲージ）</span></strong> を表示すると一気にゲームらしくなります！</p>



<p>この記事では、<br><span class="marker-under-red"><strong>UnityのImageコンポーネントの「Fill」機能を使ってHPバーを作る簡単な方法</strong> </span>を解説します！</p>



<p>※当記事は、HPゲージUIを作る方法を中心で解説しています。<br>⬇️ダメージ処理を受ける＋HPゲージUI込みで流れで作りたい方はこちらの記事を見るとスムーズです</p>



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

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



<p>⬇️こちらは、ダメージ処理を判定させる方法に特化した記事です</p>



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

<a href="https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91%e6%95%b5%e3%81%ab%e8%a7%a6%e3%82%8c%e3%81%9f%e3%82%89%e3%83%80%e3%83%a1%e3%83%bc%e3%82%b8%e3%82%92%e5%8f%97%e3%81%91%e3%82%8b%e4%bb%95%e7%b5%84%e3%81%bf%e3%81%ae%e4%bd%9c/" title="【Unity2D】敵に触れたらダメージを受ける仕組みの作り方｜（コード全文・解説付き）" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-29-195746-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-29-195746-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-29-195746-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-29-195746-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity2D】敵に触れたらダメージを受ける仕組みの作り方｜（コード全文・解説付き）</div><div class="blogcard-snippet internal-blogcard-snippet">Unity2Dでアクションゲームを作っていると、敵に触れたらHPを減らしたいダメージ処理を入れたいと思うことがありますよね。この記事では、敵に触れたらプレイヤーがダメージを受ける仕組みの作り方を、初心者向けにわかりやすく解説します！今回は ...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.03.29</div></div></div></div></a>
</div>



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




  <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">① HPバーUIを作る</a><ol><li><a href="#toc3" tabindex="0">① Canvasを作成</a></li><li><a href="#toc4" tabindex="0">② HPの枠部分のバーを作る</a></li><li><a href="#toc5" tabindex="0">③ ゲージ部分を作る（赤のバー）</a></li></ol></li><li><a href="#toc6" tabindex="0">② HPを減少させるソースコード</a></li><li><a href="#toc7" tabindex="0">③ コードを1行ずつ解説</a><ol><li><a href="#toc8" tabindex="0">HPを管理する変数</a></li><li><a href="#toc9" tabindex="0">StartでHPを初期化する</a></li><li><a href="#toc10" tabindex="0">HPバー更新処理</a></li></ol></li><li><a href="#toc11" tabindex="0">④ プレイヤー側にバーをセットする</a></li><li><a href="#toc12" tabindex="0">❌よくあるエラー</a><ol><li><a href="#toc13" tabindex="0">HPバーが減らない</a></li><li><a href="#toc14" tabindex="0">NullReferenceExceptionが出る</a></li></ol></li><li><a href="#toc15" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

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



<ul class="wp-block-list">
<li>画面にHPバーを表示できる</li>



<li>ダメージを受けるとHPバーが減る</li>



<li><code>Image.fillAmount</code> を使ったUI制御が理解できる</li>
</ul>



<video
  src="https://naiterukaiju.com/wp-content/uploads/2025/10/無題のビデオ-‐-Clipchampで作成-3.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">① HPバーUIを作る</span></h2>



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p><strong>親子関係にするのがポイントです💡</strong></p>
</div></div>



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



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



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



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



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



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



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



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



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



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



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



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



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



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



<h2 class="wp-block-heading"><span id="toc6">② HPを減少させるソースコード</span></h2>



<p>今回はHPバーUIの動きを確認しやすいように、Spaceキーを押すとHPが減るサンプルで解説します。ダメージを受ける処理の代わりに、Spaceキーを押すたびにゲージが減少していくことが確認できます。</p>



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

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;

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

    void Update()
    {
        // Spaceキーを押したらHPを1減らす
        if (UnityEngine.Input.GetKeyDown(KeyCode.Space))
        {
            _currentHP--;
            _currentHP = Mathf.Clamp(_currentHP, 0, _maxHP);
            _UpdateHPBar();
        }
    }
    
    private void _UpdateHPBar()
    {
        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">UnityEngine</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">UnityEngine</span><span style="color: #D4D4D4">.UI;</span></span>
<span class="line"></span>
<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>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Start</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_currentHP</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_maxHP</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">_UpdateHPBar</span><span style="color: #D4D4D4">();</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Update</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// Spaceキーを押したらHPを1減らす</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">UnityEngine</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">Input</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">GetKeyDown</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">KeyCode</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">Space</span><span style="color: #D4D4D4">))</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">_currentHP</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 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>
<span class="line"><span style="color: #D4D4D4">    </span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">_UpdateHPBar</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_hpBarFill</span><span style="color: #D4D4D4"> == </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">) </span><span 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></code></pre></div>



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



<h2 class="wp-block-heading"><span id="toc7">③ コードを1行ずつ解説</span></h2>



<h3 class="wp-block-heading"><span id="toc8">HPを管理する変数</span></h3>



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



<p><strong><code>_maxHP</code>&nbsp;は最大HP</strong>です。<br><code>_</code><strong><code>currentHP</code>&nbsp;は現在のHP</strong>です。</p>



<p><code>SerializeField</code>&nbsp;を付けているので、<strong>Inspector から数値を調整することもできます。</strong></p>



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



<h3 class="wp-block-heading"><span id="toc9">StartでHPを初期化する</span></h3>



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



<p>ゲーム開始時に、現在HPを最大HPと同じ値にしています。<br>これを入れておくことで、<strong>最初から満タンの状態でスタート</strong>できます！</p>



<h3 class="wp-block-heading"><span id="toc10">HPバー更新処理</span></h3>



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



<p>ここで<strong>「見た目（UI）」</strong>を更新しています。<br>_hpBarFill.fillAmountは<strong>赤いゲージ部分の長さ</strong>となる部分です。<br>現在HPからMAXHPを割って今の体力の割合を求め、_hpBarFill（赤いゲージ部分のImage）にセットしています。<br>こうすることで、<strong><span class="marker-under-red">バーの長さを少しずつ削って体力が変動するように見せています！</span></strong></p>



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



<h2 class="wp-block-heading"><span id="toc11">④ プレイヤー側にバーをセットする</span></h2>



<p><strong><span class="marker-under-blue">Playerオブジェクトを選択し、Inspectorの「HP Bar Fill」に</span><span class="marker-under-blue">対して</span><span class="marker-under-blue">、</span><span class="marker-under-blue">作ったHPBar_Fillをドラッグ＆ドロップします！</span></strong></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="710" height="327" src="https://naiterukaiju.com/wp-content/uploads/2025/10/Unityで2Dアクションゲームを作ろう！のコピーのコピー-4.png" alt="_hpBarFillにドラッグする画像" class="wp-image-1035" srcset="https://naiterukaiju.com/wp-content/uploads/2025/10/Unityで2Dアクションゲームを作ろう！のコピーのコピー-4.png 710w, https://naiterukaiju.com/wp-content/uploads/2025/10/Unityで2Dアクションゲームを作ろう！のコピーのコピー-4-300x138.png 300w" sizes="(max-width: 710px) 100vw, 710px" /></figure>



<p>これを忘れると動かないので注意です！</p>



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



<h2 class="wp-block-heading"><span id="toc12">❌よくあるエラー</span></h2>



<h3 class="wp-block-heading"><span id="toc13">HPバーが減らない</span></h3>



<p>原因：</p>



<ul class="wp-block-list">
<li>Image Typeが「Simple」になっている<br><span class="marker-under-blue"><strong><span class="marker-under-red">➡️ 必ず「Filled」にする</span></strong></span></li>
</ul>



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



<h3 class="wp-block-heading"><span id="toc14">NullReferenceExceptionが出る</span></h3>



<p>原因：</p>



<ul class="wp-block-list">
<li>_hpBarFillの設定忘れの可能性大<br><strong><span class="marker-under-blue"><span class="marker-under-red">➡️ ④の手順通り、Inspectorの「HP Bar Fill」に対して、作ったHPBar_Fillをドラッグ＆ドロップ</span></span></strong><span class="marker-under-red"><strong>する</strong></span></li>
</ul>



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



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



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



<p>今回は、ImageのFill機能を使ったHPバー（体力UI）の作り方を解説しました！</p>



<p>動作確認はSpaceキーで行いましたが、実際のゲームでは敵に触れたときにHPを減らす形にしています。<br><strong>敵に触れたらダメージを受ける処理の仕組み</strong>は、こちらの記事で詳しく解説しているので、<br>合わせて実装すると「敵に触れる」→「ダメージを受ける」→「HPを減らす」という風になり、一気にゲームらしくなります👾</p>



<div class="wp-block-group is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-cocoon-blocks-blogcard blogcard-type bct-together">

<a href="https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91%e6%95%b5%e3%81%ab%e8%a7%a6%e3%82%8c%e3%81%9f%e3%82%89%e3%83%80%e3%83%a1%e3%83%bc%e3%82%b8%e3%82%92%e5%8f%97%e3%81%91%e3%82%8b%e4%bb%95%e7%b5%84%e3%81%bf%e3%81%ae%e4%bd%9c/" title="【Unity2D】敵に触れたらダメージを受ける仕組みの作り方｜（コード全文・解説付き）" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-29-195746-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-29-195746-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-29-195746-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-29-195746-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity2D】敵に触れたらダメージを受ける仕組みの作り方｜（コード全文・解説付き）</div><div class="blogcard-snippet internal-blogcard-snippet">Unity2Dでアクションゲームを作っていると、敵に触れたらHPを減らしたいダメージ処理を入れたいと思うことがありますよね。この記事では、敵に触れたらプレイヤーがダメージを受ける仕組みの作り方を、初心者向けにわかりやすく解説します！今回は ...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.03.29</div></div></div></div></a>
</div>
</div>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91hp%e3%83%90%e3%83%bc%ef%bc%88%e4%bd%93%e5%8a%9bui%ef%bc%89%e3%82%92image%e3%81%a7%e4%bd%9c%e3%82%8b%e6%96%b9%e6%b3%95/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://naiterukaiju.com/wp-content/uploads/2025/10/無題のビデオ-‐-Clipchampで作成-3.mp4" length="221111" type="video/mp4" />

			</item>
		<item>
		<title>【Unity2D】敵に触れたらダメージを受ける仕組みの作り方｜（コード全文・解説付き）</title>
		<link>https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91%e6%95%b5%e3%81%ab%e8%a7%a6%e3%82%8c%e3%81%9f%e3%82%89%e3%83%80%e3%83%a1%e3%83%bc%e3%82%b8%e3%82%92%e5%8f%97%e3%81%91%e3%82%8b%e4%bb%95%e7%b5%84%e3%81%bf%e3%81%ae%e4%bd%9c/</link>
					<comments>https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91%e6%95%b5%e3%81%ab%e8%a7%a6%e3%82%8c%e3%81%9f%e3%82%89%e3%83%80%e3%83%a1%e3%83%bc%e3%82%b8%e3%82%92%e5%8f%97%e3%81%91%e3%82%8b%e4%bb%95%e7%b5%84%e3%81%bf%e3%81%ae%e4%bd%9c/#respond</comments>
		
		<dc:creator><![CDATA[怪獣]]></dc:creator>
		<pubDate>Sun, 29 Mar 2026 10:58:29 +0000</pubDate>
				<category><![CDATA[Unity2D実装解説（テクニック）]]></category>
		<category><![CDATA[2Dゲーム]]></category>
		<category><![CDATA[Tag判定]]></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>
		<category><![CDATA[衝突判定]]></category>
		<guid isPermaLink="false">https://naiterukaiju.com/?p=1022</guid>

					<description><![CDATA[Unity2Dでアクションゲームを作っていると、 と思うことがありますよね。 この記事では、敵に触れたらプレイヤーがダメージを受ける仕組みの作り方を、初心者向けにわかりやすく解説します！ 今回は OnCollisionE [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>こんにちは！夜の街2Dアクションゲームを制作中の怪獣です🦖</p>
</div></div>



<p>Unity2Dでアクションゲームを作っていると、</p>



<ul class="wp-block-list">
<li>敵に触れたらHPを減らしたい</li>



<li>ダメージ処理を入れたい</li>
</ul>



<p>と思うことがありますよね。</p>



<p>この記事では、<strong><span class="marker-under-red">敵に触れたらプレイヤーがダメージを受ける仕組み</span><span class="marker-under-red">の作り方</span></strong>を、初心者向けにわかりやすく解説します！</p>



<p>今回は <code>OnCollisionEnter2D()</code> を使って、<br><strong>敵との接触を判定 → HPを減らす → （<strong>必要なら</strong>）ゲームオーバーにつなげる</strong><br>という流れを作っていきます。<br><br>今回の仕組みを一度作れば、<br><strong>「HPが0になったときにゲームオーバーの演出をさせる」</strong><br>「<strong>ゲームオーバー後、リトライさせる」</strong><br>といった実装も容易に出来るようになります！</p>



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




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-4" checked><label class="toc-title" for="toc-checkbox-4">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">この記事でできること</a></li><li><a href="#toc2" tabindex="0">事前準備</a><ol><li><a href="#toc3" tabindex="0">Player側に必要なもの</a></li><li><a href="#toc4" tabindex="0">Enemy側に必要なもの</a></li></ol></li><li><a href="#toc5" tabindex="0">① ダメージを受けるソースコード</a><ol><li><a href="#toc6" tabindex="0">この処理の流れ</a></li></ol></li><li><a href="#toc7" tabindex="0">② コードを1行ずつ解説</a><ol><li><a href="#toc8" tabindex="0">HPを管理する変数</a></li><li><a href="#toc9" tabindex="0">StartでHPを初期化する</a></li><li><a href="#toc10" tabindex="0">敵に触れたか判定する</a></li><li><a href="#toc11" tabindex="0">ダメージを受ける処理</a></li><li><a href="#toc12" tabindex="0">ゲームオーバー処理</a></li></ol></li><li><a href="#toc13" tabindex="0">③ Enemyタグの設定方法</a><ol><li><a href="#toc14" tabindex="0">Enemyタグを作成する</a></li></ol></li><li><a href="#toc15" tabindex="0">❌よくあるエラー</a><ol><li><a href="#toc16" tabindex="0">敵に触れてもダメージを受けない場合</a></li><li><a href="#toc17" tabindex="0">HPが減らない場合</a></li></ol></li><li><a href="#toc18" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

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



<ul class="wp-block-list">
<li>敵に触れた瞬間にダメージを受ける</li>



<li>プレイヤーのHPを減らせる</li>



<li>HPが0になったときの処理につなげられる</li>



<li>敵との接触判定の基本がわかる</li>
</ul>



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



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



<p>この処理を正しく動かすには、事前に以下がついていることを前提としています。</p>



<h3 class="wp-block-heading"><span id="toc3">Player側に必要なもの</span></h3>



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



<li>Collider2D</li>



<li>Playerスクリプト</li>
</ul>



<h3 class="wp-block-heading"><span id="toc4">Enemy側に必要なもの</span></h3>



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



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



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



<h2 class="wp-block-heading"><span id="toc5">① ダメージを受けるソースコード</span></h2>



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

public class Player : MonoBehaviour
{
    &#91;SerializeField&#93; private int _maxHP = 5;
    private int _currentHP;

    private void Start()
    {
        _currentHP = _maxHP;
    }

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

    private void _TakeDamage(int damage)
    {
        _currentHP -= damage;
        _currentHP = Mathf.Clamp(_currentHP, 0, _maxHP);

        Debug.Log("現在のHP: " + _currentHP);

        if (_currentHP &lt;= 0)
        {
            _GameOver();
        }
    }

    private void _GameOver()
    {
        Debug.Log("ゲームオーバー");
    }
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">UnityEngine</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #9CDCFE">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">Player</span><span style="color: #D4D4D4"> : </span><span style="color: #4EC9B0">MonoBehaviour</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">&#93; </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">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 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>
<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">OnCollisionEnter2D</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">Collision2D</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">collision</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">collision</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">gameObject</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">CompareTag</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Enemy&quot;</span><span style="color: #D4D4D4">))</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #DCDCAA">_TakeDamage</span><span style="color: #D4D4D4">(</span><span style="color: #B5CEA8">1</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">_TakeDamage</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">int</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">damage</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_currentHP</span><span style="color: #D4D4D4"> -= </span><span style="color: #9CDCFE">damage</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_currentHP</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">Mathf</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">Clamp</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_currentHP</span><span style="color: #D4D4D4">, </span><span style="color: #B5CEA8">0</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">_maxHP</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">Debug</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">Log</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;現在のHP: &quot;</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">_currentHP</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: #DCDCAA">_GameOver</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">_GameOver</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">Debug</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">Log</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;ゲームオーバー&quot;</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span></code></pre></div>



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



<h3 class="wp-block-heading"><span id="toc6">この処理の流れ</span></h3>



<p>このコードでは、次の流れでダメージ処理を行っています↓</p>



<ol class="wp-block-list">
<li>プレイヤーが敵にぶつかる</li>



<li><code>OnCollisionEnter2D()</code> が呼ばれる</li>



<li>相手が Enemy タグなら <code>_TakeDamage(1)</code> を実行する</li>



<li>HPを1減らす</li>



<li>HPが0ならゲームオーバー処理へ進む</li>
</ol>



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



<h2 class="wp-block-heading"><span id="toc7">② コードを1行ずつ解説</span></h2>



<h3 class="wp-block-heading"><span id="toc8">HPを管理する変数</span></h3>



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



<p><code>_maxHP</code> は最大HPです。<br><code>_currentHP</code> は現在のHPです。</p>



<p><code>SerializeField</code> を付けているので、Inspector から数値を調整することもできます。</p>



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



<h3 class="wp-block-heading"><span id="toc9">StartでHPを初期化する</span></h3>



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



<p>ゲーム開始時に、現在HPを最大HPと同じ値にしています。<br>これを入れておくことで、<strong>最初から満タンの状態でスタート</strong>できます。</p>



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



<h3 class="wp-block-heading"><span id="toc10">敵に触れたか判定する</span></h3>



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



<p><code>OnCollisionEnter2D()</code> は、<strong>2Dの当たり判定がぶつかった瞬間に呼ばれるメソッド</strong>です。</p>



<p><code>collision.gameObject.CompareTag("Enemy")</code> で、<br>ぶつかった相手が Enemy タグかどうかを確認しています。</p>



<p>もし相手が敵なら、<strong><code>_TakeDamage(1)</code> を呼び出して、<span class="marker-under-red">1ダメージ与えます</span></strong>！</p>



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



<h3 class="wp-block-heading"><span id="toc11">ダメージを受ける処理</span></h3>



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

    Debug.Log("現在のHP: " + _currentHP);

    if (_currentHP &lt;= 0)
    {
        _GameOver();
    }
}</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: #9CDCFE">Debug</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">Log</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;現在のHP: &quot;</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">_currentHP</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: #DCDCAA">_GameOver</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>このメソッドでは、プレイヤーがダメージを受けたときの処理をまとめています。</p>



<p><code><strong><span class="marker-under-blue"><span class="marker-blue">_currentHP -= damage;</span></span></strong></code><br>　現在のHPから、受けたダメージ分だけ引いています。</p>



<p><code><strong><span class="marker-under-blue"><span class="marker-blue">Mathf.Clamp(_currentHP, 0, _maxHP);</span></span></strong></code><br>　HPが 0 未満になったり、最大値を超えたりしないように制限しています。</p>



<p>たとえばHPが1のときに2ダメージ受けても、-1にはならず 0 で止まります。</p>



<p><code><strong><span class="marker-under-blue"><span class="marker-blue">if (_currentHP &lt;= 0)</span></span></strong></code><br>　HPが0以下になったら、ゲームオーバー処理へ進みます。</p>



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



<h3 class="wp-block-heading"><span id="toc12">ゲームオーバー処理</span></h3>



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



<p>ここでは仮で <code>Debug.Log</code> を出しているだけですが、実際にはここに</p>



<ul class="wp-block-list">
<li>ゲームオーバーUIを表示する</li>



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



<li>リトライ画面を出す</li>
</ul>



<p>といった処理をつなげられます！</p>



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



<h2 class="wp-block-heading"><span id="toc13">③ Enemyタグの設定方法</span></h2>



<h3 class="wp-block-heading"><span id="toc14">Enemyタグを作成する</span></h3>



<p>敵オブジェクトには <code>Enemy</code> タグを設定しておきます。</p>



<p>手順は以下です↓</p>



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



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



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



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



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



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



<p>タグ判定では、以下のような書き方もあります。</p>



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



<p>ただし、Unityでは <code>CompareTag()</code> の方が一般的です。</p>



<p>理由は、</p>



<ul class="wp-block-list">
<li>意図がわかりやすい</li>



<li>タグ比較として書き方が明確</li>



<li>ミスに気づきやすい</li>
</ul>



<p>からです。</p>



<p>そのため、初心者のうちは <code>CompareTag()</code> を使う形で覚えておくのがおすすめです✨</p>



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



<h2 class="wp-block-heading"><span id="toc15">❌よくあるエラー</span></h2>



<p>ダメージ判定が上手くいかない場合は、以下辺りを確認してみてください。</p>



<h3 class="wp-block-heading"><span id="toc16">敵に触れてもダメージを受けない場合</span></h3>



<ul class="wp-block-list">
<li>敵オブジェクトに <code>Enemy</code> タグが付いているか</li>



<li>Player と Enemy の両方に Collider2D があるか</li>



<li>少なくともどちらかに Rigidbody2D が付いているか</li>



<li><code>OnCollisionEnter2D()</code> のスペルミスがないか</li>
</ul>



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



<h3 class="wp-block-heading"><span id="toc17">HPが減らない場合</span></h3>



<ul class="wp-block-list">
<li><code>_TakeDamage(1)</code> が呼ばれているか</li>



<li>Console に <code>現在のHP</code> が表示されるか</li>



<li><code>_currentHP</code> を別の処理で上書きしていないか</li>
</ul>



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



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



<p>今回は、<code>OnCollisionEnter2D()</code> を使って<br><strong>敵に触れたらダメージを受ける処理</strong> を実装する方法を解説しました！</p>



<p>今回のポイントは以下の通りです↓</p>



<ul class="wp-block-list">
<li>敵との接触判定は <code>OnCollisionEnter2D()</code> で行う</li>



<li><code>CompareTag("Enemy")</code> で相手が敵か確認する</li>



<li><code>_TakeDamage()</code> にダメージ処理をまとめる</li>



<li>HPが0になったらゲームオーバー処理につなげられる</li>
</ul>



<p>この処理は、2Dアクションゲームの基本となる部分です。<br>まずはシンプルな形で実装して、あとから</p>



<ul class="wp-block-list">
<li>敵に触れた後、無敵時間を設ける</li>



<li>点滅演出をさせる</li>



<li>ダメージを受けた後のSEをつける</li>
</ul>



<p>などを追加していくのがおすすめです👾</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91%e6%95%b5%e3%81%ab%e8%a7%a6%e3%82%8c%e3%81%9f%e3%82%89%e3%83%80%e3%83%a1%e3%83%bc%e3%82%b8%e3%82%92%e5%8f%97%e3%81%91%e3%82%8b%e4%bb%95%e7%b5%84%e3%81%bf%e3%81%ae%e4%bd%9c/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【Unity2D】プレイヤーを追従させるカメラを作るには？｜実装方法（コード全文・解説付き）</title>
		<link>https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91%e3%83%97%e3%83%ac%e3%82%a4%e3%83%a4%e3%83%bc%e3%82%92%e8%bf%bd%e5%be%93%e3%81%95%e3%81%9b%e3%82%8b%e3%82%ab%e3%83%a1%e3%83%a9%e3%81%ae%e5%ae%9f%e8%a3%85%e6%96%b9%e6%b3%95/</link>
					<comments>https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91%e3%83%97%e3%83%ac%e3%82%a4%e3%83%a4%e3%83%bc%e3%82%92%e8%bf%bd%e5%be%93%e3%81%95%e3%81%9b%e3%82%8b%e3%82%ab%e3%83%a1%e3%83%a9%e3%81%ae%e5%ae%9f%e8%a3%85%e6%96%b9%e6%b3%95/#respond</comments>
		
		<dc:creator><![CDATA[怪獣]]></dc:creator>
		<pubDate>Sat, 14 Mar 2026 07:47:37 +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>
		<category><![CDATA[追従]]></category>
		<guid isPermaLink="false">https://naiterukaiju.com/?p=922</guid>

					<description><![CDATA[Unityで2Dアクションゲームを作っていると、 といったことはありませんか？ この記事では、プレイヤーにカメラを追従させる基本実装を、コード全文つきで、一行ずつわかりやすく解説します！ 目次 ①この記事でやること②完成 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>こんにちは！夜の街2Dアクションゲームを制作中の怪獣です🦖</p>
</div></div>



<p>Unityで2Dアクションゲームを作っていると、</p>



<ul class="wp-block-list">
<li>「プレイヤーの歩行に合わせてカメラも追従させたい」</li>



<li>「プレイヤーを歩かせてもカメラが追従しない」</li>



<li>「横だけ追従したい」</li>
</ul>



<p>といったことはありませんか？</p>



<p>この記事では、<strong><span class="marker-under-red">プレイヤーにカメラを追従させる基本実装</span></strong>を、<strong>コード全文つき</strong>で、<br>一行ずつわかりやすく解説します！</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-6" checked><label class="toc-title" for="toc-checkbox-6">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">①この記事でやること</a></li><li><a href="#toc2" tabindex="0">②完成コード</a><ol><li><a href="#toc3" tabindex="0">各処理の説明（初心者向け）</a></li><li><a href="#toc4" tabindex="0">変数の定義</a></li><li><a href="#toc5" tabindex="0">Start()</a></li><li><a href="#toc6" tabindex="0">LateUpdate()</a></li></ol></li><li><a href="#toc7" tabindex="0">③カメラにCameraManagerを適用する</a></li><li><a href="#toc8" tabindex="0">④上下にも追従させたい場合は？</a></li><li><a href="#toc9" tabindex="0">⑤よくあるエラーと対処法</a><ol><li><a href="#toc10" tabindex="0">エラー1：カメラが動かない</a></li><li><a href="#toc11" tabindex="0">エラー2：カメラがガクつく</a></li></ol></li><li><a href="#toc12" tabindex="0">⑥まとめ</a></li></ol>
    </div>
  </div>

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



<ul class="wp-block-list">
<li>プレイヤーの<strong>横移動に合わせて追従</strong>するカメラ処理を作る</li>
</ul>



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



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



<h2 class="wp-block-heading"><span id="toc2">②完成コード</span></h2>



<p>カメラの動きを管理するCameraManager.csを用意します。<br>以下のような処理を書きます。（コピペOK！）</p>



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

public class CameraManager : MonoBehaviour
{
    &#91;Header("追従対象")&#93;
    &#91;SerializeField&#93; private Player _player;     // Inspector側でPlayerオブジェクトをドラッグ

    &#91;Header("カメラ位置オフセット")&#93;
    public Vector3 offset = new Vector3(0f, 0f, -10f); // Zは-10で2D既定の距離

    private Transform _playerT;    // プレイヤーの位置情報を扱うための変数

    void Start()
    {
        // 1) 追従対象の参照を安全に確保
        if (_player == null)
            _player = FindObjectOfType&lt;Player>();

        if (_player != null)
            _playerT = _player.transform;
    }
    // Update のあとに毎フレーム呼ばれる処理
    void LateUpdate()
    {
        if (_playerT == null) return;

        // 2) 「プレイヤーの位置 + オフセット」を 目標位置 として計算
        Vector3 target = _playerT.position + offset;

        // 3) 横スクロール想定
        //    Y座標（縦方向）とZ座標（奥行き） は固定にして「横スクロール専用カメラ」にする
        float nextX = target.x;
        float nextY = transform.position.y;   // 縦は固定（必要なら追従に変更可）
        float nextZ = target.z;               // -10固定

        // 4) 実際にカメラを移動
        transform.position = new Vector3(nextX, nextY, nextZ);
    }
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">UnityEngine</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #9CDCFE">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">CameraManager</span><span style="color: #D4D4D4"> : </span><span style="color: #4EC9B0">MonoBehaviour</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #DCDCAA">Header</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;追従対象&quot;</span><span style="color: #D4D4D4">)&#93;</span></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #9CDCFE">SerializeField</span><span style="color: #D4D4D4">&#93; </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Player</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_player</span><span style="color: #D4D4D4">;     </span><span style="color: #6A9955">// Inspector側でPlayerオブジェクトをドラッグ</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    &#91;</span><span style="color: #DCDCAA">Header</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;カメラ位置オフセット&quot;</span><span style="color: #D4D4D4">)&#93;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Vector3</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">offset</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Vector3</span><span style="color: #D4D4D4">(0</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">, 0</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">, -10</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">); </span><span style="color: #6A9955">// Zは-10で2D既定の距離</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Transform</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_playerT</span><span style="color: #D4D4D4">;    </span><span style="color: #6A9955">// プレイヤーの位置情報を扱うための変数</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Start</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 1) 追従対象の参照を安全に確保</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_player</span><span style="color: #D4D4D4"> == </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">_player</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">FindObjectOfType</span><span style="color: #D4D4D4">&lt;</span><span style="color: #4EC9B0">Player</span><span style="color: #D4D4D4">&gt;();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_player</span><span style="color: #D4D4D4"> != </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">_playerT</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_player</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// Update のあとに毎フレーム呼ばれる処理</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">LateUpdate</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_playerT</span><span style="color: #D4D4D4"> == </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 2) 「プレイヤーの位置 + オフセット」を 目標位置 として計算</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">Vector3</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">target</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_playerT</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">offset</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 3) 横スクロール想定</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">//    Y座標（縦方向）とZ座標（奥行き） は固定にして「横スクロール専用カメラ」にする</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">nextX</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">target</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">nextY</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4">;   </span><span style="color: #6A9955">// 縦は固定（必要なら追従に変更可）</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">nextZ</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">target</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">z</span><span style="color: #D4D4D4">;               </span><span style="color: #6A9955">// -10固定</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 4) 実際にカメラを移動</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Vector3</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">nextX</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">nextY</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">nextZ</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



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



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



<h3 class="wp-block-heading"><span id="toc4">変数の定義</span></h3>



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



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



<li>ここに<strong><span class="marker-under-red">プレイヤーオブジェクト（追従対象）</span></strong>をドラッグします</li>
</ul>



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



<ul class="wp-block-list">
<li><strong>カメラとプレイヤーの距離（ずれ）を設定</strong>しているもの</li>



<li>カメラをプレイヤーと同じX・Y位置にして、Z方向に<strong>10</strong>だけ離した位置に置く（＝2Dゲームでちょうどいい距離）</li>
</ul>



<h3 class="wp-block-heading"><span id="toc5">Start()</span></h3>



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

        if (_player != null)
            _playerT = _player.transform;
    }</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: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Start</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 1) 追従対象の参照を安全に確保</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_player</span><span style="color: #D4D4D4"> == </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">_player</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">FindObjectOfType</span><span style="color: #D4D4D4">&lt;</span><span style="color: #4EC9B0">Player</span><span style="color: #D4D4D4">&gt;();</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_player</span><span style="color: #D4D4D4"> != </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">_playerT</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_player</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span></code></pre></div>



<ul class="wp-block-list">
<li>Startは<strong>ゲーム開始時に1回だけ呼ばれる処理</strong></li>



<li>ここでは「プレイヤーを探して変数に入れる」「初期のカメラ位置を覚える」ことをしています。</li>



<li>もし <code>_player</code> がまだ何も設定されていなければ、<br>シーンの中から <strong>Player スクリプトを持つオブジェクトを探して</strong> 自動で設定する。</li>



<li>Unity上の設定で「CameraManager」のInspector<code>内の_playerが</code><strong><code>ドラッグして設定されていなければ、</code>シーンの中から自動で探す</strong>ということをしています。（設定し忘れても自動でプレイヤーを見つけて追いかけるようにする保険です◎）</li>
</ul>



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



<h3 class="wp-block-heading"><span id="toc6">LateUpdate()</span></h3>



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

        // 2) 「プレイヤーの位置 + オフセット」を 目標位置 として計算
        Vector3 target = _playerT.position + offset;

        // 3) 横スクロール想定
        //    Y座標（縦方向）とZ座標（奥行き） は固定にして「横スクロール専用カメラ」にする
        float nextX = target.x;
        float nextY = transform.position.y;   // 縦は固定（必要なら追従に変更可）
        float nextZ = target.z;               // -10固定

        // 4) 実際にカメラを移動
        transform.position = new Vector3(nextX, nextY, nextZ);
    }</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">LateUpdate</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_playerT</span><span style="color: #D4D4D4"> == </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 2) 「プレイヤーの位置 + オフセット」を 目標位置 として計算</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">Vector3</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">target</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_playerT</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">offset</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 3) 横スクロール想定</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">//    Y座標（縦方向）とZ座標（奥行き） は固定にして「横スクロール専用カメラ」にする</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">nextX</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">target</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">nextY</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4">;   </span><span style="color: #6A9955">// 縦は固定（必要なら追従に変更可）</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">nextZ</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">target</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">z</span><span style="color: #D4D4D4">;               </span><span style="color: #6A9955">// -10固定</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 4) 実際にカメラを移動</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Vector3</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">nextX</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">nextY</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">nextZ</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span></code></pre></div>



<ul class="wp-block-list">
<li><strong>LateUpdate</strong>は<strong>Updateのあとに毎フレーム呼ばれる処理</strong></li>



<li><strong>カメラの位置を計算後、</strong>横方向（nextX）の変数に代入し、実際にカメラを移動しています</li>



<li>プレイヤーの移動が終わったあとにカメラを動かすので、画面がガタつきにくくなります</li>
</ul>



<h4 class="wp-block-heading">処理の流れ</h4>



<p>1.<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> Vector3 target = _playerT.position + offset;</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">Vector3</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">target</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_playerT</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4"> + </span><span style="color: #9CDCFE">offset</span><span style="color: #D4D4D4">;</span></span></code></pre></div>



<ul class="wp-block-list">
<li>プレイヤーの位置に「オフセット」を足して、「カメラがどの位置に動くべきか」を計算</li>



<li>「カメラが移動したい位置」＝プレイヤーの位置＋少しずらす距離（オフセット）</li>
</ul>



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



<p>2.<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> float nextX = target.x; 
 float nextY = transform.position.y; 
 float nextZ = target.z;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">nextX</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">target</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4">; </span></span>
<span class="line"><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">nextY</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4">; </span></span>
<span class="line"><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">nextZ</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">target</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">z</span><span style="color: #D4D4D4">;</span></span></code></pre></div>



<ul class="wp-block-list">
<li><code>nextX</code>（横方向）はプレイヤーに合わせる</li>



<li><code>nextY</code>（縦方向）は動かさず固定</li>



<li><code>nextZ</code>（奥行き）は-10で固定（2Dゲームの標準的なカメラ距離）<br>これで<strong><span class="marker-under-red">横スクロール専用</span></strong>のカメラワークになります🏃</li>
</ul>



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



<p>3.<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>transform.position = new Vector3(nextX, nextY, nextZ);</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Vector3</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">nextX</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">nextY</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">nextZ</span><span style="color: #D4D4D4">);</span></span></code></pre></div>



<ul start="4" class="wp-block-list">
<li> 計算した座標をカメラに反映させて、画面を動かします。</li>
</ul>



<h4 class="wp-block-heading">なぜ LateUpdate を使うのか</h4>



<p>LateUpdateは<strong>「Updateの処理が終わった後」</strong>に実行されます。</p>



<p>今回のように、<br>プレイヤーが移動する<br>↓<br>その後カメラが追従する</p>



<p>という処理の場合は<br>LateUpdateを使うことで自然な動きになります！</p>



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



<h2 class="wp-block-heading"><span id="toc7">③カメラにCameraManagerを適用する</span></h2>



<p>カメラオブジェクト（MainCamera）を選択した状態でAdd Componentをクリックし、<br>先ほど作った<strong>CameraManager</strong>を選択します。</p>



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



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



<p><strong>「追従対象」</strong>にプレイヤーをドラッグします。</p>



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



<h2 class="wp-block-heading"><span id="toc8">④上下にも追従させたい場合は？</span></h2>



<p>このままだと上下移動が激しいと見切れてしまうので、<br>ジャンプに合わせてカメラも上下させたい場合は、Yを固定せずに追従させます。<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>float nextY = target.y;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">nextY</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">target</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4">;</span></span></code></pre></div>



<video
  src="https://naiterukaiju.com/wp-content/uploads/2026/03/サンプルゲーム-SampleScene-Windows-Mac-Linux-Unity-2021.3.6f1-Personal-_DX11_-2026-03-14-16-28-20-Trim.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="toc9">⑤よくあるエラーと対処法</span></h2>



<h3 class="wp-block-heading"><span id="toc10">エラー1：カメラが動かない</span></h3>



<p>原因として多いのは、追従対象が設定されていないことです。</p>



<p>以下を確認してみてください。</p>



<ul class="wp-block-list">
<li>Main Cameraにスクリプトを適用しているか</li>



<li><code>target</code> にプレイヤーを入れているか</li>



<li>プレイヤーの Transform を参照できているか</li>
</ul>



<h3 class="wp-block-heading"><span id="toc11">エラー2：カメラがガクつく</span></h3>



<p>原因としては</p>



<ul class="wp-block-list">
<li>プレイヤーの移動とカメラ追従のタイミングがズレている</li>



<li><code>Update()</code> に書いている</li>



<li>Rigidbody2D の移動方法と噛み合っていない</li>
</ul>



<p>といったものがあります。</p>



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



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



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



<p>今回の記事では<br><strong>Unityでプレイヤーを追従するカメラの作り方</strong>を解説しました👾</p>



<p>実装の内容をまとめると以下の通りです。</p>



<ol class="wp-block-list">
<li>プレイヤーのTransform（位置情報等）を取得する</li>



<li>LateUpdateでプレイヤーの位置を取得してカメラを動かす量を計算</li>



<li>カメラの位置をプレイヤーに合わせて移動する</li>
</ol>



<p>この処理を入れることで、<br><strong>プレイヤーの動きに合わせてカメラが自然に追従するようになります</strong>！</p>



<p>2Dアクションゲームでは必須の処理なので<br>ぜひ実装してみてください！</p>



<p>他にも、<br><strong>「歩行したときにアニメーションもつけるようにしたい」</strong><br><strong>「プレイヤーをジャンプさせるようにしたい」</strong><br>という実装させたい人はこちらの記事もおすすめです👾</p>



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

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e3%80%91%e6%ad%a9%e8%a1%8c%e6%99%82%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e4%bd%9c%e3%82%8a%e6%96%b9%ef%bc%882d%ef%bc%89%ef%bd%9canim/" title="【Unity2D】歩行アニメーションの作り方｜Animatorで「待機⇔歩く」を切り替えよう" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2026/02/Unityで2Dアクションゲームを作ろう！のコピー-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/Unityで2Dアクションゲームを作ろう！のコピー-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2026/02/Unityで2Dアクションゲームを作ろう！のコピー-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2026/02/Unityで2Dアクションゲームを作ろう！のコピー-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】歩行アニメーションの作り方｜Animatorで「待機⇔歩く」を切り替えよう</div><div class="blogcard-snippet internal-blogcard-snippet">こんにちは！夜の街2Dアクションゲームを制作中の怪獣です🦖今回は 2Dキャラの「歩行」時のアニメーションを を Unity で作る方法を解説します！手順としては、待機、歩行用の画像を用意するAnimation Clip（歩くアニメ）を作成す...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.02.08</div></div></div></div></a>
</div>



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

<a href="https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91%e3%82%b8%e3%83%a3%e3%83%b3%e3%83%97%e5%87%a6%e7%90%86%e3%82%92%e5%ae%9f%e8%a3%85%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/" title="【Unity2D】プレイヤーをジャンプさせる方法｜（コード全文・解説付き）" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2026/03/↑作成したUIをドラッグする-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2026/03/↑作成したUIをドラッグする-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2026/03/↑作成したUIをドラッグする-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2026/03/↑作成したUIをドラッグする-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity2D】プレイヤーをジャンプさせる方法｜（コード全文・解説付き）</div><div class="blogcard-snippet internal-blogcard-snippet">Unity2Dでプレイヤーをジャンプさせたいけど、ジャンプのさせ方が分からないジャンプが高くなりすぎる 連続ジャンプしてしまう 地面判定がうまくいかないといったことはありませんか？この記事では、ジャンプさせる実装法(解説付き)、二重ジャンプ...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.03.01</div></div></div></div></a>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91%e3%83%97%e3%83%ac%e3%82%a4%e3%83%a4%e3%83%bc%e3%82%92%e8%bf%bd%e5%be%93%e3%81%95%e3%81%9b%e3%82%8b%e3%82%ab%e3%83%a1%e3%83%a9%e3%81%ae%e5%ae%9f%e8%a3%85%e6%96%b9%e6%b3%95/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://naiterukaiju.com/wp-content/uploads/2025/10/無題のビデオ-‐-Clipchampで作成-1.mp4" length="3356935" type="video/mp4" />
<enclosure url="https://naiterukaiju.com/wp-content/uploads/2026/03/サンプルゲーム-SampleScene-Windows-Mac-Linux-Unity-2021.3.6f1-Personal-_DX11_-2026-03-14-16-28-20-Trim.mp4" length="10157843" type="video/mp4" />

			</item>
		<item>
		<title>【Unity2D】プレイヤーをジャンプさせる方法｜（コード全文・解説付き）</title>
		<link>https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91%e3%82%b8%e3%83%a3%e3%83%b3%e3%83%97%e5%87%a6%e7%90%86%e3%82%92%e5%ae%9f%e8%a3%85%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/</link>
					<comments>https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91%e3%82%b8%e3%83%a3%e3%83%b3%e3%83%97%e5%87%a6%e7%90%86%e3%82%92%e5%ae%9f%e8%a3%85%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/#respond</comments>
		
		<dc:creator><![CDATA[怪獣]]></dc:creator>
		<pubDate>Sun, 01 Mar 2026 13:45:11 +0000</pubDate>
				<category><![CDATA[Unity2D実装解説（テクニック）]]></category>
		<category><![CDATA[2Dゲーム]]></category>
		<category><![CDATA[Unity]]></category>
		<category><![CDATA[Unity初心者]]></category>
		<category><![CDATA[アクションゲーム]]></category>
		<category><![CDATA[ゲーム制作]]></category>
		<category><![CDATA[ジャンプ]]></category>
		<category><![CDATA[ジャンプ処理]]></category>
		<category><![CDATA[地面判定]]></category>
		<guid isPermaLink="false">https://naiterukaiju.com/?p=779</guid>

					<description><![CDATA[Unity2Dでプレイヤーをジャンプさせたいけど、 といったことはありませんか？この記事では、ジャンプさせる実装法(解説付き)、二重ジャンプ防止対策も含めて初心者向けにわかりやすく解説します！ 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/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>こんにちは！夜の街2Dアクションゲームを制作中の怪獣です🦖</p>
</div></div>



<p>Unity2Dでプレイヤーをジャンプさせたいけど、</p>



<ul class="wp-block-list">
<li>ジャンプのさせ方が分からない</li>



<li>ジャンプが高くなりすぎる  </li>



<li>連続ジャンプしてしまう  </li>



<li>地面判定がうまくいかない</li>
</ul>



<p>といったことはありませんか？<br>この記事では、<span class="marker-under-red"><strong>ジャンプさせる実装法(解説付き)、二重ジャンプ防止対策</strong></span>も含めて<br>初心者向けにわかりやすく解説します！<br><br>Unityの移動処理には<strong>「AddForce・velocity・transform」</strong>の3種類の実装方法がありますが、<br>今回は<strong>重力を活かして自然なジャンプ</strong>にしたいので、<strong>AddForce</strong>を使った実装方法を解説しています。<br>他の実装方法の解説、比較もしていますので、よければご参照ください！</p>



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




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-8" checked><label class="toc-title" for="toc-checkbox-8">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">① 今回の完成イメージ</a></li><li><a href="#toc2" tabindex="0">② 事前準備</a><ol><li><a href="#toc3" tabindex="0">プレイヤー側</a></li><li><a href="#toc4" tabindex="0">床側</a></li></ol></li><li><a href="#toc5" tabindex="0">③ ジャンプ処理の基本コード</a></li><li><a href="#toc6" tabindex="0">④ 各処理の解説（初心者向け）</a><ol><li><a href="#toc7" tabindex="0">フィールド変数の追加</a></li><li><a href="#toc8" tabindex="0">Start（必要コンポーネントを取得）</a></li><li><a href="#toc9" tabindex="0">Update（接地状態を更新）</a></li><li><a href="#toc10" tabindex="0">_HitFloor (BoxCastで接地判定する)</a></li><li><a href="#toc11" tabindex="0">_OnJump</a></li></ol></li><li><a href="#toc12" tabindex="0">⑤ Floor レイヤーの作成</a><ol><li><a href="#toc13" tabindex="0">新しいレイヤーを作る</a></li><li><a href="#toc14" tabindex="0">床オブジェクトに Floor レイヤーを割り当てる</a></li><li><a href="#toc15" tabindex="0">Ground MaskにFloorレイヤーを割り当てる</a></li></ol></li><li><a href="#toc16" tabindex="0">⑥ よくあるエラーと対処法</a><ol><li><a href="#toc17" tabindex="0">❌ 地面にいるのにジャンプできない</a></li><li><a href="#toc18" tabindex="0">❌ 空中で連続ジャンプできる（多段になってしまう）</a></li><li><a href="#toc19" tabindex="0">❌ 斜面や段差で接地判定がガタつく</a></li></ol></li><li><a href="#toc20" tabindex="0">⑦（任意）旧Input版（Input.GetKeyDown）での書き方</a></li><li><a href="#toc21" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

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



<ul class="wp-block-list">
<li>Input System を使ってジャンプ操作をさせる</li>



<li><strong>地面にいる時だけジャンプ可能（空中連打で多段ジャンプしない）</strong></li>



<li>Rigidbody2D を使用</li>



<li>接地判定は BoxCast で足元をチェック</li>
</ul>



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



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Input Systemでボタン操作を設定している前提で進めています。<br>Input Systemの導入がまだ出来ていない場合は、まずこちらの記事から読むとスムーズです👾<br>（※旧Input版の実装方法も後半で解説あり）</p>
</blockquote>



<figure class="wp-block-embed is-type-wp-embed is-provider-2-d wp-block-embed-2-d"><div class="wp-block-embed__wrapper">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%a3%e3%80%91%e3%82%b8%e3%83%a3%e3%83%b3%e3%83%97%e5%87%a6%e7%90%86%e3%82%92%e4%bd%9c%e3%82%8d%e3%81%86/" title="【Unity入門④】プレイヤーをジャンプさせる処理を作ろう！" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門④】プレイヤーをジャンプさせる処理を作ろう！</div><div class="blogcard-snippet internal-blogcard-snippet">前回はプレイヤーの移動に合わせて顔の向きを変更させる方法の解説をしました。今回は ジャンプを作っていきます！ジャンプ処理自体はシンプルに作れますが、ジャンプ後の制御も行わないと空中でも無限ジャンプできてしまいます。この記事では 「接地中だけ...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.09.24</div></div></div></div></a>
</div></figure>



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



<h2 class="wp-block-heading"><span id="toc2">② 事前準備</span></h2>



<p>プレイヤー、プレイヤーが立てる床のオブジェクトを用意しておきます。</p>



<p>⇩インスペクターの設定を以下のような感じにしておきます</p>



<h3 class="wp-block-heading"><span id="toc3">プレイヤー側</span></h3>



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



<li><code>Collider2D（BoxCollider2Dなど）</code></li>
</ul>



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



<ul class="wp-block-list">
<li><code>Collider2D（BoxCollider2D / TilemapCollider2Dなど）</code></li>
</ul>



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



<h2 class="wp-block-heading"><span id="toc5">③ ジャンプ処理の基本コード</span></h2>



<p>✅ <code>Input System</code> の Jump を呼ぶ前提で <code>_OnJump()</code> を用意しています。<br>旧Input（Input.GetKeyDown）版も後半で紹介します。</p>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>public class Player : MonoBehaviour
{   
    &#91;SerializeField, Header("ジャンプ速度")&#93;
    private float _jumpSpeed;
    
    &#91;SerializeField, Header("接地判定用レイヤー(Floorなど)")&#93;
    private LayerMask _groundMask;   // インスペクターでFloorを指定

    private bool _bJump;
    private Collider2D _col;         // 実寸取得用
    
    void Start()
    {
        _col = GetComponent&lt;Collider2D>();
        _bJump = false;
    }
    
    void Update()
    {
        _HitFloor();
    }
    
    // 今床に触れているか、空中状態か判定する
    private void _HitFloor()
    {
        // もしプレイヤーのColliderが存在しなければ処理しない
        if (_col == null) return;

        // 接地判定のためのBoxCast（四角形の当たり判定を下に飛ばす）を準備する

        // プレイヤーのコライダーの範囲を取得
        Bounds b = _col.bounds;
        // 判定を出す位置（プレイヤーの足元より少し下に設定）
        Vector2 center = new Vector2(b.center.x, b.min.y - 0.05f);
        // 判定の大きさ（横幅はキャラより少し小さめ、高さはごく薄い矩形）
        Vector2 size = new Vector2(b.size.x * 0.9f, 0.12f);

        // BoxCastを実行
        // ・center：判定の中心位置
        // ・size  ：判定の大きさ
        // ・0f    ：角度は回転なし
        // ・Vector2.down：真下に向けて判定
        // ・0.05f ：判定を飛ばす長さ（わずかに下へ伸ばす）
        // ・_groundMask：Floorなど「地面」とするレイヤーにだけ反応させる
        RaycastHit2D hit = Physics2D.BoxCast(center, size, 0f, Vector2.down, 0.05f, _groundMask);

        // 当たり判定の情報取得
        bool grounded = (hit.collider != null);

        // 地面と触れたか確認
        if (grounded)
        {
            // 地面にいる → ジャンプ可能
            _bJump = false;
        }
        else
        {
            // 空中にいる → ジャンプ不可
            _bJump = true;
        }
    }
    // ジャンプ処理
    public void _OnJump(InputAction.CallbackContext context)
    {
        // 押下(performed)でなければ無視 / 空中なら無視
        if (!context.performed || _bJump) return;

        // Impulse:初速が早く徐々に減速、Force:初速が遅く、徐々に加速
        _rigid.AddForce(Vector2.up * _jumpSpeed, ForceMode2D.Impulse);

        // 連打での多段を防ぐために即座に空中扱い
        _bJump = true;
    }
}</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">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;ジャンプ速度&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">_jumpSpeed</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;接地判定用レイヤー(Floorなど)&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">LayerMask</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_groundMask</span><span style="color: #D4D4D4">;   </span><span style="color: #6A9955">// インスペクターでFloorを指定</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">bool</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_bJump</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">Collider2D</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_col</span><span style="color: #D4D4D4">;         </span><span style="color: #6A9955">// 実寸取得用</span></span>
<span class="line"><span style="color: #D4D4D4">    </span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #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">_col</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">GetComponent</span><span style="color: #D4D4D4">&lt;</span><span style="color: #4EC9B0">Collider2D</span><span style="color: #D4D4D4">&gt;();</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_bJump</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">false</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">    </span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Update</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #DCDCAA">_HitFloor</span><span style="color: #D4D4D4">();</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">    </span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// 今床に触れているか、空中状態か判定する</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">_HitFloor</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">// もしプレイヤーのColliderが存在しなければ処理しない</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_col</span><span style="color: #D4D4D4"> == </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 接地判定のためのBoxCast（四角形の当たり判定を下に飛ばす）を準備する</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">Bounds</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">b</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_col</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">bounds</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 判定を出す位置（プレイヤーの足元より少し下に設定）</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">Vector2</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">center</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Vector2</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">b</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">center</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">b</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">min</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4"> - 0.05</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">);</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 判定の大きさ（横幅はキャラより少し小さめ、高さはごく薄い矩形）</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">Vector2</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">size</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Vector2</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">b</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">size</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4"> * 0.9</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">, 0.12</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">// BoxCastを実行</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// ・center：判定の中心位置</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// ・size  ：判定の大きさ</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// ・0f    ：角度は回転なし</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// ・Vector2.down：真下に向けて判定</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// ・0.05f ：判定を飛ばす長さ（わずかに下へ伸ばす）</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// ・_groundMask：Floorなど「地面」とするレイヤーにだけ反応させる</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">RaycastHit2D</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">hit</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">Physics2D</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">BoxCast</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">center</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">size</span><span style="color: #D4D4D4">, 0</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">Vector2</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">down</span><span style="color: #D4D4D4">, 0.05</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">_groundMask</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">bool</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">grounded</span><span style="color: #D4D4D4"> = (</span><span style="color: #9CDCFE">hit</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">collider</span><span style="color: #D4D4D4"> != </span><span style="color: #569CD6">null</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">grounded</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">_bJump</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">false</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #C586C0">else</span></span>
<span class="line"><span style="color: #D4D4D4">        {</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #6A9955">// 空中にいる → ジャンプ不可</span></span>
<span class="line"><span style="color: #D4D4D4">            </span><span style="color: #9CDCFE">_bJump</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">true</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">        }</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// ジャンプ処理</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">_OnJump</span><span style="color: #D4D4D4">(InputAction.CallbackContext </span><span style="color: #9CDCFE">context</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 押下(performed)でなければ無視 / 空中なら無視</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">context</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">performed</span><span style="color: #D4D4D4"> || </span><span style="color: #9CDCFE">_bJump</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// Impulse:初速が早く徐々に減速、Force:初速が遅く、徐々に加速</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_rigid</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">AddForce</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">Vector2</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">up</span><span style="color: #D4D4D4"> * </span><span style="color: #9CDCFE">_jumpSpeed</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">ForceMode2D</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">Impulse</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #6A9955">// 連打での多段を防ぐために即座に空中扱い</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_bJump</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">true</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">    }</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span></code></pre></div>



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



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



<p>↓※以下は各処理の説明です。わかってるよという方は⑤まで読み飛ばしてください</p>



<h3 class="wp-block-heading"><span id="toc7">フィールド変数の追加</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>    &#91;SerializeField, Header("ジャンプ速度")&#93;
    private float _jumpSpeed;
    
    &#91;SerializeField, Header("接地判定用レイヤー(Floorなど)")&#93;
    private LayerMask _groundMask;   // インスペクターでFloorを指定

    private bool _bJump;
    private Collider2D _col;         // 実寸取得用
</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: #D4D4D4">    </span><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">float</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_jumpSpeed</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;接地判定用レイヤー(Floorなど)&quot;</span><span style="color: #D4D4D4">)&#93;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">LayerMask</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_groundMask</span><span style="color: #D4D4D4">;   </span><span style="color: #6A9955">// インスペクターでFloorを指定</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">bool</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_bJump</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Collider2D</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_col</span><span style="color: #D4D4D4">;         </span><span style="color: #6A9955">// 実寸取得用</span></span>
<span class="line"></span></code></pre></div>



<p><code>_jumpSpeed</code>：ジャンプの強さ（大きいほど高く跳ぶ）。<strong>インスペクターで強さを調整します。</strong>（15くらいがおすすめ）<br><code>_groundMask</code>：<strong>「床」と判定するレイヤー</strong>を指定します。（Floorなど）<strong>インスペクターで <code>Floor</code> レイヤーを選びます。</strong></p>



<p>✅ Tag判定でも同じことが出来ますが、今回はLayerMaskで進めています。<br>LayerMaskは<strong>「物理判定の対象を限定するための仕組み」</strong>で今回のような<strong>地面だけ判定</strong>するような接地判定に向いています。</p>



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



<h3 class="wp-block-heading"><span id="toc8">Start（必要コンポーネントを取得）</span></h3>



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



<ul class="wp-block-list">
<li><strong><code>Collider2D</code> （プレイヤー自身に付いている当たり判定情報）を取得</strong>して変数に保存。</li>



<li><code>_bJump</code> は「今ジャンプ中かどうか」を管理するフラグです。初期値は <code>false</code>（ジャンプ可能）。</li>
</ul>



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



<h3 class="wp-block-heading"><span id="toc9">Update（接地状態を更新）</span></h3>



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



<p>Updateは毎フレーム呼び出されるUnityの共通機能です。<br>ここで <code>_HitFloor()</code> を呼び出して、接地中かどうかを更新します。</p>



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



<h3 class="wp-block-heading"><span id="toc10">_HitFloor (BoxCastで接地判定する)</span></h3>



<h5 class="wp-block-heading">Colliderが存在するか確認</h5>



<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 (_col == null) return;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (</span><span style="color: #9CDCFE">_col</span><span style="color: #D4D4D4"> == </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4">;</span></span></code></pre></div>



<p>ここでは<br><strong>プレイヤーのColliderが取得できているか</strong>を確認しています。</p>



<p>もしColliderが存在しない状態で処理を続けると<br>エラーが発生してしまうため、Colliderが無い場合 処理を中断するという安全対策です。</p>



<h5 class="wp-block-heading">プレイヤーの当たり判定サイズを取得</h5>



<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>Bounds b = _col.bounds;</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">Bounds</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">b</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">_col</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">bounds</span><span style="color: #D4D4D4">;</span></span></code></pre></div>



<p>ここでは<br>**プレイヤーのコライダーの範囲（サイズ・位置）**を取得しています。</p>



<p><code>Bounds</code>には次のような情報が入っています。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>情報</th><th>内容</th></tr></thead><tbody><tr><td>center</td><td>コライダーの中心</td></tr><tr><td>min</td><td>コライダーの一番下</td></tr><tr><td>size</td><td>コライダーのサイズ</td></tr></tbody></table></figure>



<p>つまりプレイヤーの大きさ、プレイヤーの位置を取得しています。</p>



<h5 class="wp-block-heading">接地判定の中心位置を決める</h5>



<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>Vector2 center = new Vector2(b.center.x, b.min.y - 0.05f);</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">Vector2</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">center</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Vector2</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">b</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">center</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">b</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">min</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">y</span><span style="color: #D4D4D4"> - 0.05</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">);</span></span></code></pre></div>



<p>ここでは<br><strong>地面を判定する位置</strong>を決めています。</p>



<p>ポイントはここです。<br><strong>b.min.y</strong></p>



<p>これは、<strong><span class="marker-under-red">プレイヤーコライダーの一番下の位置</span></strong>です。<br>さらに<strong>-0.05</strong>fをしている理由は<strong><span class="marker-under-red">プレイヤーの足元より少し下で判定するため</span></strong>です。</p>



<pre class="wp-block-preformatted">   プレイヤー<br>   ┌─────┐<br>   │     │<br>   │     │<br>   └─────┘ ←ここがb.min.y   □ ←この少し下で接地判定<br>────────── 地面</pre>



<p>こうすることで<br><strong>足元に地面があるかを正確に判定できます</strong>！</p>



<h5 class="wp-block-heading">判定する矩形サイズを決める</h5>



<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>Vector2 size = new Vector2(b.size.x * 0.9f, 0.12f);</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">Vector2</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">size</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">new</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Vector2</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">b</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">size</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4"> * 0.9</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">, 0.12</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">);</span></span></code></pre></div>



<p>ここでは<strong>BoxCastのサイズ</strong>を設定しています。<br><strong>b.size.x * 0.9f（横幅）</strong>で、プレイヤーの幅より<strong>少しだけ小さくしています。</strong><br>理由は、<strong>壁に触れたときに地面と誤判定しないようにするため</strong>です。</p>



<p><strong>0.12f（高さ）</strong>は<strong>かなり薄くしています。</strong><br>これは、<strong>足元のわずかな範囲だけを判定するためです。</strong></p>



<h5 class="wp-block-heading"> BoxCastで地面をチェック</h5>



<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>RaycastHit2D hit = Physics2D.BoxCast(
    center,
    size,
    0f,
    Vector2.down,
    0.05f,
    _groundMask
);</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">RaycastHit2D</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">hit</span><span style="color: #D4D4D4"> = </span><span style="color: #9CDCFE">Physics2D</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">BoxCast</span><span style="color: #D4D4D4">(</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">center</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">size</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><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 style="color: #9CDCFE">Vector2</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">down</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">    0.05</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">,</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">_groundMask</span></span>
<span class="line"><span style="color: #D4D4D4">);</span></span></code></pre></div>



<p>ここが <strong>この処理の一番重要な部分</strong>です。<br>BoxCastとは<strong><span class="marker-under-red">四角形を飛ばして当たり判定をチェックする機能</span></strong>です。</p>



<p>【<strong>イメージ</strong>】</p>



<pre class="wp-block-preformatted">プレイヤー<br>  │<br>  ▼[ □ ] ←判定ボックス<br>  │<br>  ▼<br>地面</pre>



<p>各引数の意味はこちら。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>引数</th><th>意味</th></tr></thead><tbody><tr><td>center</td><td>判定の中心</td></tr><tr><td>size</td><td>判定の大きさ</td></tr><tr><td>0f</td><td>回転なし</td></tr><tr><td>Vector2.down</td><td>下方向に判定</td></tr><tr><td>0.05f</td><td>飛ばす距離</td></tr><tr><td>_groundMask</td><td>地面レイヤーだけ判定</td></tr></tbody></table></figure>



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



<p><strong>BoxCast</strong>の他にも<strong>、</strong>Unityにはいくつかの判定方法があります。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>方法</th><th>形</th><th>用途</th></tr></thead><tbody><tr><td>Raycast</td><td>線</td><td>足元・視線判定</td></tr><tr><td>CircleCast</td><td>円</td><td>丸いキャラ向き</td></tr><tr><td><strong>BoxCast</strong></td><td>四角形</td><td>2Dキャラの接地判定に最適</td></tr></tbody></table></figure>



<h5 class="wp-block-heading">なぜジャンプ判定でBoxCastを使うのか？</h5>



<p>プレイヤーは四角いことが多いですよね。</p>



<pre class="wp-block-preformatted">  □ ← プレイヤー<br>￣￣￣￣ ← 床</pre>



<p>Raycast（線）だと、</p>



<pre class="wp-block-preformatted">  □<br>　 |<br>   |<br> <br>￣￣￣￣</pre>



<p>→ ちょっとズレると判定ミスします。</p>



<p>でも BoxCast なら：</p>



<pre class="wp-block-preformatted"> □<br> ███ ← 薄い箱<br>￣￣￣￣</pre>



<p>足元全体をチェックできるので安定しやすくなります🚶</p>



<h5 class="wp-block-heading">地面に当たったか確認</h5>



<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>bool grounded = (hit.collider != null);</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">bool</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">grounded</span><span style="color: #D4D4D4"> = (</span><span style="color: #9CDCFE">hit</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">collider</span><span style="color: #D4D4D4"> != </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">);</span></span></code></pre></div>



<p>BoxCastが</p>



<ul class="wp-block-list">
<li>地面に当たった → colliderが存在</li>



<li>当たってない → null</li>
</ul>



<p>になります。<br>つまり <strong>hit.collider != null</strong>は、<strong>地面に触れているかどうか</strong>を意味しています。</p>



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



<h5 class="wp-block-heading">ジャンプ可能かどうかを設定</h5>



<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 (grounded)
{
    _bJump = false;
}
else
{
    _bJump = true;
}

bool grounded = (hit.collider != null);bool grounded = (hit.collider != null);</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">grounded</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">_bJump</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">false</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"><span style="color: #C586C0">else</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">_bJump</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">true</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span>
<span class="line"><span style="color: #9CDCFE">bool</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">grounded</span><span style="color: #D4D4D4"> = (</span><span style="color: #9CDCFE">hit</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">collider</span><span style="color: #D4D4D4"> != </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">);</span><span style="color: #9CDCFE">bool</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">grounded</span><span style="color: #D4D4D4"> = (</span><span style="color: #9CDCFE">hit</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">collider</span><span style="color: #D4D4D4"> != </span><span style="color: #569CD6">null</span><span style="color: #D4D4D4">);</span></span></code></pre></div>



<p>ここでは、</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>状態</th><th>処理</th></tr></thead><tbody><tr><td>地面にいる</td><td>ジャンプ可能</td></tr><tr><td>空中</td><td>ジャンプ不可</td></tr></tbody></table></figure>



<p>という状態を設定しています。</p>



<p>この <code>_bJump</code> をジャンプ処理で使います。</p>



<h3 class="wp-block-heading"><span id="toc11">_OnJump</span></h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>public void _OnJump(InputAction.CallbackContext context)
{
    // 入力が押された瞬間以外は無視 / 空中中は無視
    if (!context.performed || _bJump) return;

    // Rigidbodyに上方向の力を加える
    _rigid.AddForce(Vector2.up * _jumpSpeed, ForceMode2D.Impulse);

    // ジャンプ直後は空中扱いにして多段ジャンプを防ぐ
    _bJump = true;
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">_OnJump</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">InputAction</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">CallbackContext</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">context</span><span style="color: #D4D4D4">)</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// 入力が押された瞬間以外は無視 / 空中中は無視</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #C586C0">if</span><span style="color: #D4D4D4"> (!</span><span style="color: #9CDCFE">context</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">performed</span><span style="color: #D4D4D4"> || </span><span style="color: #9CDCFE">_bJump</span><span style="color: #D4D4D4">) </span><span style="color: #C586C0">return</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// Rigidbodyに上方向の力を加える</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">_rigid</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">AddForce</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">Vector2</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">up</span><span style="color: #D4D4D4"> * </span><span style="color: #9CDCFE">_jumpSpeed</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">ForceMode2D</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">Impulse</span><span style="color: #D4D4D4">);</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #6A9955">// ジャンプ直後は空中扱いにして多段ジャンプを防ぐ</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">_bJump</span><span style="color: #D4D4D4"> = </span><span style="color: #569CD6">true</span><span style="color: #D4D4D4">;</span></span>
<span class="line"><span style="color: #D4D4D4">}</span></span>
<span class="line"></span></code></pre></div>



<ul class="wp-block-list">
<li><code>context.performed</code> … 入力が「押された瞬間」だけ反応します。</li>



<li><code>_bJump</code> が <code>true</code> のとき（空中）は処理をスキップ。</li>



<li>ジャンプ処理にはいくつかの実装方法がありますが、<code><strong>AddForce</strong></code>（Rigidbodyに力を加える関数）を使う理由は<strong>物理挙動を活かして自然なジャンプ</strong>にするためです。<br>上方向（Y軸プラス方向）に対しジャンプの強さ（高さ）を図り、<strong>ForceMode2D.Impulse</strong>を引数で渡すことで、<strong>一瞬だけ強い力を加える</strong>ことができます。<br>こうすることで、<strong>初速を一気に与えて自然なジャンプ挙動になります。</strong></li>
</ul>



<p><strong>AddForce</strong>は重力と組み合わさることで、<br>上昇→減速→落下の自然なカーブを描きます。<br>そのため、より気持ちのいいジャンプになります！<br><strong><span class="marker-under-red">今回のようなアクションゲームならAddForceがおすすめです！</span></strong></p>



<p>⬇️他にも、AddForce以外には以下のような方法があります。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>方法</th><th>特徴</th><th>物理挙動</th><th>主な用途</th></tr></thead><tbody><tr><td>_rigid.AddForce</td><td>力を加える</td><td>◎（自然）</td><td>ジャンプ・吹っ飛び</td></tr><tr><td>_rigid.velocity</td><td>速度を直接指定</td><td>○（やや物理）</td><td>移動、定速移動</td></tr><tr><td>transform</td><td>位置を直接変更</td><td>✕（物理なし）</td><td>UI・演出・単純移動</td></tr></tbody></table></figure>



<h4 class="wp-block-heading">velocityでジャンプさせる方法（速度を直接指定）</h4>



<p>速度を直接指定でき、瞬時に移動させることが出来るのが特徴です。</p>



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



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



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



<p><strong>メリット</strong>・・・操作が安定する（毎回同じ動き）、細かい制御がしやすい横移動との相性が良い<br><strong>デメリット</strong>・・・物理感は少し薄れる、慣性が消える（急に止まる）</p>



<p>向いている用途は、<strong>プレイヤーの左右移動、シンプルなジャンプ制御、アクションゲーム全般</strong>です。</p>



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



<h4 class="wp-block-heading"> transformでジャンプさせる方法（位置を直接変更）</h4>



<p>Rigidbodyを使用せず、位置を直接変更する方法です。</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>transform.position += Vector3.up * 5f;</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #9CDCFE">transform</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">position</span><span style="color: #D4D4D4"> += </span><span style="color: #9CDCFE">Vector3</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">up</span><span style="color: #D4D4D4"> * 5</span><span style="color: #9CDCFE">f</span><span style="color: #D4D4D4">;</span></span></code></pre></div>



<p><strong>メリット</strong>・・・シンプルで分かりやすい、Rigidbody不要、軽い<br><strong>デメリット</strong>・・・当たり判定が壊れやすい、物理エンジン無視、壁すり抜けなどが起きる</p>



<p>向いている用途は、<strong>UI、カメラ移動、背景スクロール</strong>、<strong>演出効果</strong>などです。</p>



<h2 class="wp-block-heading"><span id="toc12">⑤ Floor レイヤーの作成</span></h2>



<p><strong>「床」</strong>と判定する<code>Floor</code> レイヤーを追加します。</p>



<h3 class="wp-block-heading"><span id="toc13">新しいレイヤーを作る</span></h3>



<p>どのオブジェクトでもいいのでクリックし、「Inspector」ウィンドウを確認<br>「Layer」の右端にあるプルダウンをクリック → 一番下の 「Add Layer…」 を選びます。<br>　（インスペクターが Tags &amp; Layers の設定画面に切り替わります。）</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="764" src="https://naiterukaiju.com/wp-content/uploads/2025/09/スクリーンショット-2025-09-27-113346-1024x764.png" alt="レイヤーの設定方法" class="wp-image-218" srcset="https://naiterukaiju.com/wp-content/uploads/2025/09/スクリーンショット-2025-09-27-113346-1024x764.png 1024w, https://naiterukaiju.com/wp-content/uploads/2025/09/スクリーンショット-2025-09-27-113346-300x224.png 300w, https://naiterukaiju.com/wp-content/uploads/2025/09/スクリーンショット-2025-09-27-113346-768x573.png 768w, https://naiterukaiju.com/wp-content/uploads/2025/09/スクリーンショット-2025-09-27-113346.png 1240w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>その空欄に <strong><code>Floor</code></strong> と入力してください。<br>（大文字・小文字は区別されないですが、コードと統一した方が安全です）</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="830" height="617" src="https://naiterukaiju.com/wp-content/uploads/2026/03/image-15-edited.png" alt="レイヤーの追加方法" class="wp-image-991" srcset="https://naiterukaiju.com/wp-content/uploads/2026/03/image-15-edited.png 830w, https://naiterukaiju.com/wp-content/uploads/2026/03/image-15-edited-300x223.png 300w, https://naiterukaiju.com/wp-content/uploads/2026/03/image-15-edited-768x571.png 768w" sizes="(max-width: 830px) 100vw, 830px" /></figure>



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



<h3 class="wp-block-heading"><span id="toc14">床オブジェクトに Floor レイヤーを割り当てる</span></h3>



<ul class="wp-block-list">
<li>Hierarchy 上で「床」となるオブジェクトを選択。</li>



<li>Inspector の <strong>Layer</strong> プルダウンから、先ほど作成した <strong>Floor</strong> を選びます。</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="470" height="223" src="https://naiterukaiju.com/wp-content/uploads/2025/09/スクリーンショット-2025-09-27-113604.png" alt="Floor レイヤーを割り当てている様子" class="wp-image-220" srcset="https://naiterukaiju.com/wp-content/uploads/2025/09/スクリーンショット-2025-09-27-113604.png 470w, https://naiterukaiju.com/wp-content/uploads/2025/09/スクリーンショット-2025-09-27-113604-300x142.png 300w" sizes="(max-width: 470px) 100vw, 470px" /></figure>



<h3 class="wp-block-heading"><span id="toc15">Ground MaskにFloorレイヤーを割り当てる</span></h3>



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



<li>Ground Maskに今作成した <strong>Floor</strong> を選びます。</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="762" src="https://naiterukaiju.com/wp-content/uploads/2025/09/スクリーンショット-2025-09-27-113446-1-1024x762.png" alt="Ground MaskにFloorレイヤーを割り当てている様子" class="wp-image-221" srcset="https://naiterukaiju.com/wp-content/uploads/2025/09/スクリーンショット-2025-09-27-113446-1-1024x762.png 1024w, https://naiterukaiju.com/wp-content/uploads/2025/09/スクリーンショット-2025-09-27-113446-1-300x223.png 300w, https://naiterukaiju.com/wp-content/uploads/2025/09/スクリーンショット-2025-09-27-113446-1-768x572.png 768w, https://naiterukaiju.com/wp-content/uploads/2025/09/スクリーンショット-2025-09-27-113446-1.png 1241w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>ここまで設定したらジャンプ処理の完成です！</p>
</blockquote>



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



<h2 class="wp-block-heading"><span id="toc16">⑥ よくあるエラーと対処法</span></h2>



<p>↓ジャンプが動かない、挙動が変な場合は以下を確認してみてください</p>



<h3 class="wp-block-heading"><span id="toc17">❌ 地面にいるのにジャンプできない</span></h3>



<ul class="wp-block-list">
<li>床オブジェクトのLayerMaskが設定されていない
<ul class="wp-block-list">
<li>✅Layer：「Floor」を設定する</li>
</ul>
</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="710" height="107" src="https://naiterukaiju.com/wp-content/uploads/2026/03/Unityで2Dアクションゲームを作ろう！のコピーのコピー-1.png" alt="「Floor」を設定する方法" class="wp-image-987" srcset="https://naiterukaiju.com/wp-content/uploads/2026/03/Unityで2Dアクションゲームを作ろう！のコピーのコピー-1.png 710w, https://naiterukaiju.com/wp-content/uploads/2026/03/Unityで2Dアクションゲームを作ろう！のコピーのコピー-1-300x45.png 300w" sizes="(max-width: 710px) 100vw, 710px" /></figure>



<ul class="wp-block-list">
<li>プレイヤー側の「床」と判定するレイヤー（<code>_groundMask</code> ）の指定がされていない
<ul class="wp-block-list">
<li>✅GroundMask：「Floor」を設定する</li>
</ul>
</li>
</ul>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="710" height="252" src="https://naiterukaiju.com/wp-content/uploads/2026/03/Unityで2Dアクションゲームを作ろう！のコピーのコピー-1-1.png" alt="GroundMask：「Floor」を設定する方法" class="wp-image-988" srcset="https://naiterukaiju.com/wp-content/uploads/2026/03/Unityで2Dアクションゲームを作ろう！のコピーのコピー-1-1.png 710w, https://naiterukaiju.com/wp-content/uploads/2026/03/Unityで2Dアクションゲームを作ろう！のコピーのコピー-1-1-300x106.png 300w" sizes="(max-width: 710px) 100vw, 710px" /></figure>



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



<h3 class="wp-block-heading"><span id="toc18">❌ 空中で連続ジャンプできる（多段になってしまう）</span></h3>



<ul class="wp-block-list">
<li><code>_HitFloor()</code> が呼ばれていない/判定が機能していない</li>



<li>ジャンプ後 <code>_bJump = true;</code> を入れていない</li>
</ul>



<p>✅ 対処：<code>_OnJump</code> の最後で <code>_bJump = true;</code> を必ず入れる</p>



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



<h3 class="wp-block-heading"><span id="toc19">❌ 斜面や段差で接地判定がガタつく</span></h3>



<ul class="wp-block-list">
<li>sizeが薄すぎる/小さすぎる</li>



<li>distanceが短すぎる</li>
</ul>



<p>✅ 対処：<code>size.y</code> や <code>0.05f</code> を少し増やす（例：0.08f、0.1f）</p>



<h2 class="wp-block-heading"><span id="toc20">⑦（任意）旧Input版（Input.GetKeyDown）での書き方</span></h2>



<p>Input Systemを使っていない場合は、Updateでこう書けばOKです🙆</p>



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



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



<p>今回の処理は次の流れになっています。</p>



<p>① プレイヤーのコライダー情報を取得<br>② 足元の位置を計算<br>③ 小さい矩形を作る<br>④ BoxCastで下方向に判定<br>⑤ 地面に当たったか確認<br>⑥ ジャンプ可能か設定</p>



<p>この処理によって</p>



<ul class="wp-block-list">
<li>空中ジャンプ防止</li>



<li>正確な接地判定</li>
</ul>



<p>が実現できます！！</p>



<p>今回は、Unity2Dでのジャンプ実装方法を解説しました。</p>



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



<p>他にも、<br><strong>「プレイヤーを追従させるカメラワークを作りたい」<br>「歩行やジャンプ時にアニメーションをつけたい」</strong><br>という実装したい人は、こちらの記事もご興味あれば覗いてみてください👾</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-2-d wp-block-embed-2-d"><div class="wp-block-embed__wrapper">

<a href="https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91%e3%83%97%e3%83%ac%e3%82%a4%e3%83%a4%e3%83%bc%e3%82%92%e8%bf%bd%e5%be%93%e3%81%95%e3%81%9b%e3%82%8b%e3%82%ab%e3%83%a1%e3%83%a9%e3%81%ae%e5%ae%9f%e8%a3%85%e6%96%b9%e6%b3%95/" title="【Unity2D】プレイヤーを追従させるカメラを作るには？｜実装方法（コード全文・解説付き）" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-14-233140-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-14-233140-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-14-233140-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-14-233140-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity2D】プレイヤーを追従させるカメラを作るには？｜実装方法（コード全文・解説付き）</div><div class="blogcard-snippet internal-blogcard-snippet">Unityで2Dアクションゲームを作っていると、「プレイヤーの歩行に合わせてカメラも追従させたい」「プレイヤーを歩かせてもカメラが追従しない」「横だけ追従したい」といったことはありませんか？この記事では、プレイヤーにカメラを追従させる基本実...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.03.14</div></div></div></div></a>
</div></figure>



<p><br></p>



<figure class="wp-block-embed is-type-wp-embed is-provider-2-d wp-block-embed-2-d"><div class="wp-block-embed__wrapper">

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e3%80%91%e6%ad%a9%e8%a1%8c%e6%99%82%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e4%bd%9c%e3%82%8a%e6%96%b9%ef%bc%882d%ef%bc%89%ef%bd%9canim/" title="【Unity2D】歩行アニメーションの作り方｜Animatorで「待機⇔歩く」を切り替えよう" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2026/02/Unityで2Dアクションゲームを作ろう！のコピー-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/Unityで2Dアクションゲームを作ろう！のコピー-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2026/02/Unityで2Dアクションゲームを作ろう！のコピー-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2026/02/Unityで2Dアクションゲームを作ろう！のコピー-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】歩行アニメーションの作り方｜Animatorで「待機⇔歩く」を切り替えよう</div><div class="blogcard-snippet internal-blogcard-snippet">こんにちは！夜の街2Dアクションゲームを制作中の怪獣です🦖今回は 2Dキャラの「歩行」時のアニメーションを を Unity で作る方法を解説します！手順としては、待機、歩行用の画像を用意するAnimation Clip（歩くアニメ）を作成す...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.02.08</div></div></div></div></a>
</div></figure>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91%e3%82%b8%e3%83%a3%e3%83%b3%e3%83%97%e5%87%a6%e7%90%86%e3%82%92%e5%ae%9f%e8%a3%85%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://naiterukaiju.com/wp-content/uploads/2026/03/サンプルゲーム-SampleScene-Windows-Mac-Linux-Unity-2021.3.6f1-Personal-_DX11_-2026-03-01-19-13-41-Trim.mp4" length="10172130" type="video/mp4" />

			</item>
		<item>
		<title>【Unity2D】歩行アニメーションの作り方｜Animatorで「待機⇔歩く」を切り替えよう</title>
		<link>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e3%80%91%e6%ad%a9%e8%a1%8c%e6%99%82%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e4%bd%9c%e3%82%8a%e6%96%b9%ef%bc%882d%ef%bc%89%ef%bd%9canim/</link>
					<comments>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e3%80%91%e6%ad%a9%e8%a1%8c%e6%99%82%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e4%bd%9c%e3%82%8a%e6%96%b9%ef%bc%882d%ef%bc%89%ef%bd%9canim/#respond</comments>
		
		<dc:creator><![CDATA[怪獣]]></dc:creator>
		<pubDate>Sun, 08 Feb 2026 08:04:10 +0000</pubDate>
				<category><![CDATA[Unity2D実装解説（テクニック）]]></category>
		<category><![CDATA[2Dゲーム]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[animator]]></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=664</guid>

					<description><![CDATA[今回は 2Dキャラの「歩行」時のアニメーションを を 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/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>こんにちは！夜の街2Dアクションゲームを制作中の怪獣です🦖</p>
</div></div>



<p>今回は <strong><span class="marker-under-red">2Dキャラの「歩行」時のアニメーションを</span></strong> を Unity で作る方法を解説します！</p>



<p>手順としては、</p>



<ul class="wp-block-list">
<li>待機、歩行用の画像を用意する</li>



<li>Animation Clip（歩くアニメ）を作成する</li>



<li>Animator で <strong>待機(Idle)⇔歩行(Walk)</strong> を条件で切り替える設定をする</li>



<li>スクリプトにアニメーションを切り替える処理を作成する</li>
</ul>



<p>という流れです。<br><br>歩いているとき⇒歩行アニメーション、<br>止まっているとき⇒歩行アニメーションを停止<br>というイメージで作っていきます🦖</p>



<p>↓2枚の画像だけでそれっぽく見せています</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="100" height="200" src="https://naiterukaiju.com/wp-content/uploads/2026/02/rinta.gif" alt="" class="wp-image-717"/></figure>



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




  <div id="toc" class="toc tnt-number toc-center tnt-number border-element"><input type="checkbox" class="toc-checkbox" id="toc-checkbox-10" checked><label class="toc-title" for="toc-checkbox-10">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0"> 事前準備：歩行用の画像を用意する</a></li><li><a href="#toc2" tabindex="0">①歩行アニメーションを作る</a></li><li><a href="#toc3" tabindex="0">②AnimationControllerを作成する</a></li><li><a href="#toc4" tabindex="0">③Animator に Idle / Walk を配置する</a></li><li><a href="#toc5" tabindex="0">④アニメーションを作る</a><ol><li><a href="#toc6" tabindex="0">歩行アニメーションを作る</a></li></ol></li><li><a href="#toc7" tabindex="0">⑤アニメーション切り替え設定</a><ol><li><a href="#toc8" tabindex="0"> パラメータを作成</a></li><li><a href="#toc9" tabindex="0">遷移（Transition）を設定</a></li></ol></li><li><a href="#toc10" tabindex="0">⑥切り替える処理をつくる</a><ol><li><a href="#toc11" tabindex="0">各処理の説明</a></li><li><a href="#toc12" tabindex="0">Animator側ではこうなっています</a></li></ol></li><li><a href="#toc13" tabindex="0">動作確認</a></li><li><a href="#toc14" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1"> 事前準備：歩行用の画像を用意する</span></h2>



<p>「歩行」アニメーション画像を用意します。（最低でも2枚は用意）<br>ここでは、筆者が作成した画像を使用します。<br>（画像がない方は、以下のアセットを使用することもできます↓）</p>





<a rel="noopener" href="https://assetstore.unity.com/packages/2d/characters/simple-2d-platformer-assets-pack-188518#description" title="Simple 2D Platformer Assets Pack | 2D Characters | Unity Asset Store" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://naiterukaiju.com/wp-content/uploads/cocoon-resources/blog-card-cache/92a59d9c0b0d34480303391a8ee12da1.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Simple 2D Platformer Assets Pack | 2D Characters | Unity Asset Store</div><div class="blogcard-snippet external-blogcard-snippet">Elevate your workflow with the Simple 2D Platformer Assets Pack asset from Goldmetal. Find this &amp; more Characters on the...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://assetstore.unity.com/packages/2d/characters/simple-2d-platformer-assets-pack-188518#description" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">assetstore.unity.com</div></div></div></div></a>




<p>プレイヤーの歩行処理がまだ実装出来ていない場合は、まず実装させる必要があります。<br>プレイヤーの歩行処理に関しては、こちらの記事で解説しています↓</p>



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

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%88%9d%e5%bf%83%e8%80%85%e5%90%91%e3%81%91%e3%80%91%e3%83%97%e3%83%ac%e3%82%a4%e3%83%a4%e3%83%bc%e3%82%92%e5%b7%a6%e5%8f%b3%e3%81%ab%e6%ad%a9%e3%81%8b%e3%81%9b%e3%82%8b%e5%87%a6/" title="【Unity入門②】プレイヤーを左右に歩かせる処理を作ろう" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2025/11/Unityで2Dアクションゲームを作ろう！-1-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity入門②】プレイヤーを左右に歩かせる処理を作ろう</div><div class="blogcard-snippet internal-blogcard-snippet">前回の記事では、プレイヤーと、プレイヤーが立てる床を作成しました。今回は 新しいInput System（InputAction）を使って、プレイヤーを左右に歩かせる処理を追加します！完成イメージ←/→ を押した際に、プレイヤーが左右に動く...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2025.09.16</div></div></div></div></a>
</div>



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



<h2 class="wp-block-heading"><span id="toc2">①歩行アニメーションを作る</span></h2>



<p>まず初めに<strong>Animation Clip</strong>を作成します。<br><strong>Animation Clip</strong>とは、<strong>具体的な動きのデータを保存したアセットファイル</strong>のことです。<br>（拡張子.animが付きます。）</p>



<ol class="wp-block-list">
<li>ProjectタブのAssertフォルダを選択し、「Animation」フォルダを作成する</li>



<li>「Animation」フォルダを選択し右クリックで<strong>Create &gt; Animation </strong>ボタンを押す</li>



<li>ファイル名を 「<code>Walk</code>」 にして保存する
<ul class="wp-block-list">
<li>inspector
<ul class="wp-block-list">
<li>Loop Time：✅をつける（アニメーションがループで再生されるようになります）</li>
</ul>
</li>
</ul>
</li>



<li>同様に、「Idle」アニメーションも作っておきます</li>
</ol>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="549" height="622" src="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-25-2.png" alt="Animationの追加" class="wp-image-668" style="width:549px;height:auto" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-25-2.png 549w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-25-2-265x300.png 265w" sizes="(max-width: 549px) 100vw, 549px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="499" src="https://naiterukaiju.com/wp-content/uploads/2026/02/image-3-1024x499.png" alt="Animation追加後の画面状態" class="wp-image-682" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/image-3-1024x499.png 1024w, https://naiterukaiju.com/wp-content/uploads/2026/02/image-3-300x146.png 300w, https://naiterukaiju.com/wp-content/uploads/2026/02/image-3-768x374.png 768w, https://naiterukaiju.com/wp-content/uploads/2026/02/image-3.png 1155w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



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



<h2 class="wp-block-heading"><span id="toc3">②AnimationControllerを作成する</span></h2>



<p>次に、アニメーションの切り替えを管理する<strong>「AnimationController」</strong>を作成します！<br><strong>AnimationController</strong>を作成したら、Playerオブジェクトと紐づけるようにします。</p>



<ol class="wp-block-list">
<li>「Animation」フォルダを選択し右クリックで<strong>Create &gt; AnimationController </strong>ボタンを押す</li>



<li>ファイル名を 「Player」 にして保存します</li>



<li><strong>Playerオブジェクト</strong>を選択し、AddComponentで以下を追加します
<ul class="wp-block-list">
<li>Animator</li>
</ul>
</li>



<li>Animator設定
<ul class="wp-block-list">
<li><strong>Controller</strong>：2で作成した<strong>AnimationController</strong>をドラッグ＆ドロップします</li>
</ul>
</li>
</ol>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="662" height="535" src="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-29.png" alt="AnimationControllerの追加" class="wp-image-675" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-29.png 662w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-29-300x242.png 300w" sizes="(max-width: 662px) 100vw, 662px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="622" height="492" src="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-32.png" alt="AnimationController追加後の画面" class="wp-image-684" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-32.png 622w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-32-300x237.png 300w" sizes="(max-width: 622px) 100vw, 622px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="687" height="504" src="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-31.png" alt="AnimationControllerをドラッグ＆ドロップ" class="wp-image-679" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-31.png 687w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-31-300x220.png 300w" sizes="(max-width: 687px) 100vw, 687px" /></figure>



<p></p>



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



<h2 class="wp-block-heading"><span id="toc4">③Animator に Idle / Walk を配置する</span></h2>



<p>作成したAnimation Clip（歩行、待機アニメ）を、使用するためにAnimatorに配置していきます。<br>Animatorとは、<strong>オブジェクトを動かす実体（司令塔）</strong>です。<br>②で作ったAnimator Controllerを読み込み、最終的にアニメーションを再生する役割をしています！</p>



<ol class="wp-block-list">
<li><strong>AnimationController</strong>をダブルクリックし、<code>Animator</code> ウィンドウを開く</li>



<li>  <code>Animator</code> ウィンドウに「Walk」、「Idel」をドラッグして配置する</li>



<li>Idle を右クリック → <strong>Set as Layer Default State</strong>（最初は待機にする）
<ul class="wp-block-list">
<li>「Entry」⇒「Idle」に紐づくようになります</li>



<li>「Entry」は<strong>ゲーム起動時に再生されるアニメーション</strong>です</li>
</ul>
</li>
</ol>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="778" height="558" src="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-34.png" alt="Animator に Idle / Walk を配置する" class="wp-image-686" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-34.png 778w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-34-300x215.png 300w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-34-768x551.png 768w" sizes="(max-width: 778px) 100vw, 778px" /></figure>



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



<h2 class="wp-block-heading"><span id="toc5">④アニメーションを作る</span></h2>



<p>ここで実際に動くアニメーションを作成していきます！</p>



<h3 class="wp-block-heading"><span id="toc6">歩行アニメーションを作る</span></h3>



<ol class="wp-block-list">
<li><strong><code>Walk.anim</code> </strong> をダブルクリックする（Animationウィンドウが開きます）</li>



<li>プレイヤーオブジェクトを選択する</li>



<li>歩行用の画像をを Animationウィンドウに<strong>ドラッグ＆ドロップ</strong>して配置します</li>
</ol>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="622" src="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-42.png" alt="歩行アニメーションを作る" class="wp-image-699" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-42.png 1000w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-42-300x187.png 300w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-42-768x478.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<p>これでタイムラインに画像が並び、歩行アニメが完成します！🚶<br>▶ボタンを押すと再生速度を確認できます。<br>（当記事では２コマで作成していますが、もっと画像を増やしても大丈夫です🙆）</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>今回は歩行アニメーションのみ作っていますが、<strong><code>Idol.anim</code></strong><code>にも同様にアニメーションを作ることでより本格的な仕上がりにできます</code></p>
</blockquote>



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



<h2 class="wp-block-heading"><span id="toc7">⑤アニメーション切り替え設定</span></h2>



<p>次に、<br><strong>「止まっている時はidol、動いたらWalk」</strong><br>という切り替えを作ります！</p>



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



<h3 class="wp-block-heading"><span id="toc8"> パラメータを作成</span></h3>



<p>アニメーションを切り替えるためのパラメータ（フラグ）を追加します。<br><strong>AnimationController</strong>を再度開き、Animatorの＋ボタンで「<strong>Bool</strong>」を追加します。<br>名前は<strong>「Walk」</strong>にします。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="202" src="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-36.png" alt="「Bool」を追加" class="wp-image-691" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-36.png 1000w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-36-300x61.png 300w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-36-768x155.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="222" src="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-37.png" alt="名前は「Walk」に変更" class="wp-image-692" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-37.png 1000w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-37-300x67.png 300w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-37-768x170.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



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



<h3 class="wp-block-heading"><span id="toc9">遷移（Transition）を設定</span></h3>



<h4 class="wp-block-heading">Idle → Walkへの切り替え</h4>



<p>Idle → Walkへアニメーションを紐づけるようにします！<br>以下を設定します。</p>



<ul class="wp-block-list">
<li>Idle を右クリック &#8211; Make Transitionを押下</li>



<li>Idle⇒Walkに矢印を紐づける</li>



<li>Idleをクリック
<ul class="wp-block-list">
<li><strong>Has Exit Time：OFF</strong>（今のアニメを最後まで再生するか設定するもの）</li>



<li><strong>Setting</strong>
<ul class="wp-block-list">
<li>Transition Duratio：0（切り替え時のなめらかさ（重なり時間））</li>
</ul>
</li>



<li><strong>Conditions</strong>
<ul class="wp-block-list">
<li><strong>Walk：true</strong>を設定</li>
</ul>
</li>
</ul>
</li>
</ul>



<p><strong>Has Exit Time</strong>：<strong>OFF</strong>にすることで、アニメーションが瞬時に切り替わるようになります。<br><strong>Walk：true</strong>になることで、<strong><span class="marker-under-red">Walkアニメーションが発動</span></strong>するようにしています。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="622" src="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-41.png" alt="Idle → Walkへの切り替え" class="wp-image-697" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-41.png 1000w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-41-300x187.png 300w, https://naiterukaiju.com/wp-content/uploads/2026/02/↑作成したUIをドラッグする-41-768x478.png 768w" sizes="(max-width: 1000px) 100vw, 1000px" /></figure>



<h4 class="wp-block-heading">Walk → Idleへの切り替え</h4>



<p>Walk → Idleも同様に設定をします。</p>



<ul class="wp-block-list">
<li>Walkを右クリック  &#8211; Make Transitionを押下</li>



<li>Walk⇒Idleに矢印を紐づける</li>



<li>Walkをクリック
<ul class="wp-block-list">
<li><strong>Has Exit Time：OFF</strong>（今のアニメを最後まで再生するか設定するもの）</li>



<li>Setting
<ul class="wp-block-list">
<li>Transition Duratio：0（切り替え時のなめらかさ（重なり時間））</li>
</ul>
</li>



<li><strong>Conditions</strong>
<ul class="wp-block-list">
<li><strong>Walk：<strong>false</strong></strong>を設定</li>
</ul>
</li>
</ul>
</li>
</ul>



<p><br><strong>Walk：false</strong>になることで、Idle状態に切り替わり、<span class="marker-under-red"><strong>Walkアニメーションを停止</strong></span>するようにしています。</p>



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



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



<h2 class="wp-block-heading"><span id="toc10">⑥切り替える処理をつくる</span></h2>



<p>最後に、スクリプトにアニメーションを切り替える処理を追加します！（コピペOK）</p>



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

public class Player: MonoBehaviour
{
    private Animator _anim;

    private void Start()
    {
        _anim = GetComponent&lt;Animator>();
    }

    private void _Move()
    {
       _anim.SetBool("Walk", Mathf.Abs(_inputDirection.x) > 0.1f);
    }
}
</textarea></pre><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki dark-plus" style="background-color: #1E1E1E" tabindex="0"><code><span class="line"><span style="color: #569CD6">using</span><span style="color: #D4D4D4"> </span><span style="color: #4FC1FF">UnityEngine</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #9CDCFE">public</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">class</span><span style="color: #D4D4D4"> </span><span style="color: #4EC9B0">Player</span><span style="color: #D4D4D4">: </span><span style="color: #4EC9B0">MonoBehaviour</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">Animator</span><span style="color: #D4D4D4"> </span><span style="color: #9CDCFE">_anim</span><span style="color: #D4D4D4">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #569CD6">private</span><span style="color: #D4D4D4"> </span><span style="color: #569CD6">void</span><span style="color: #D4D4D4"> </span><span style="color: #DCDCAA">Start</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">        </span><span style="color: #9CDCFE">_anim</span><span style="color: #D4D4D4"> = </span><span style="color: #DCDCAA">GetComponent</span><span style="color: #D4D4D4">&lt;</span><span style="color: #4EC9B0">Animator</span><span style="color: #D4D4D4">&gt;();</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">_Move</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">    {</span></span>
<span class="line"><span style="color: #D4D4D4">       </span><span style="color: #9CDCFE">_anim</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">SetBool</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Walk&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">Mathf</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">Abs</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_inputDirection</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4">) &gt; 0.1</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>
<span class="line"></span></code></pre></div>



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



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



<p>➡️「Animatorコンポーネントを入れておくための箱」を用意しています。</p>



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



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



<ul class="wp-block-list">
<li>プレイヤー自身についている <strong>Animator</strong> を取得</li>



<li><code>_anim</code> 変数に保存する</li>
</ul>



<p>このあと_anim.SetBool(&#8230;)</p>



<p>のように Animator を操作したいからです。</p>



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



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#1E1E1E"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" style="color:#D4D4D4;display:none" aria-label="Copy" class="code-block-pro-copy-button"><pre class="code-block-pro-copy-button-pre" aria-hidden="true"><textarea class="code-block-pro-copy-button-textarea" tabindex="-1" aria-hidden="true" readonly>private void _Move()
{
    _anim.SetBool("Walk", Mathf.Abs(_inputDirection.x) > 0.1f);
}
</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">_Move</span><span style="color: #D4D4D4">()</span></span>
<span class="line"><span style="color: #D4D4D4">{</span></span>
<span class="line"><span style="color: #D4D4D4">    </span><span style="color: #9CDCFE">_anim</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">SetBool</span><span style="color: #D4D4D4">(</span><span style="color: #CE9178">&quot;Walk&quot;</span><span style="color: #D4D4D4">, </span><span style="color: #9CDCFE">Mathf</span><span style="color: #D4D4D4">.</span><span style="color: #DCDCAA">Abs</span><span style="color: #D4D4D4">(</span><span style="color: #9CDCFE">_inputDirection</span><span style="color: #D4D4D4">.</span><span style="color: #9CDCFE">x</span><span style="color: #D4D4D4">) &gt; 0.1</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></code></pre></div>



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



<p><strong>_anim.SetBool(&#8220;Walk&#8221;, true or false);</strong></p>



<p>これは、</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Animatorにある「Walk」というBoolパラメータの値を<br>true / false に変更する</p>
</blockquote>



<p>ということをしています。</p>



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



<h3 class="wp-block-heading"><span id="toc12">Animator側ではこうなっています</span></h3>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>Walkの値</th><th>再生されるアニメ</th></tr></thead><tbody><tr><td>false</td><td>Idle</td></tr><tr><td>true</td><td>Walk</td></tr></tbody></table></figure>



<p>つまりこの1行で、</p>



<ul class="wp-block-list">
<li>Walk = true → 歩行アニメ</li>



<li>Walk = false → 待機アニメ</li>
</ul>



<p>が切り替わるようになっています！</p>



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



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



<p>Mathf.Abs()は、<strong>絶対値</strong> を取る関数です。<br>ここではプレイヤーが移動しているか？を判定しています。<br>プレイヤーを動かしていないのに移動中と誤判定されることがあるので、&gt; 0.1としています。</p>



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



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



<p>歩いているとき⇒歩行アニメーション、<br>止まっているとき⇒歩行アニメーションを停止<br>という感じで切り替えるようになりました🚶</p>



<p></p>



<p></p>



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



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



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



<p>今回の記事をまとめると、</p>



<ol class="wp-block-list">
<li><strong>Animation Clip でアニメーション実体ファイルを用意</strong></li>



<li><strong>Animator Controllerでアニメーションを切り替える</strong></li>



<li><strong>画像をドラッグしてアニメーションを作る</strong></li>



<li><strong>切り替え用のパラメータを用意</strong></li>



<li><strong>スクリプト側で切り替え処理を実装</strong></li>
</ol>



<p>上記の手順で解説させていただきました。</p>



<p>今回のやり方を学べば他にも「ジャンプアニメーション」「パンチアニメーション」なども同じように実装することが出来ます！<br>この記事が少しでもゲーム制作のお役に立てたらうれしいです🦖<br><br>他にも、<br><strong>プレイヤーをジャンプさせるようにする<strong>実装方法</strong></strong>はこちら⬇️</p>



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

<a href="https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91%e3%82%b8%e3%83%a3%e3%83%b3%e3%83%97%e5%87%a6%e7%90%86%e3%82%92%e5%ae%9f%e8%a3%85%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95/" title="【Unity2D】プレイヤーをジャンプさせる方法｜（コード全文・解説付き）" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2026/03/↑作成したUIをドラッグする-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2026/03/↑作成したUIをドラッグする-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2026/03/↑作成したUIをドラッグする-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2026/03/↑作成したUIをドラッグする-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity2D】プレイヤーをジャンプさせる方法｜（コード全文・解説付き）</div><div class="blogcard-snippet internal-blogcard-snippet">Unity2Dでプレイヤーをジャンプさせたいけど、ジャンプのさせ方が分からないジャンプが高くなりすぎる 連続ジャンプしてしまう 地面判定がうまくいかないといったことはありませんか？この記事では、ジャンプさせる実装法(解説付き)、二重ジャンプ...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.03.01</div></div></div></div></a>
</div>



<p><strong>プレイヤーの歩行に合わせてカメラを追従させるようにする実装方法</strong>はこちら⬇️</p>



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

<a href="https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91%e3%83%97%e3%83%ac%e3%82%a4%e3%83%a4%e3%83%bc%e3%82%92%e8%bf%bd%e5%be%93%e3%81%95%e3%81%9b%e3%82%8b%e3%82%ab%e3%83%a1%e3%83%a9%e3%81%ae%e5%ae%9f%e8%a3%85%e6%96%b9%e6%b3%95/" title="【Unity2D】プレイヤーを追従させるカメラを作るには？｜実装方法（コード全文・解説付き）" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-14-233140-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-14-233140-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-14-233140-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-14-233140-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity2D】プレイヤーを追従させるカメラを作るには？｜実装方法（コード全文・解説付き）</div><div class="blogcard-snippet internal-blogcard-snippet">Unityで2Dアクションゲームを作っていると、「プレイヤーの歩行に合わせてカメラも追従させたい」「プレイヤーを歩かせてもカメラが追従しない」「横だけ追従したい」といったことはありませんか？この記事では、プレイヤーにカメラを追従させる基本実...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.03.14</div></div></div></div></a>
</div>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e3%80%91%e6%ad%a9%e8%a1%8c%e6%99%82%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e4%bd%9c%e3%82%8a%e6%96%b9%ef%bc%882d%ef%bc%89%ef%bd%9canim/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://naiterukaiju.com/wp-content/uploads/2026/02/無題のビデオ-‐-Clipchampで作成-14.mp4" length="943302" type="video/mp4" />

			</item>
		<item>
		<title>【Unity2D】プレイヤーの周りだけ常時光を照らす仕組みを作ろう（導入〜実装まで）</title>
		<link>https://naiterukaiju.com/%e3%80%90unity2d%e5%85%a5%e9%96%80%e3%80%91%e3%83%97%e3%83%ac%e3%82%a4%e3%83%a4%e3%83%bc%e3%81%ae%e5%91%a8%e3%82%8a%e3%81%a0%e3%81%91%e5%b8%b8%e6%99%82%e5%85%89%e3%82%92%e7%85%a7%e3%82%89%e3%81%99/</link>
					<comments>https://naiterukaiju.com/%e3%80%90unity2d%e5%85%a5%e9%96%80%e3%80%91%e3%83%97%e3%83%ac%e3%82%a4%e3%83%a4%e3%83%bc%e3%81%ae%e5%91%a8%e3%82%8a%e3%81%a0%e3%81%91%e5%b8%b8%e6%99%82%e5%85%89%e3%82%92%e7%85%a7%e3%82%89%e3%81%99/#respond</comments>
		
		<dc:creator><![CDATA[怪獣]]></dc:creator>
		<pubDate>Sun, 28 Dec 2025 14:35:31 +0000</pubDate>
				<category><![CDATA[Unity2D実装解説（テクニック）]]></category>
		<category><![CDATA[2D]]></category>
		<category><![CDATA[2Dゲーム]]></category>
		<category><![CDATA[Light]]></category>
		<category><![CDATA[Unity]]></category>
		<category><![CDATA[Unity初心者]]></category>
		<category><![CDATA[URP]]></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=462</guid>

					<description><![CDATA[今回は、URP（Universal Render Pipeline）の2Dライトを使って、背景全体を暗くしつつ、プレイヤーの周りだけを明るく照らす方法を解説します。導入～実装までそこまで難しくはないのですが、導入方法や光 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p>こんにちは！夜の街2Dアクションゲームを制作中の怪獣です🦖</p>
</div></div>



<p>今回は、<strong>URP（Universal Render Pipeline）の2Dライト</strong>を使って、<strong>背景全体を暗くしつつ、プレイヤーの周りだけを明るく照らす</strong>方法を解説します。<br>導入～実装までそこまで難しくはないのですが、導入方法や光を照らすまでの前提など個人的に色々ハマったので、その点も合わせて最後に紹介しようと思います。</p>



<p>実際に実装出来るようになると夜のステージやダンジョン探索っぽい雰囲気が一気に出るので、演出としてかなりおすすめです！</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-12" checked><label class="toc-title" for="toc-checkbox-12">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">この記事でできるようになること</a></li><li><a href="#toc2" tabindex="0">前提（確認ポイント）</a></li><li><a href="#toc3" tabindex="0">①URPを導入する</a><ol><li><a href="#toc4" tabindex="0">URPとは？</a></li><li><a href="#toc5" tabindex="0">Built-in Render Pipeline（Unity初期状態）について</a></li><li><a href="#toc6" tabindex="0">URP（Universal Render Pipeline）について</a></li><li><a href="#toc7" tabindex="0">実際にURPをインストールする</a></li></ol></li><li><a href="#toc8" tabindex="0">②URP 2D Renderer を作成する</a></li><li><a href="#toc9" tabindex="0">③Project Settings に URP を適用する（Graphics / Quality）</a><ol><li><a href="#toc10" tabindex="0">Graphics に適用</a></li><li><a href="#toc11" tabindex="0">Quality に適用</a></li></ol></li><li><a href="#toc12" tabindex="0">④背景画像を用意する</a><ol><li><a href="#toc13" tabindex="0">仮背景オブジェクトの作成</a></li><li><a href="#toc14" tabindex="0">Material の設定</a></li><li><a href="#toc15" tabindex="0">仮背景のおすすめ設定</a></li></ol></li><li><a href="#toc16" tabindex="0">⑤全体の暗さ設定をする</a><ol><li><a href="#toc17" tabindex="0">全体を暗くする（Global Light 2D）</a></li></ol></li><li><a href="#toc18" tabindex="0">⑥プレイヤー周りだけ照らす</a></li><li><a href="#toc19" tabindex="0">⑦動作確認</a></li><li><a href="#toc20" tabindex="0">個人的にハマった点</a><ol><li><a href="#toc21" tabindex="0">Sprite の Material が Sprites-Default のまま</a></li><li><a href="#toc22" tabindex="0">Sprite-Lit-Default にしたら真っ暗になった</a></li></ol></li><li><a href="#toc23" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

<h2 class="wp-block-heading"><span id="toc1">この記事でできるようになること</span></h2>



<ul class="wp-block-list">
<li>URP（Universal Render Pipeline）を導入し、<strong>背景全体を暗く</strong>調整することができる</li>



<li>プレイヤーの<strong>周りだけ常時照らす</strong>仕組みを作ることができる</li>
</ul>



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



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



<h2 class="wp-block-heading"><span id="toc2">前提（確認ポイント）</span></h2>



<ul class="wp-block-list">
<li>Unity 2021.3 LTS / 2022.3 LTS だと安定（他でもOK）</li>



<li>2Dプロジェクトでも導入可能</li>



<li>この記事は <strong>URP 2Dライト（Light 2D）</strong> を使います</li>
</ul>



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



<h2 class="wp-block-heading"><span id="toc3">①URPを導入する</span></h2>



<p>まず初めにURP（Universal Render Pipeline）をインストールする必要があります。<br></p>



<h3 class="wp-block-heading"><span id="toc4">URPとは？</span></h3>



<p>URP（Universal Render Pipeline）とは、<span class="marker-under-red">Unityで「画面をどう描画するか」を決める仕組み</span>のようなものです。<br>Unityを新規作成した直後は、<strong>Built-in Render Pipeline（旧方式）</strong> が使われています。<br>Built-in（初期状態）と URP の決定的な違いは以下です。</p>



<h3 class="wp-block-heading"><span id="toc5">Built-in Render Pipeline（Unity初期状態）について</span></h3>



<ul class="wp-block-list">
<li>昔からある方式</li>



<li>「3D向けの光」が前提（Built-in には <strong>2D専用ライト</strong> が存在しない）</li>



<li>2Dは <strong>Spriteを貼っているだけ</strong> という扱い</li>
</ul>



<p>つまり、</p>



<ul class="wp-block-list">
<li>キャラや背景は<br>「ただの画像」</li>



<li>光は<br>「3D空間用のもの」</li>
</ul>



<p>なので、</p>



<ul class="wp-block-list">
<li>2D用の Global Light</li>



<li>2D用の Point / Spot Light</li>
</ul>



<p>という概念自体が <strong>存在</strong>しないため、<strong>2D専用ライト</strong>が用意されていません。</p>



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



<h3 class="wp-block-heading"><span id="toc6">URP（Universal Render Pipeline）について</span></h3>



<p>URPでは</p>



<ul class="wp-block-list">
<li><strong>2D Renderer</strong> という専用描画ルートがある</li>



<li>Spriteを<br>「光を受ける物体」として扱える。</li>



<li>2D用のライト計算が最初から組み込まれている</li>
</ul>



<p>つまり、</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>URPは「2Dも3Dも、ちゃんと光のある世界として扱う」仕組み</strong></p>
</blockquote>



<p>です。<br><br>「URPを導入すると何が増えるのか？」を具体的に説明すると、<br>Unity内部で次のものが有効になります。</p>



<h4 class="wp-block-heading"> Light2D という新しいコンポーネント</h4>



<p>Built-in（Unity初期状態）：</p>



<ul class="wp-block-list">
<li><code>Light</code>（3D用）がデフォルトで用意されている</li>
</ul>



<p>URP 2D：</p>



<ul class="wp-block-list">
<li><code>Light2D</code>
<ul class="wp-block-list">
<li>Global Light 2D　追加</li>



<li>Point Light 2D　追加</li>



<li>Spot Light 2D　追加</li>
</ul>
</li>
</ul>



<p>➡️ <strong><span class="marker-under-red">2D専用のリアルな光と影を追加するための専用コンポーネント</span></strong>が使えるようになります</p>



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



<h4 class="wp-block-heading">Sprite が「光を受けるかどうか」を選べるようになる</h4>



<p>URPでは Sprite に対して：</p>



<ul class="wp-block-list">
<li>光を無視する（Unlit）</li>



<li>光を受ける（Lit）</li>
</ul>



<p>を <strong>Material で明確に分けます</strong>。</p>



<h5 class="wp-block-heading">例</h5>



<ul class="wp-block-list">
<li><code>Sprites-Default</code><br>→ 光を無視（常に同じ色）</li>



<li><code>Sprite-Lit-Default</code><br>→ Light2D の影響を受ける</li>
</ul>



<h4 class="wp-block-heading">「光が0なら黒になる」という、当たり前の世界になる</h4>



<p>Built-inでは👇</p>



<ul class="wp-block-list">
<li>光がなくてもSpriteは見える</li>
</ul>



<p>URP 2Dでは👇</p>



<ul class="wp-block-list">
<li><strong>光がなければ見えない</strong></li>
</ul>



<p>これは、</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>現実世界と同じルールを2Dにも持ち込んだ</strong></p>
</blockquote>



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



<h3 class="wp-block-heading"><span id="toc7">実際にURPをインストールする</span></h3>



<p>前置きが長くなりましたが、実際にURPをインストールしていきましょう！</p>



<ul class="wp-block-list">
<li><strong>Window → Package Manager</strong></li>



<li>左上のプルダウンを <strong>Unity Registry</strong> に切り替える</li>



<li><strong>Universal RP</strong> を探して <strong>Install</strong>をします</li>
</ul>



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



<p><br>「Install」⇒「Remove」に切り替わったらインストール完了です！</p>



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



<h2 class="wp-block-heading"><span id="toc8">②URP 2D Renderer を作成する</span></h2>



<p>次に、<strong>「URP Asset (with 2D Renderer)」</strong>を作っていきます。<br><br>これは、<strong>Unityで「2Dライトを使うために必ず必要な設定」</strong> です。<br>Unityの初期状態では、2Dゲームであっても<br>描画の仕組みは <strong>3D向け（Universal Renderer）</strong> のままになっています。<br>そのため、<strong>2Dゲームで光の演出をしたい場合は、</strong>必ず “2D Renderer” を使うURP Assetを作成する必要があります。<br>手順は以下の通りです。</p>



<ol class="wp-block-list">
<li><strong>Assets → Create → Rendering</strong></li>



<li><strong>URP Asset (with 2D Renderer)</strong> を選択する</li>
</ol>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="523" src="https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-4-1024x523.png" alt="URP Asset (with 2D Renderer) 選択" class="wp-image-469" srcset="https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-4-1024x523.png 1024w, https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-4-300x153.png 300w, https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-4-768x392.png 768w, https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-4.png 1218w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="523" src="https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-8-1024x523.png" alt="URP Asset (with 2D Renderer) 設定後" class="wp-image-473" srcset="https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-8-1024x523.png 1024w, https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-8-300x153.png 300w, https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-8-768x392.png 768w, https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-8.png 1218w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>すると、2つ自動で生成されます。</p>



<p>① Pipeline Asset（URPの本体）</p>



<p>1つ目は <strong>Pipeline Asset</strong> です。</p>



<p>これは、<strong><span class="marker-under-red">プロジェクト全体の「描画ルール」をまとめた本体ファイル</span></strong>になります。</p>



<p>具体的には、</p>



<ul class="wp-block-list">
<li>URP を使うかどうか</li>



<li>どの Renderer（2D / 3D）を使うか</li>



<li>ライトや描画の基本方針</li>
</ul>



<p>といった、<strong><span class="marker-under-red">プロジェクト全体に影響する設定</span></strong>を管理しています。<br>この Pipeline Asset を<br><strong>Project Settings → Graphics / Quality</strong> に設定することで、<br>「このプロジェクトは URP（2D Renderer）で描画する」という宣言になります。</p>



<p>② Renderer（2D Renderer 用の設定アセット）</p>



<p>もう1つ作られるのが、<br><strong>2D Renderer 用の Renderer アセット</strong> です。</p>



<p>これは Pipeline Asset とは別物で、<strong><span class="marker-under-red">2D専用の描画処理・ライト計算を担当する設定ファイル</span></strong>になります。</p>



<p>この Renderer では、</p>



<ul class="wp-block-list">
<li>Global / Spot / Point Light 2D の計算方法</li>



<li>2Dライトのブレンド設定</li>



<li>影や減衰の処理</li>
</ul>



<p>といった、<strong>「2D描画の中身」</strong> を管理しています。</p>



<p>Pipeline Asset の中から<br>「この Renderer を使う」と指定されることで、<br>初めて <strong>URP 2Dライトが有効</strong> になります。<br></p>



<p>名前を以下等に変更します：</p>



<ul class="wp-block-list">
<li><code>URP_2D.asset</code>（Pipeline Asset：本体）</li>



<li><code>URP_2D_Renderer.asset</code>（Renderer 2D Data：2Dレンダラー）</li>
</ul>



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



<p>これにより、</p>



<ul class="wp-block-list">
<li>2Dライトが使えるようになる</li>



<li>スプライトが光の影響を受けるようになる</li>



<li>夜の表現や雰囲気作りが簡単にできる</li>
</ul>



<p>といった、<strong>2Dゲーム向けの描画環境</strong> が整います。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>⚠️「with Universal Renderer」を選ぶと3D向けになり、2D Light が正しく働かないことがあるので注意！</p>
</blockquote>



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



<h2 class="wp-block-heading"><span id="toc9">③Project Settings に URP を適用する（Graphics / Quality）</span></h2>



<p>作っただけでは反映されないので、<strong>適用が必要</strong>です。<br>以下の手順で行っていきます。</p>



<h3 class="wp-block-heading"><span id="toc10">Graphics に適用</span></h3>



<ol class="wp-block-list">
<li><strong>Edit → Project Settings → Graphics</strong></li>



<li><strong>Scriptable Render Pipeline Settings</strong> に<br><code>URP_2D.asset</code> （Pipeline Asset本体）をドラッグ＆ドロップする<br><br>以下のメッセージが表示される場合は「Continue」を選択します。</li>
</ol>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="523" src="https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-9-1024x523.png" alt="continueメッセージ" class="wp-image-475" style="aspect-ratio:1.958009866534093;width:564px;height:auto" srcset="https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-9-1024x523.png 1024w, https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-9-300x153.png 300w, https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-9-768x392.png 768w, https://naiterukaiju.com/wp-content/uploads/2025/12/↑作成したUIをドラッグする-9.png 1218w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading"><span id="toc11">Quality に適用</span></h3>



<ol class="wp-block-list">
<li><strong>Edit → Project Settings → Quality</strong></li>



<li>上にある <strong>Quality Level（Very Low / Low / Medium / High / Very High / Ultra など）</strong> を1つずつクリックして3を行う</li>



<li>それぞれの <strong>Render Pipeline Asset</strong> に 生成した<code><strong>URP_2D.asset</strong></code> （Pipeline Asset：本体）を1つずつ設定する</li>
</ol>



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



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>✅ ここを揃えないと「環境によってライトが効いたり効かなかったり」します！</p>
</blockquote>



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



<h2 class="wp-block-heading"><span id="toc12">④背景画像を用意する</span></h2>



<p>2D ライトは <strong>描画されているものにしか影響しません</strong>。<br>そのため、ここでは「暗さの基準になる仮背景」を用意します。<br>（※既に背景を用意してある場合は、<strong>Material の設定以降</strong>だけ確認します）</p>



<h3 class="wp-block-heading"><span id="toc13">仮背景オブジェクトの作成</span></h3>



<ol class="wp-block-list">
<li>Hierarchy → <strong>Create Empty</strong>を追加する</li>



<li>名前を <code>Background</code>等 にする</li>



<li>Add Componentで<strong>「<strong>Sprite Renderer</strong>」</strong> を追加</li>



<li>適当な四角い Sprite を設定<br>（白1pxでもOK、拡大して画面全体を覆うようにする）</li>
</ol>



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



<h3 class="wp-block-heading"><span id="toc14">Material の設定</span></h3>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="493" height="34" src="https://naiterukaiju.com/wp-content/uploads/2025/12/image.png" alt="Material の設定" class="wp-image-484" srcset="https://naiterukaiju.com/wp-content/uploads/2025/12/image.png 493w, https://naiterukaiju.com/wp-content/uploads/2025/12/image-300x21.png 300w" sizes="(max-width: 493px) 100vw, 493px" /></figure>



<p>Sprite Renderer<br> →<strong>Material：<span class="marker-under-red">Sprite-Lit-Default</span></strong>に変更する（重要）<br><br>※ Sprites-Default のままだと<br><strong>URP 2D Light が一切効</strong>かないため、変更します。</p>



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



<h3 class="wp-block-heading"><span id="toc15">仮背景のおすすめ設定</span></h3>



<ul class="wp-block-list">
<li>Color：少し暗いグレー or 紺</li>



<li>Sorting Layer：BG（なければ Default でもOK）</li>



<li>Order in Layer：-10 など</li>
</ul>



<h2 class="wp-block-heading"><span id="toc16">⑤全体の暗さ設定をする</span></h2>



<h3 class="wp-block-heading"><span id="toc17">全体を暗くする（Global Light 2D）</span></h3>



<ul class="wp-block-list">
<li>Hierarchy で<br><strong>GameObject → Light → 2D → Global Light 2D</strong>を追加します</li>
</ul>



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



<ul class="wp-block-list">
<li>Inspector で調整（例）
<ul class="wp-block-list">
<li>Color：黒ではなく<strong>濃い紺</strong>（夜っぽく）</li>



<li>Intensity：<strong>0.2〜0.4</strong> くらい</li>
</ul>
</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="501" src="https://naiterukaiju.com/wp-content/uploads/2025/12/image-1-1024x501.png" alt="Inspector で調整" class="wp-image-489" srcset="https://naiterukaiju.com/wp-content/uploads/2025/12/image-1-1024x501.png 1024w, https://naiterukaiju.com/wp-content/uploads/2025/12/image-1-300x147.png 300w, https://naiterukaiju.com/wp-content/uploads/2025/12/image-1-768x376.png 768w, https://naiterukaiju.com/wp-content/uploads/2025/12/image-1.png 1223w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>💡黒 (#000000) にすると見えなくなりすぎるので、濃い青が扱いやすいです。</p>
</blockquote>



<h2 class="wp-block-heading"><span id="toc18">⑥プレイヤー周りだけ照らす</span></h2>



<ol class="wp-block-list">
<li>Player の子オブジェクトとして<br><strong>Light → 2D → Spot Light 2D</strong>を追加します</li>
</ol>



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



<ol class="wp-block-list">
<li>調整例
<ul class="wp-block-list">
<li>Intensity：0.5〜1</li>



<li>Inner Radius：0.5〜2</li>



<li>Inner / Outer Spot Angle ：360〜360（光が円形になります）</li>



<li>Color：白〜少し黄み</li>
</ul>
</li>
</ol>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="493" height="574" src="https://naiterukaiju.com/wp-content/uploads/2025/12/image-2.png" alt="Light 2Dでの設定" class="wp-image-490" srcset="https://naiterukaiju.com/wp-content/uploads/2025/12/image-2.png 493w, https://naiterukaiju.com/wp-content/uploads/2025/12/image-2-258x300.png 258w" sizes="(max-width: 493px) 100vw, 493px" /></figure>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>💡子にしておけば、プレイヤーが動いても常に追従します（スクリプト不要）。</p>
</blockquote>



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



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



<p>➡️プレイヤーの周りだけ常時光を照らすことが出来ました！</p>



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



<h2 class="wp-block-heading"><span id="toc20">個人的にハマった点</span></h2>



<p>URPもインストール済、背景も用意した、プレイヤーの周りだけ照らす処理も作成したのに何も変化がない、、🫠<br>以下は個人的にハマった点です。<br>上手くいかない場合は以下を確認してみてください。</p>



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



<h3 class="wp-block-heading"><span id="toc21">Sprite の Material が Sprites-Default のまま</span></h3>



<p>先ほど「④背景画像を用意する」の章でも触れましたが、ライトを受けるにはSpriteを光の影響を受けるようにする必要があります。</p>



<p>背景スプライト（SpriteRenderer）の Material が</p>



<ul class="wp-block-list">
<li><strong>Sprites-Default</strong>（光を無視する）</li>



<li><strong>Sprite-Lit-Default</strong>（光の影響を受ける）</li>
</ul>



<p>で挙動が変わります。</p>



<h5 class="wp-block-heading">やること</h5>



<p>背景オブジェクトを選択 → Sprite Renderer → <strong>Material</strong> を</p>



<ul class="wp-block-list">
<li><strong>Sprite-Lit-Default（URP 2D）</strong></li>
</ul>



<p>に変更します。</p>



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



<h3 class="wp-block-heading"><span id="toc22">Sprite-Lit-Default にしたら真っ暗になった</span></h3>



<p>これはバグではなく <strong>正常挙動</strong>です。</p>



<p><strong>Sprite-Lit-Default は “光がないと黒”</strong> になります。<br>つまり：</p>



<ul class="wp-block-list">
<li>Global Light をOFFにした</li>



<li>そもそもLight 2Dが置かれていない<br>→ <strong>光源ゼロ</strong><br>→ <strong>全部真っ暗</strong></li>
</ul>



<p>という状態です。</p>



<h4 class="wp-block-heading">対処</h4>



<ul class="wp-block-list">
<li>Global Light をONにして、Intensityを弱めに</li>



<li>プレイヤーのPoint Lightの範囲を広げる</li>



<li>（必要なら）背景専用に弱いGlobal Lightを追加する</li>
</ul>



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



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



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



<p>URPの2Dライトを使うと、</p>



<ul class="wp-block-list">
<li><strong>夜の雰囲気</strong></li>



<li><strong>プレイヤー中心の視界演出</strong></li>



<li><strong>探索・緊張感</strong></li>
</ul>



<p>が一気に作れます💡</p>



<p>この記事では、<strong>URP（Universal Render Pipeline）の2Dライト</strong>を使って、<strong>背景全体を暗くしつつ、プレイヤーの周りだけを明るく照らす</strong>方法を解説しました。<br>最後まで読んでいただきありがとうございました。<br>この記事が少しでもゲーム制作に役立てたら嬉しいです🦖</p>



<p>他にも、<br><strong>「プレイヤーを追従させるカメラワークを作りたい」<br>「歩行やジャンプ時にアニメーションをつけたい」</strong><br>という実装したい人は、こちらの記事もご興味あれば覗いてみてください👾</p>



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

<a href="https://naiterukaiju.com/%e3%80%90unity2d%e3%80%91%e3%83%97%e3%83%ac%e3%82%a4%e3%83%a4%e3%83%bc%e3%82%92%e8%bf%bd%e5%be%93%e3%81%95%e3%81%9b%e3%82%8b%e3%82%ab%e3%83%a1%e3%83%a9%e3%81%ae%e5%ae%9f%e8%a3%85%e6%96%b9%e6%b3%95/" title="【Unity2D】プレイヤーを追従させるカメラを作るには？｜実装方法（コード全文・解説付き）" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-14-233140-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-14-233140-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-14-233140-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2026/03/スクリーンショット-2026-03-14-233140-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">【Unity2D】プレイヤーを追従させるカメラを作るには？｜実装方法（コード全文・解説付き）</div><div class="blogcard-snippet internal-blogcard-snippet">Unityで2Dアクションゲームを作っていると、「プレイヤーの歩行に合わせてカメラも追従させたい」「プレイヤーを歩かせてもカメラが追従しない」「横だけ追従したい」といったことはありませんか？この記事では、プレイヤーにカメラを追従させる基本実...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.03.14</div></div></div></div></a>
</div>



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

<a href="https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e3%80%91%e6%ad%a9%e8%a1%8c%e6%99%82%e3%82%a2%e3%83%8b%e3%83%a1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e4%bd%9c%e3%82%8a%e6%96%b9%ef%bc%882d%ef%bc%89%ef%bd%9canim/" title="【Unity2D】歩行アニメーションの作り方｜Animatorで「待機⇔歩く」を切り替えよう" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://naiterukaiju.com/wp-content/uploads/2026/02/Unityで2Dアクションゲームを作ろう！のコピー-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://naiterukaiju.com/wp-content/uploads/2026/02/Unityで2Dアクションゲームを作ろう！のコピー-160x90.png 160w, https://naiterukaiju.com/wp-content/uploads/2026/02/Unityで2Dアクションゲームを作ろう！のコピー-120x68.png 120w, https://naiterukaiju.com/wp-content/uploads/2026/02/Unityで2Dアクションゲームを作ろう！のコピー-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】歩行アニメーションの作り方｜Animatorで「待機⇔歩く」を切り替えよう</div><div class="blogcard-snippet internal-blogcard-snippet">こんにちは！夜の街2Dアクションゲームを制作中の怪獣です🦖今回は 2Dキャラの「歩行」時のアニメーションを を Unity で作る方法を解説します！手順としては、待機、歩行用の画像を用意するAnimation Clip（歩くアニメ）を作成す...</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://naiterukaiju.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">naiterukaiju.com</div></div><div class="blogcard-date internal-blogcard-date"><div class="blogcard-post-date internal-blogcard-post-date">2026.02.08</div></div></div></div></a>
</div>



<p><br></p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://naiterukaiju.com/%e3%80%90unity2d%e5%85%a5%e9%96%80%e3%80%91%e3%83%97%e3%83%ac%e3%82%a4%e3%83%a4%e3%83%bc%e3%81%ae%e5%91%a8%e3%82%8a%e3%81%a0%e3%81%91%e5%b8%b8%e6%99%82%e5%85%89%e3%82%92%e7%85%a7%e3%82%89%e3%81%99/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://naiterukaiju.com/wp-content/uploads/2025/12/無題のビデオ-‐-Clipchampで作成-11-1.mp4" length="1200517" type="video/mp4" />

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