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

<channel>
	<title>画像 | 怪獣の2Dアクションゲーム制作開発記</title>
	<atom:link href="https://naiterukaiju.com/tag/%E7%94%BB%E5%83%8F/feed/" rel="self" type="application/rss+xml" />
	<link>https://naiterukaiju.com</link>
	<description>Unityでゲームを作る方法を初心者目線で発信👾</description>
	<lastBuildDate>Tue, 14 Apr 2026 13:35:56 +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>画像 | 怪獣の2Dアクションゲーム制作開発記</title>
	<link>https://naiterukaiju.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【Unity入門⑮】歩行に合わせて背景をスクロールさせよう！</title>
		<link>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ae%e3%80%91%e6%ad%a9%e8%a1%8c%e3%81%ab%e5%90%88%e3%82%8f%e3%81%9b%e3%81%a6%e8%83%8c%e6%99%af%e3%82%92%e3%82%b9%e3%82%af%e3%83%ad%e3%83%bc%e3%83%ab%e3%81%95/</link>
					<comments>https://naiterukaiju.com/%e3%80%90unity%e5%85%a5%e9%96%80%e2%91%ae%e3%80%91%e6%ad%a9%e8%a1%8c%e3%81%ab%e5%90%88%e3%82%8f%e3%81%9b%e3%81%a6%e8%83%8c%e6%99%af%e3%82%92%e3%82%b9%e3%82%af%e3%83%ad%e3%83%bc%e3%83%ab%e3%81%95/#respond</comments>
		
		<dc:creator><![CDATA[怪獣]]></dc:creator>
		<pubDate>Tue, 17 Feb 2026 13:45:31 +0000</pubDate>
				<category><![CDATA[Unity2D入門（シリーズ）]]></category>
		<category><![CDATA[2Dゲーム]]></category>
		<category><![CDATA[background]]></category>
		<category><![CDATA[Unity]]></category>
		<category><![CDATA[Unity初心者]]></category>
		<category><![CDATA[アクションゲーム]]></category>
		<category><![CDATA[ゲーム制作]]></category>
		<category><![CDATA[スクロール]]></category>
		<category><![CDATA[マップ]]></category>
		<category><![CDATA[画像]]></category>
		<category><![CDATA[背景]]></category>
		<guid isPermaLink="false">https://naiterukaiju.com/?p=723</guid>

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



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



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

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



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



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




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

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



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



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



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



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



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



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





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




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



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



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



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



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



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



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



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



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



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



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



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



<li>Inspector → SpriteRenderer</li>



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



<p></p>



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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

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

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

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

    }

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

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

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

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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



<p>つまり、</p>



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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

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