MagnifyingGlass.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using UnityEngine;
  2. public class MagnifyingGlass : PostEffectsBase
  3. {
  4. //放大的工具
  5. public Transform tool;
  6. //是否开始放大
  7. public bool isStartEnlarge = false;
  8. // shader
  9. private Shader myShader;
  10. //材质
  11. private Material mat = null;
  12. public Material material
  13. {
  14. get
  15. {
  16. // 检查着色器并创建材质
  17. mat = CheckShaderAndCreateMaterial(myShader, ref mat);
  18. return mat;
  19. }
  20. }
  21. // 放大强度
  22. [Range(-2.0f, 2.0f), Tooltip("放大强度")]
  23. public float zoomFactor = 0.4f;
  24. // 放大镜大小
  25. [Range(0.0f, 0.2f), Tooltip("放大镜大小")]
  26. public float size = 0.15f;
  27. // 凸镜边缘强度
  28. [Range(0.0001f, 0.1f), Tooltip("凸镜边缘强度")]
  29. public float edgeFactor = 0.05f;
  30. // 遮罩中心位置
  31. private Vector2 pos = Vector2.zero;
  32. void Start()
  33. {
  34. //找到对应的Shader文件
  35. myShader = shader;
  36. if (myShader == null)
  37. myShader = Shader.Find("Custom/MagnifyingGlass");
  38. }
  39. // 渲染屏幕
  40. void OnRenderImage(RenderTexture source, RenderTexture destination)
  41. {
  42. if (material)
  43. {
  44. // 把鼠标坐标传递给Shader
  45. material.SetVector("_Pos", pos);
  46. material.SetFloat("_ZoomFactor", zoomFactor);
  47. material.SetFloat("_EdgeFactor", edgeFactor);
  48. material.SetFloat("_Size", size);
  49. // 渲染
  50. //Graphics.Blit函数使用特定的UnityShader来对当前图像进行处理,再把返回的渲染纹理显示到屏幕上
  51. Graphics.Blit(source, destination, material);
  52. }
  53. else
  54. {
  55. Graphics.Blit(source, destination);
  56. }
  57. }
  58. public void Update()
  59. {
  60. if (!isStartEnlarge) return;
  61. //if (tool == null) return;
  62. //Vector2 mousePos = Camera.main.WorldToScreenPoint(tool.position);
  63. Vector3 mousePos = Input.mousePosition;
  64. //将mousePos转化为(0,1)区间
  65. pos = new Vector2(mousePos.x / Screen.width, mousePos.y / Screen.height);
  66. }
  67. }