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

<channel>
	<title>追従 | 怪獣の2Dアクションゲーム制作開発記</title>
	<atom:link href="https://naiterukaiju.com/tag/%E8%BF%BD%E5%BE%93/feed/" rel="self" type="application/rss+xml" />
	<link>https://naiterukaiju.com</link>
	<description>👾Unityでゲームを作ったり、実装に役立ちそうな情報を記録👾</description>
	<lastBuildDate>Sun, 14 Jun 2026 05:53:46 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://naiterukaiju.com/wp-content/uploads/2026/05/cropped-kaiju-1-32x32.png</url>
	<title>追従 | 怪獣の2Dアクションゲーム制作開発記</title>
	<link>https://naiterukaiju.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【Unity2D】プレイヤーを追従させるカメラを作るには？｜実装方法（コード全文・解説付き）</title>
		<link>https://naiterukaiju.com/unity-2d-camera-follow-script/</link>
					<comments>https://naiterukaiju.com/unity-2d-camera-follow-script/#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で横スクロール型のアクションゲームを作っていると、プレイヤーにカメラが付いていかずプレイヤーがどこにいるか分からなくなりますよね🤔これは、プレイヤーにカメラを追従させる機能が実装されていないためです。カメラ追従 [&#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 class="wp-block-paragraph">こんにちは！夜の街2Dアクションゲームを制作中の怪獣です🦖</p>
</div></div>



<p class="wp-block-paragraph">Unityで横スクロール型のアクションゲームを作っていると、<br>プレイヤーにカメラが付いていかずプレイヤーがどこにいるか分からなくなりますよね🤔<br>これは、プレイヤーにカメラを追従させる機能が実装されていないためです。<br>カメラ追従は横スクロール型の2Dアクションゲームにおいて必須の処理です。</p>



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



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-9 sbs-think sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/06/kaisya_komaru_man.png" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p class="wp-block-paragraph">「プレイヤーの歩行に合わせてカメラも追従させるようにしたい」<br>「プレイヤーを歩かせてもカメラが追従しない」<br>「カメラ追従させたが画面がガタつく・・・」<br>「横だけ追従したい」</p>
</div></div>



<p class="wp-block-paragraph">といった方に向けた内容となっています！</p>



<p class="wp-block-paragraph">この記事では、<strong><span class="marker-under-red">プレイヤーにカメラを追従させる基本実装</span></strong>を、<strong>コード全文つき</strong>で、<br>一行ずつ初心者向けに解説します！<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-2" checked><label class="toc-title" for="toc-checkbox-2">目次</label>
    <div class="toc-content">
    <ol class="toc-list open"><li><a href="#toc1" tabindex="0">この記事で出来るようになること</a></li><li><a href="#toc2" tabindex="0">① カメラ追従させるコード（全文）</a><ol><li><a href="#toc3" tabindex="0">各処理の説明（初心者向け）</a></li><li><a href="#toc4" tabindex="0">変数の定義</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">カメラがガクついてみえる</a></li><li><a href="#toc11" tabindex="0">カメラが動かない</a></li></ol></li><li><a href="#toc12" tabindex="0">制作中のゲームで実装した例</a></li><li><a href="#toc13" tabindex="0">まとめ</a></li></ol>
    </div>
  </div>

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



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



<li>上下にも追従させる方法も合わせて解説あり</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 class="wp-block-paragraph">カメラの動きを管理するCameraManager.csを用意し、以下のような処理を書きます。（コピペOK！）</p>



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

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

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

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

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

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

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

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

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



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



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



<p class="wp-block-paragraph">※以下は各処理の説明です。わかっている方は②までスキップしてください！</p>



<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><strong><span class="marker-under-blue"><span class="marker-under-red">プレイヤーの移動が終わったあとにカメラを動かすので、画面がガタつきにくくなります</span></span></strong></li>
</ul>



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



<p class="wp-block-paragraph">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 class="wp-block-paragraph">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 class="wp-block-paragraph">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>



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



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



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



<figure class="wp-block-image size-full"><img fetchpriority="high" 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 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 class="wp-block-paragraph"><strong>「追従対象」</strong>にプレイヤーをドラッグします。</p>



<figure class="wp-block-image size-full"><img 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 class="wp-block-paragraph">このままだと上下移動が激しいと見切れてしまうので、<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">カメラがガクついてみえる</span></h3>



