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

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

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

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

Q&A

解決済

1回答

1308閲覧

Unityカスタムシェーダーを動かすには

tomo20

総合スコア1

Unity

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

0グッド

0クリップ

投稿2021/07/17 03:38

はじめまして、Unity初心者です。
Unityでシェーダーを動かしたいのですがうまく動作せず困っています。

本当に初心者かつ独学で試しているため、至らない点多々あると思いますが
アドバイスいただけると幸いです…。

https://baba-s.hatenablog.com/entry/2018/10/04/130000
↑このサイトを参考にしてテストしていますが、マテリアルは表示されるものの再生しても動きません。

![イメージ説明](7fc156ea660980711472fac29fe5f257.png)

該当のソースコード

// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,)' with 'UnityObjectToClipPos()'

Shader "Custom/Echolocation" {
Properties {
_Color ("Color", Color) = (1, 1, 1, 1)
_Center ("CenterX", vector) = (0, 0, 0)
_Radius ("Radius", float) = 0
}
SubShader {
Pass {
Tags { "RenderType"="Opaque" }

CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" float4 _Color; float3 _Center; float _Radius; struct v2f { float4 pos : SV_POSITION; float3 worldPos : TEXCOORD1; }; v2f vert(appdata_base v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; return o; } fixed4 frag(v2f i) : COLOR { float dist = distance(_Center, i.worldPos); float val = 1 - step(dist, _Radius - 0.1) * 0.5; val = step(_Radius - 1.5, dist) * step(dist, _Radius) * val; return fixed4(val * _Color.r, val * _Color.g,val * _Color.b, 1.0); } ENDCG } } FallBack "Diffuse"

}

### 試したこと 手順 1新規シェーダーにサイトのコードをコピペ 2新規マテリアルにカスタムシェーダーを適用 3オブジェクトに適用 問題に対し試したこと 1ウィンドウ→PackageManager→ShaderGrapfをインポート →効果なし 2ウィンドウ→PackageManager→Universal RPをインポート→効果なし 3Unityバージョンを2020.3.8f1に変更し手順を繰り返し試す→効果なし ### 補足情報(FW/ツールのバージョンなど) unityバージョン2019.3.6fi MacOS BigSur バージョン11.2.3

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

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

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

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

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

guest

回答1

0

ベストアンサー

このシェーダー自体にはアニメーション機能はないように見えますね。
【Unity】エコロケーションシェーダを導入する - コガネブログでは

マテリアルのパラメータを自由に変更します

とだけ書かれていますが、アニメーションさせたければ別途スクリプトだとかで好きなように操作してくれ...ということかと思います。

一例としては下記のようなスクリプトを作り...

lang

1using UnityEngine; 2 3public class EcholocationController : MonoBehaviour 4{ 5 private static readonly int Center = Shader.PropertyToID("_Center"); 6 private static readonly int Radius = Shader.PropertyToID("_Radius"); 7 8 // ここにインスペクター上でEcholocationマテリアルをセットしておく 9 [SerializeField] private Material material; 10 11 // 半径が大きくなるスピード 12 [SerializeField][Min(0.0f)] private float speed = 5.0f; 13 14 // 現在の半径 15 private float radius; 16 17 // 半径の初期値は無限大としておく 18 private void OnEnable() 19 { 20 this.radius = Mathf.Infinity; 21 } 22 23 // 毎フレーム半径のセットおよび拡張を行う 24 private void Update() 25 { 26 this.material.SetFloat(Radius, this.radius); 27 this.radius += this.speed * Time.deltaTime; 28 } 29 30 // 他のスクリプトからEmitCallを実行することで 31 // 中心点を設定し、半径を0にリセットする 32 public void EmitCall(Vector3 position) 33 { 34 this.radius = 0.0f; 35 this.material.SetVector(Center, position); 36 } 37}

さらに別のスクリプトで、たとえばクリックした地点でEmitCallを行うと...

lang

1using UnityEngine; 2 3[RequireComponent(typeof(EcholocationController))] 4public class EcholocationTest : MonoBehaviour 5{ 6 private EcholocationController controller; 7 private Camera mainCamera; 8 9 private void Start() 10 { 11 this.mainCamera = Camera.main; 12 this.controller = this.GetComponent<EcholocationController>(); 13 } 14 15 private void Update() 16 { 17 if (Input.GetMouseButtonDown(0) && Physics.Raycast(this.mainCamera.ScreenPointToRay(Input.mousePosition), out var hitInfo)) 18 { 19 this.controller.EmitCall(hitInfo.point); 20 } 21 } 22}

下図のようになるかと思います。

図

投稿2021/07/17 11:04

Bongo

総合スコア10807

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

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

tomo20

2021/07/17 12:00

できました!!(:_;) 丁寧に説明していただき、しかも実際にやってみてくださって すごくわかりやすかったです。 拙い質問でしたのに、回答ありがとうございます…! 本当にありがとうございます!!!(:_;) 助かりました…!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問