回答編集履歴
2
プロパティの説明図を追加
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
範囲リマップの動作を変更
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
|
-
// あるいは、下記のようにこの時点で頂点座標
|
143
|
+
// あるいは、下記のようにこの時点で頂点座標を0~1にリマップしてしまってもいいでしょう
|
114
144
|
|
115
145
|
// 頂点ローカル座標そのものを送ると、それに合わせて_Heightの範囲も調整してやる必要があるでしょうが
|
116
146
|
|
117
147
|
// それだとインスペクターの表示が直感的でなく気に入らない...といったことがあるかもしれません
|
118
148
|
|
149
|
+
/*
|
150
|
+
|
151
|
+
float scale = _SizeY / _PixelsPerUnit;
|
152
|
+
|
119
|
-
|
153
|
+
o.localY = inverseLerp(0.0, scale, v.vertex.y + _PivotY * scale);
|
154
|
+
|
155
|
+
*/
|
120
156
|
|
121
157
|
|
122
158
|
|