赞
踩
Unity点击生成节点连线
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class Test_Line : MonoBehaviour { public GameObject qiu_prefab; public List<GameObject> spheres; public bool istrue = true; public GameObject qr_im; private void Update() { if (Input.GetMouseButtonDown(0) && istrue && !EventSystem.current.IsPointerOverGameObject()) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { GameObject obj = hit.collider.gameObject; if (spheres.Count > 2) { if (obj == spheres[0]) { qr_im.SetActive(true); Debug.Log("是否闭合"); } } if (obj.layer != LayerMask.NameToLayer("JieDian")) { GameObject jiedian = Instantiate(qiu_prefab, hit.point, new Quaternion()); spheres.Add(jiedian); if (spheres.Count > 1) { spheres[spheres.Count - 2].GetComponent<DragObjMove>().nextObj = spheres[spheres.Count - 1]; spheres[spheres.Count - 2].GetComponent<DragObjMove>().StartTest(); } } } } } public void Bihe() { istrue = false; spheres[spheres.Count - 1].GetComponent<DragObjMove>().nextObj = spheres[0]; spheres[spheres.Count - 1].GetComponent<DragObjMove>().StartTest(); } }
DragObjMove节点控制类
using System.Collections; using System.Collections.Generic; using UnityEngine; public class DragObjMove : MonoBehaviour { private Vector3 offset; public GameObject nextObj; private LineRenderer lineRenderer; private Transform startPoint; private Transform endPoint; public Material[] materials; public void StartTest() { if (nextObj != null) { startPoint = transform; endPoint = nextObj.transform; lineRenderer = GetComponent<LineRenderer>(); lineRenderer.positionCount = 2; } } private void Update() { // 确保起点和终点已赋值且LineRenderer组件存在 if (nextObj != null && lineRenderer != null) { lineRenderer.SetPosition(0, startPoint.position); // 设置线段的起始位置 lineRenderer.SetPosition(1, endPoint.position); // 设置线段的结束位置 } } private void OnMouseEnter() { transform.GetComponent<MeshRenderer>().material = materials[1]; } private void OnMouseDown() { offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.WorldToScreenPoint(transform.position).z)); } private void OnMouseDrag() { Vector3 newPosition = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, Camera.main.WorldToScreenPoint(transform.position).z)) + offset; transform.position = newPosition; } private void OnMouseExit() { transform.GetComponent<MeshRenderer>().material = materials[0]; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。