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

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

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

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

解決済

shaderで作った円の大きさが変わってしまう

tuna_onigiri
tuna_onigiri

総合スコア11

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

1回答

0評価

0クリップ

425閲覧

投稿2022/04/06 09:33

・作っているもの
マウスの動きに合わせて視野範囲が変化するというものを作っています.
planeに,shaderで同じ大きさの固定円(A)とマウスの動きに合わせて動く円(B)を連続で配置することで,視野範囲が大きくなっているように見せようと考えています.

イメージとしては,
カーソルを右に移動させたら右側に徐々に視野が大きくなる,斜め下に移動したら右側が徐々に円に戻りながら斜め下が徐々に広がるという感じです.
イメージ説明

・できていないこと
固定円(A)と動く円(B)をshaderで作成したところ,動く円(B)がとても小さく表示されました.固定円(A)と同じように記入しましたが,どこを間違えているのかわかりません.
調べてみましたが解決できませんでした…

以下,現在の状態と参考URLです.

▼shader

Shader "Custom/patternTest" { Properties { _HolePos1("Hole vector1", Vector) = (0.5,0.5,1.0,1.0) _HolePos2("Hole vector2", Vector) = (0.5,0.5,1.0,1.0) _Color1("Colo1r", Color) = (0.0,0.0,0.0,1.0) _Color2("Color2", Color) = (0.0,0.0,0.0,1.0) _HoleSize1("Hole Size1", float) = 0.1 _HoleSize2("Hole Size2", float) = 0.1 _BlurThick1("Blur Thick1", float) = 0.01 _BlurThick2("Blur Thick2", float) = 0.01 } SubShader { Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"} ZWrite Off Blend SrcAlpha OneMinusSrcAlpha Pass{ CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" float _HoleSize1; float _HoleSize2; float _BlurThick1; float _BlurThick2; fixed4 _HolePos1; fixed4 _HolePos2; fixed4 _Color1; fixed4 _Color2; struct appdata { float4 vertex : POSITION; float3 normal : NORMAL; float4 texcoord : TEXCOORD0; }; struct v2f { float4 pos : POSITION; float2 uv : TEXCOORD0; }; v2f vert (appdata v) { v2f o; o.pos = UnityObjectToClipPos(v.vertex); o.uv = float2(v.texcoord.x, v.texcoord.y); return o; } half4 frag (v2f i) : COLOR { half4 col1 = _Color1; half4 col2 = _Color2; float2 pos1 = i.uv; float2 pos2 = i.uv; float col1_a = 0.5; float col2_a = 0.5; float dist1 = distance(pos1, float2(_HolePos1.x, _HolePos1.y)); float dist2 = distance(pos2, float2(_HolePos2.x, _HolePos2.y)); _HoleSize1 = 0.01; _HoleSize2 = 0.01; _BlurThick1 = 0.1; _BlurThick2 = 0.1; col1.a = col1_a; col2.a = col2_a; //--------------------円(A)-------------------- if(dist1 < _HoleSize1) { clip(-1.0); } else if(dist1 < _HoleSize1 + _BlurThick1) { col1.a = (dist1 - _HoleSize1) * 10.0; col1.a = pow(col1.a, 2.0); if(col1.a >= col1_a) col1.a = col1_a; } //--------------------円(B)-------------------- if(dist2 < _HoleSize2) { clip(-1.0); } else if(dist2 < _HoleSize2 + _BlurThick2) { col2.a = (dist2 - _HoleSize2) * 10.0; col2.a = pow(col2.a, 2.0); if(col2.a >= col2_a) col2.a = col2_a; } return col1; return col2; } ENDCG } } }

▼円(B)を動かすためのscript

using System.Collections; using System.Collections.Generic; using UnityEngine; public class PatternHole : MonoBehaviour { private float mouseX; private float mouseY; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { mouseX = Input.mousePosition.x; mouseY = Input.mousePosition.y; var pinPos = new Vector3(mouseX / Screen.width, mouseY / Screen.height, 0f); GetComponent<Renderer>().material.SetVector("_HolePos2", pinPos); } }

▼実行時の画面(画像の文字は説明用の後付けです)
イメージ説明

▼shader参考URL
リンク内容

初めて投稿するため,失礼な点やわかりにくい点がありましたら申し訳ございません.
解決方法のヒントなどありましたら,ご教授いただけると幸いです.
よろしくお願いいたします.

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。