質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

3248閲覧

元画像の色味のままUVスクロールを行いたい

alumiloid

総合スコア6

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2017/03/12 07:54

###シェーダによるUV操作でシューティングゲームの背景を作りたい
現在Unityで2Dシューティングゲームを開発しております。
背景のスクロールをUV操作で行おうと考えていくつかのサイトを見て、
とりあえずUV操作ができるシェーダはできたのですが、
Unity標準のライトありきでの実装だったため、元の背景と色味が若干変わってしまいます。
申し訳ないのですがシェーダに関する知識を有する方のお力をお借りしたいです。

###現在の状況
・背景QuadのMaterialにスクロールシェーダを実装
・UVスクロール操作処理自体はできている
・ライトをHierarchyViewにいれないと背景に設定した画像が暗くなってしまう。

###解決したいこと
・ライトがなくても元の画像と同じ色味の背景を出したい
・上記問題を解決した上でUVのスクロールを実装したい

###該当のソースコード

Shader "Custom/scroll" { Properties{ _Color("Color", Color) = (1,1,1,1) _MainTex("Albedo (RGB)", 2D) = "white" {} _Glossiness("Smoothness", Range(0,1)) = 0.5 _Metallic("Metallic", Range(0,1)) = 0.0 _ScrollX("ScrollX", float) = 0 _ScrollY("ScrollY", float) = 0 } SubShader{ Tags{ "RenderType" = "Transparent" } LOD 200 CGPROGRAM #pragma surface surf Standard alpha:fade #pragma target 3.0 sampler2D _MainTex; struct Input { float2 uv_MainTex; }; half _Glossiness; half _Metallic; fixed4 _Color; float _ScrollX, _ScrollY; void surf(Input IN, inout SurfaceOutputStandard o) { float2 scroll = float2(_ScrollX, _ScrollY) * _Time.y; fixed4 c = tex2D(_MainTex, IN.uv_MainTex + scroll) * _Color; o.Albedo = c.rgb; o.Metallic = _Metallic; o.Smoothness = _Glossiness; o.Alpha = c.a; } ENDCG } FallBack "Diffuse" }

###試したこと
QuadではなくSpriteで実装
→Quad同様ライトに依存してしまう

Spriteを複数枚用意してそのSpriteをスクロールさせてみる
→背景が途切れてしまう可能性が0ではないため、実装をやめた。

###補足情報(言語/FW/ツール等のバージョンなど)
Unity5.5.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

質問しておいてなんですが、自己解決致しました。
以下のコードをかけばライトがなくても
元画像のままスクロールが行えることを確認しました。

UnityShader

1Shader "Custom/scroll" { 2 Properties{ 3 _MainTex("Base (RGB)", 2D) = "white" {} 4 _ScrollX("ScrollX", float) = 0 5 _ScrollY("ScrollY", float) = 0 6 } 7 SubShader{ 8 Pass{ 9 CGPROGRAM 10 #pragma vertex vert_img 11 #pragma fragment frag 12 13 #include "UnityCG.cginc" 14 15 uniform sampler2D _MainTex; 16 float _ScrollX, _ScrollY; 17 18 float4 frag(v2f_img i): COLOR{ 19 float2 scroll = float2(_ScrollX, _ScrollY) * _Time.y; 20 return tex2D(_MainTex, i.uv + scroll); 21 } 22 ENDCG 23 } 24 } 25}

投稿2017/03/12 16:25

alumiloid

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問