Box当たり判定サンプル pic.twitter.com/RFFIVqJouC
— 光属性のアルモジナ(VRChat勢) (@arumogina) June 27, 2019
カメラが任意のBoxの形の中に入ってるか判定し、入っていれば箱の色を黒に、なければ白の半透明にしている。
Shader "Custom/BoxLengthJudge" { Properties{ _MainTex("MainTex",2D) = "white"{} _Scale("Scale",Range(1,10)) = 1 _Near("Near",Range(0,1)) = 0.3 } SubShader{ //透明部分のあるテクスチャを使う場合 Tags{"Queue" = "Transparent" "RenderType" = "Transparent"} Blend SrcAlpha OneMinusSrcAlpha Pass{ Cull Off CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex:POSITION; }; struct v2f { float4 pos:SV_POSITION; }; float _Scale; float _Near; float BoxLength(){ float s = _Scale/2+_Near;//Boxサイズ=Scale/2,カメラのnearclip位置を考慮する必要あり float3 CuPos = mul(unity_ObjectToWorld,float4(0,0,0,1)); float3 p = abs(CuPos.xyz-_WorldSpaceCameraPos) - float3(s,s,s); return length(max(p,0.0)); } v2f vert(appdata v){ v2f o; o.pos = UnityObjectToClipPos(v.vertex); return o; } float4 frag(v2f i) :SV_Target { if(BoxLength()<0.001){ return float4(0,0,0,1); } return float4(1,1,1,0.4); } ENDCG }//Pass }//SubShader FallBack "Diffuse" }