<p class="wp-block-paragraph">私が開発中にハマったポイントですが、プレイヤーの移動、カメラ追従をUpdate で全て行うと<strong><span class="marker-under-blue">実行タイミングのズレから画面が震えるような挙動になることがあり</span></strong><span class="marker-under-blue"><strong>ました。</strong></span><br>Updateメソッド内で動かすことも可能ではありますが、<br>挙動が変になるため<strong><span class="marker-under-red">移動処理はUpdate、</span><span class="marker-under-red">カメラ処理は、<code>LateUpdate</code>メソッド内で分けて動かすことが一般的です</span></strong>！</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">LateUpdateは<strong>「Updateの処理が終わった後」</strong>に実行されます。</p>



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



<p class="wp-block-paragraph">という処理の場合は<br>LateUpdateを使うことで自然な動きになります！</p>
</blockquote>



<h3 class="wp-block-heading"><span id="toc11">カメラが動かない</span></h3>



<p class="wp-block-paragraph">考えられる原因として多いのは、追従対象が設定されていないことです。<br>以下が設定されているか確認してみてください！</p>



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



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



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



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



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



<video
  src="https://naiterukaiju.com/wp-content/uploads/2026/03/ナイトウォーク-Main-Windows-Mac-Linux-Unity-2021.3.6f1-Personal-_DX11_-2026-03-08-14-22-45-Trim.mp4"
  autoplay
  loop
  muted
  playsinline
  width="640"
  height="360">
</video



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



<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-10 sbs-stn sbp-l sbis-cb cf block-box not-nested-style cocoon-block-balloon"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://naiterukaiju.com/wp-content/uploads/2026/04/9327DB85-EFD6-4A95-A63A-1FA1F0A35E85.jpg" alt="" class="speech-icon-image"/></figure><div class="speech-name"></div></div><div class="speech-balloon">
<p class="wp-block-paragraph">今回紹介したカメラ追従処理は、実際に制作中の夜の街アクションゲームでもこのように使用しています！<br>右に移動するとそれに合わせてカメラも追従するようになっており、プレイヤーにカメラがついていっているのが分かります。<br><br>当初は横方向だけ追従させていましたが、このゲームはビルからビルへ飛び移る場面が多く上下移動が激しいステージなので、高い場所へジャンプした際にプレイヤーが画面外へ見切れてしまうことがありました。<br>そのためY方向の追従も追加し、プレイヤーが常に見やすいよう調整しています。<br><br>カメラ追従は自分のゲームの仕様に合わせて調整するとよいでしょう🦖</p>
</div></div>



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



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



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



<p class="wp-block-paragraph">実装の内容をまとめると以下の通りです。</p>



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



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



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



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



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



<p class="wp-block-paragraph">他にも、<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 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/26bd1bed9aae0178a08aae993751ecbe.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【Unity2D】歩行アニメーションの作り方｜Animatorで「待機⇔歩く」を切り替えよう</div><div class="blogcard-snippet external-blogcard-snippet">こんにちは！夜の街2Dアクションゲームを制作中の怪獣です🦖今回は 2Dキャラの「歩行」時のアニメーションを を Unity で作る方法を解説します！手順としては、待機、歩行用の画像を用意するAnimation Clip（歩くアニメ）を作成す...</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://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/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">naiterukaiju.com</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】プレイヤーをジャンプさせる方法｜AddForce以外の方法も比較（コード全文・解説付き）" 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/0ccf361de07c1b7781bea14f6da536e9.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【Unity2D】プレイヤーをジャンプさせる方法｜AddForce以外の方法も比較（コード全文・解説付き）</div><div class="blogcard-snippet external-blogcard-snippet">Unity2Dでプレイヤーをジャンプさせたいけど、ジャンプのさせ方が分からないジャンプが高くなりすぎる 連続ジャンプしてしまう 地面判定がうまくいかないといったことはありませんか？この記事では、ジャンプさせる実装法(解説付き)を初心者向けに...</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://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/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">naiterukaiju.com</div></div></div></div></a>
</div>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://naiterukaiju.com/unity-2d-camera-follow-script/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" />
<enclosure url="https://naiterukaiju.com/wp-content/uploads/2026/03/ナイトウォーク-Main-Windows-Mac-Linux-Unity-2021.3.6f1-Personal-_DX11_-2026-03-08-14-22-45-Trim.mp4" length="12043311" type="video/mp4" />

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