回答編集履歴

2

プロパティの説明図を追加

2021/06/24 12:13

投稿

Bongo
Bongo

スコア10811

test CHANGED
@@ -202,6 +202,10 @@
202
202
 
203
203
 
204
204
 
205
+ ![図](3ffb8ef6a70757d497c9b411cd7112a6.png)
206
+
207
+
208
+
205
209
  バッチングを強制的に切るよう設定してしまいましたので、多数のスプライトを一発のドローコールで描画できる...という利点は失われるのが弱点かもしれません。
206
210
 
207
211
  とはいえ、ご質問者さんのおっしゃる「スクリプトから対象のspriteのuv値渡してもらう」みたいな方法をとるにしても、バッチングを切らせないようにするにはそれなりに工夫が必要そうな気配がします。

1

範囲リマップの動作を変更

2021/06/24 12:13

投稿

Bongo
Bongo

スコア10811

test CHANGED
@@ -14,9 +14,17 @@
14
14
 
15
15
  _MainTex ("Texture", 2D) = "white" {}
16
16
 
17
- _Height("Height", Range(0,1)) = 0.5
17
+ _Height ("Height", Range(0,1)) = 0.5
18
+
19
+
20
+
18
-
21
+ // プロパティを追加
22
+
19
-
23
+ _PivotY ("Pivot Y (Normalized)", Range(0,1)) = 0.5
24
+
25
+ _SizeY ("Sprite Height In Pixels", Int) = 128
26
+
27
+ _PixelsPerUnit ("Pixels Per Unit", Float) = 100.0
20
28
 
21
29
  }
22
30
 
@@ -94,6 +102,28 @@
94
102
 
95
103
 
96
104
 
105
+ // プロパティの値を受け取る変数を追加
106
+
107
+ float _PivotY;
108
+
109
+ float _SizeY;
110
+
111
+ float _PixelsPerUnit;
112
+
113
+
114
+
115
+ // lerpの逆を行う関数を追加
116
+
117
+ inline float inverseLerp(float a, float b, float value)
118
+
119
+ {
120
+
121
+ return saturate((value - a) / (b - a));
122
+
123
+ }
124
+
125
+
126
+
97
127
  v2f vert (appdata v)
98
128
 
99
129
  {
@@ -110,13 +140,19 @@
110
140
 
111
141
 
112
142
 
113
- // あるいは、下記のようにこの時点で頂点座標の-1~1を0~1にリマップしてしまってもいいでしょう
143
+ // あるいは、下記のようにこの時点で頂点座標を0~1にリマップしてしまってもいいでしょう
114
144
 
115
145
  // 頂点ローカル座標そのものを送ると、それに合わせて_Heightの範囲も調整してやる必要があるでしょうが
116
146
 
117
147
  // それだとインスペクターの表示が直感的でなく気に入らない...といったことがあるかもしれません
118
148
 
149
+ /*
150
+
151
+ float scale = _SizeY / _PixelsPerUnit;
152
+
119
- // o.localY = v.vertex.y * 0.5 + 0.5;
153
+ o.localY = inverseLerp(0.0, scale, v.vertex.y + _PivotY * scale);
154
+
155
+ */
120
156
 
121
157
 
122
158