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

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

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

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Q&A

解決済

1回答

1700閲覧

シェーダーを使って武器の残像をエフェクトを演出したい。どうすればいいのか?

退会済みユーザー

退会済みユーザー

総合スコア0

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

0グッド

0クリップ

投稿2020/03/27 07:11

編集2020/03/27 08:13

提示画像のような構造になっています。素材は3d game kit lite から持ってきました。やりたいことは武器と一緒に出る残像のようなエフェクトを演出したいのですがどうやらシェーダーでその動きをプログラムしてるらしいのですが実験コードを以下の提示コードのように書いてもエフェクトが動きませんこれは何をすればよいのでしょうか?
スクリプトで何か不足してると思うのですが調べても出てこなくまた3d game kit lite を解析しようと思いました規模が多く初学者にはどうしても難しいのでわかりません。

参考動画: https://www.youtube.com/watch?v=l-NcDKoHWEw
0:38秒の場所のようなエフェクト

イメージ説明
イメージ説明

検証用ソースファイル

using System.Collections; using System.Collections.Generic; using UnityEngine; public class EffectTest : MonoBehaviour { private Animation anim; // Start is called before the first frame update void Start() { anim = GetComponent<Animation>(); } // Update is called once per frame void Update() { anim.Play(); gameObject.SetActive(true); } }

シェーダープログラム

Shader "Unlit/Swish" { Properties { _MainTex ("Texture", 2D) = "white" {} [HDR]_Color ("Color", Color) = (1,1,1,1) } SubShader { Tags {"Queue" = "Transparent" "RenderType"="Transparent" } ZWrite Off Cull Off Blend SrcAlpha OneMinusSrcAlpha Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag // make fog work #pragma multi_compile_fog #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float3 normal : NORMAL; float2 uv : TEXCOORD0; }; struct v2f { float2 uv : TEXCOORD0; float4 uv2 : TEXCOORD2; UNITY_FOG_COORDS(1) float4 vertex : SV_POSITION; }; sampler2D _MainTex; float4 _MainTex_ST; float4 _Color; v2f vert (appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.uv = TRANSFORM_TEX(v.uv, _MainTex); o.uv2 = float4(v.uv, 0 ,0); float4 vertData = tex2Dlod(_MainTex, float4(o.uv, 0, 0)).rrrr; v.vertex.xyz -= v.normal * 0.02; v.vertex.xyz += vertData * v.normal * 0.1; o.vertex = UnityObjectToClipPos(float4(v.vertex.xyz, 1)); UNITY_TRANSFER_FOG(o,o.vertex); return o; } fixed4 frag (v2f i) : SV_Target { // sample the texture fixed4 tex = tex2D(_MainTex, i.uv2); fixed4 col = tex2D(_MainTex, i.uv).r * _Color * tex.g * tex.b; // apply fog UNITY_APPLY_FOG(i.fogCoord, col); return col; } ENDCG } } }

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

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

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

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

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

Hawn

2020/03/27 11:31 編集

>どうやらシェーダーでその動きをプログラムしてるらしいのですが 3d game kit liteのその斬撃エフェクトはStaffSwish01.animで動かしています。 残念ながらシェーダープログラムで動かしていません。 StaffSwish01のデータをそのまま使っているならこのコードでもゲーム再生させるだけで延々と斬撃エフェクトが出ます。 何を変更しているのか詳細が不明な為、StaffSwish01のアニメーションタイムラインの画像を追加して頂きたいです。
Hawn

2020/03/27 11:12 編集

元々はStaffSwish01のアニメーションでそのマテリアルのoffsetを変更しているのですが本当に理解されているのでしょうか?
Tto777

2020/03/27 08:43 編集

解決したのであればこちらにその解決内容の詳細を記載して自己解決とするようお願いします。
guest

回答1

0

ベストアンサー

https://teratail.com/questions/240179
の自己解決よりRenadere.material.Texture.SetTextureOffset();の関数を使うことによってテクスチャーの座標をいじることによって解決しました。

投稿2020/03/27 10:00

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問