Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using MeshSplitting.Splitters;
- using System;
- using UnityEngine;
- namespace MeshSplitting.Examples
- {
- [AddComponentMenu("Mesh Splitting/Examples/Camera Line Splitter")]
- [RequireComponent(typeof(Camera))]
- [RequireComponent(typeof(LineRenderer))]
- public class CameraLineSplitter : MonoBehaviour
- {
- #if UNITY_EDITOR
- [NonSerialized]
- public bool ShowDebug = false;
- #endif
- public float CutPlaneDistance = 1f;
- public float CutPlaneSize = 2f;
- private LineRenderer _lineRenderer;
- private Camera _camera;
- private Transform _transform;
- private bool _inCutMode = false;
- private bool _hasStartPos = false;
- private Vector3 _startPos;
- private Vector3 _endPos;
- private void Awake()
- {
- _transform = transform;
- _lineRenderer = GetComponent<LineRenderer>();
- _camera = GetComponent<Camera>();
- _lineRenderer.enabled = false;
- }
- private void Update()
- {
- if (Input.GetMouseButtonDown(0))
- {
- _startPos = GetMousePosInWorld();
- _hasStartPos = true;
- }
- else if (_hasStartPos && Input.GetMouseButtonUp(0))
- {
- _endPos = GetMousePosInWorld();
- if (_startPos != _endPos)
- CreateCutPlane();
- _hasStartPos = false;
- _lineRenderer.enabled = false;
- }
- if (_hasStartPos)
- {
- _lineRenderer.enabled = true;
- _startPos = new Vector3(_startPos.x, _startPos.y, transform.position.z + CutPlaneDistance);
- _lineRenderer.SetPosition(0, _startPos);
- _lineRenderer.SetPosition(1, GetMousePosInWorld());
- }
- }
- private Vector3 GetMousePosInWorld()
- {
- Ray ray = _camera.ScreenPointToRay(Input.mousePosition);
- return ray.origin + ray.direction * CutPlaneDistance;
- }
- private void CreateCutPlane()
- {
- Vector3 center = Vector3.Lerp(_startPos, _endPos, .5f);
- Vector3 cut = (_endPos - _startPos).normalized;
- Vector3 fwd = (center - _transform.position).normalized;
- Vector3 normal = Vector3.Cross(fwd, cut).normalized;
- GameObject goCutPlane = new GameObject("CutPlane", typeof(BoxCollider), typeof(Rigidbody), typeof(SplitterSingleCut));
- goCutPlane.GetComponent<Collider>().isTrigger = true;
- Rigidbody bodyCutPlane = goCutPlane.GetComponent<Rigidbody>();
- bodyCutPlane.useGravity = false;
- bodyCutPlane.isKinematic = true;
- Transform transformCutPlane = goCutPlane.transform;
- transformCutPlane.position = _camera.transform.position;
- transformCutPlane.localScale = new Vector3(Vector3.Distance(_startPos, _endPos), .01f, CutPlaneSize);
- transformCutPlane.up = normal;
- float angleFwd = Vector3.Angle(transformCutPlane.forward, fwd);
- //transformCutPlane.position -= Vector3.up * (Camera.main.ScreenToWorldPoint(center).y - transform.position.y);
- transformCutPlane.LookAt(center, normal);
- //transformCutPlane.up = normal;
- //transformCutPlane.RotateAround(center, normal, normal.y < 0f ? -angleFwd : angleFwd);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement