传送门出现|消失效果

在shader 中判断定点与传送平面的位置关系,改变其透明度
 
问题: 所有会被用到的shader都要改
 
算法:
    1,需要 面上一点,和面的法向量
    2,(目标点-面上点)点乘  法向量   即 cos夹角
    3,d>0 :在法向指向的一侧
          d=0: 点在面上
          d<0:点在法向的所指方向的另一侧    
透明度要做渐变的话可以计算在法向量的投影 ,法向量为单位法向量即可
 
基础知识
向量a·向量b=| a |*| b |*cosΘ
Θ为两向量夹角
| b |*cosΘ叫做向量b在向量a上的投影
| a |*cosΘ叫做向量a在向量b上的投影
 
效果

代码
 
  1. Shader"Cerulean/CanBeTransfer"
  2. {
  3. Properties
  4. {
  5. _BaseTex("Base Texture",2D)="white"{}
  6. _PlanePoint("Plane Point",Vector)=(0,0,0,0)
  7. _PlaneNormal("Plane Normal",Vector)=(1,0,0,0)
  8. }
  9. SubShader
  10. {
  11. Tags{"Queue"="Transparent""RenderType"="Transparent"}
  12. BlendSrcAlphaOneMinusSrcAlpha
  13. LightingOffZTestOn
  14. LOD 100
  15. Pass
  16. {
  17. CGPROGRAM
  18. #pragma vertex vert
  19. #pragma fragment frag
  20. #include"UnityCG.cginc"
  21. sampler2D _BaseTex;
  22. float4_BaseTex_ST;
  23. fixed3 _PlanePoint;
  24. fixed3 _PlaneNormal;
  25. //计算某个点在某平面的法向量上的投影
  26. fixed Projection2PlaneNormal(fixed3 planePoint, fixed3 normal, fixed3 pos)
  27. {
  28. fixed3 dis = pos - planePoint;
  29. return dot(dis, normal);
  30. }
  31. struct appdata
  32. {
  33. float4 vertex : POSITION;
  34. float2 uv : TEXCOORD0;
  35. };
  36. struct v2f
  37. {
  38. float4 vertex : SV_POSITION;
  39. float2 baseuv : TEXCOORD0;
  40. float4 global : TEXCOORD1;
  41. };
  42. v2f vert (appdata v)
  43. {
  44. v2f o;
  45. o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
  46. o.baseuv = TRANSFORM_TEX(v.uv,_BaseTex);
  47. o.global = mul(unity_ObjectToWorld, v.vertex);
  48. return o;
  49. }
  50. fixed4 frag (v2f i): SV_Target
  51. {
  52. fixed3 baseCol = tex2D(_BaseTex, i.baseuv);
  53. fixed alpha = saturate(Projection2PlaneNormal(_PlanePoint,_PlaneNormal, i.global));
  54. return fixed4(baseCol, alpha);
  55. }
  56. ENDCG
  57. }
  58. }
  59. }
 
传送门脚本
  1. //找到要被传送的物体设置shader的变量
  2. material.SetVector("_PlanePoint", transform.position);
  3. material.SetVector("_PlaneNormal", transform.forward);
 
 
 
 
 

转载于:https://www.cnblogs.com/Hichy/p/6707417.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值