Advertisement
Guest User

Untitled

a guest
Jul 16th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.46 KB | None | 0 0
  1. using MeshSplitting.Splitters;
  2. using System;
  3. using UnityEngine;
  4.  
  5. namespace MeshSplitting.Examples
  6. {
  7. [AddComponentMenu("Mesh Splitting/Examples/Camera Line Splitter")]
  8. [RequireComponent(typeof(Camera))]
  9. [RequireComponent(typeof(LineRenderer))]
  10. public class CameraLineSplitter : MonoBehaviour
  11. {
  12. #if UNITY_EDITOR
  13. [NonSerialized]
  14. public bool ShowDebug = false;
  15. #endif
  16.  
  17. public float CutPlaneDistance = 1f;
  18. public float CutPlaneSize = 2f;
  19.  
  20. private LineRenderer _lineRenderer;
  21. private Camera _camera;
  22. private Transform _transform;
  23.  
  24. private bool _inCutMode = false;
  25. private bool _hasStartPos = false;
  26. private Vector3 _startPos;
  27. private Vector3 _endPos;
  28.  
  29. private void Awake()
  30. {
  31. _transform = transform;
  32. _lineRenderer = GetComponent<LineRenderer>();
  33. _camera = GetComponent<Camera>();
  34.  
  35. _lineRenderer.enabled = false;
  36. }
  37.  
  38. private void Update()
  39. {
  40. if (Input.GetMouseButtonDown(0))
  41. {
  42. _startPos = GetMousePosInWorld();
  43. _hasStartPos = true;
  44. }
  45. else if (_hasStartPos && Input.GetMouseButtonUp(0))
  46. {
  47. _endPos = GetMousePosInWorld();
  48. if (_startPos != _endPos)
  49. CreateCutPlane();
  50.  
  51. _hasStartPos = false;
  52. _lineRenderer.enabled = false;
  53. }
  54.  
  55. if (_hasStartPos)
  56. {
  57. _lineRenderer.enabled = true;
  58. _startPos = new Vector3(_startPos.x, _startPos.y, transform.position.z + CutPlaneDistance);
  59. _lineRenderer.SetPosition(0, _startPos);
  60. _lineRenderer.SetPosition(1, GetMousePosInWorld());
  61. }
  62. }
  63.  
  64. private Vector3 GetMousePosInWorld()
  65. {
  66. Ray ray = _camera.ScreenPointToRay(Input.mousePosition);
  67. return ray.origin + ray.direction * CutPlaneDistance;
  68. }
  69.  
  70. private void CreateCutPlane()
  71. {
  72. Vector3 center = Vector3.Lerp(_startPos, _endPos, .5f);
  73. Vector3 cut = (_endPos - _startPos).normalized;
  74. Vector3 fwd = (center - _transform.position).normalized;
  75. Vector3 normal = Vector3.Cross(fwd, cut).normalized;
  76.  
  77. GameObject goCutPlane = new GameObject("CutPlane", typeof(BoxCollider), typeof(Rigidbody), typeof(SplitterSingleCut));
  78.  
  79. goCutPlane.GetComponent<Collider>().isTrigger = true;
  80. Rigidbody bodyCutPlane = goCutPlane.GetComponent<Rigidbody>();
  81. bodyCutPlane.useGravity = false;
  82. bodyCutPlane.isKinematic = true;
  83.  
  84. Transform transformCutPlane = goCutPlane.transform;
  85. transformCutPlane.position = _camera.transform.position;
  86. transformCutPlane.localScale = new Vector3(Vector3.Distance(_startPos, _endPos), .01f, CutPlaneSize);
  87. transformCutPlane.up = normal;
  88. float angleFwd = Vector3.Angle(transformCutPlane.forward, fwd);
  89. //transformCutPlane.position -= Vector3.up * (Camera.main.ScreenToWorldPoint(center).y - transform.position.y);
  90. transformCutPlane.LookAt(center, normal);
  91. //transformCutPlane.up = normal;
  92. //transformCutPlane.RotateAround(center, normal, normal.y < 0f ? -angleFwd : angleFwd);
  93. }
  94. }
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement