// Start is called before the first frame update public void Generate() { // Construct mesh meshFilter = this.GetComponent <MeshFilter>(); Mesh curtainMesh = new Mesh(); curtainMesh.vertices = this.vertices; curtainMesh.triangles = this.indices; curtainMesh.uv = this.uvs; meshFilter.mesh = curtainMesh; MeshRenderer render = this.GetComponent <MeshRenderer>(); Material mat = new Material(Shader.Find("EPlane/unlitSampler2D")); mat.SetTexture("_MainTex", _MainTex); render.material = mat; // Spawn UI GameObject EPUI = GameObject.Find("EPUI"); GameObject uiSpawnerPrefab = Resources.Load <GameObject>("Prefabs/Components/visualVertexSpawner"); uiSpawner = GameObject.Instantiate <GameObject>(uiSpawnerPrefab); uiSpawner.GetComponent <RectTransform>().SetParent(EPUI.GetComponent <RectTransform>()); UIVertexSpawner uiSpawnerComp = uiSpawner.GetComponent <UIVertexSpawner>(); uiSpawnerComp.meshEntity = this.gameObject; uiSpawnerComp.SpawnVertices(this.WorldToScreenPoints(meshFilter.mesh.vertices)); }
public void OnPointerUp(PointerEventData eventData) { float minPosX = Mathf.Min(eventData.pressPosition.x, eventData.position.x); float maxPosX = Mathf.Max(eventData.pressPosition.x, eventData.position.x); float minPosY = Math.Min(eventData.pressPosition.y, eventData.position.y); float maxPosY = Mathf.Max(eventData.pressPosition.y, eventData.position.y); UIVertex[] uiVertices = this.FilterByRectangle(GameObject.FindObjectsOfType <UIVertex>(), new Vector3(minPosX, minPosY, 0), new Vector3(maxPosX, maxPosY, 0)); foreach (var vertex in uiVertices) { UIVertexSpawner uiSpawner = vertex.transform.parent.gameObject.GetComponent <UIVertexSpawner>(); uiSpawner.AddDirtyVertex(vertex.VertexIndex, vertex); } }
public void OnClicked(GameObject vertex) { UIVertexSpawner spawnerComp = uiSpawner.GetComponent <UIVertexSpawner>(); UIVertex uiVertex = vertex.GetComponent <UIVertex>(); spawnerComp.rulerVertexIndex = uiVertex.VertexIndex; RectTransform rTrans = vertex.GetComponent <RectTransform>(); startPosition = Input.mousePosition; if (!spawnerComp.dirtyVertices.ContainsKey(spawnerComp.rulerVertexIndex)) { spawnerComp.EmptyDirtyVertices(); spawnerComp.AddDirtyVertex(uiVertex.VertexIndex, uiVertex); } EPCamera.SendMessage("OnUpdateRulerPosition", rTrans.position); }
public void OnDrag(PointerEventData eventData) { UIVertex uiVertex = eventData.pointerDrag.GetComponent <UIVertex>(); Vector3 position = this.ScreenPositionToLocalPosition(Input.mousePosition); Vector3 nowPosition = Input.mousePosition; UIVertexSpawner spawnerComp = uiSpawner.GetComponent <UIVertexSpawner>(); // 移动所有选中的顶点 if (spawnerComp.IsDirtyVerticesContainsKey(uiVertex.VertexIndex)) { spawnerComp.MoveDirtyVertices(nowPosition - startPosition); this.SetVertex(spawnerComp.dirtyVertices); } startPosition = nowPosition; }
public void SetVertex(Dictionary <int, UIVertex> DirtyVertices) { List <Vector3> tempVertices = new List <Vector3>(); meshFilter.mesh.GetVertices(tempVertices); foreach (var vertex in DirtyVertices) { tempVertices[vertex.Value.VertexIndex] = this.ScreenPositionToLocalPosition(vertex.Value.GetComponent <RectTransform>().position); } meshFilter.mesh.SetVertices(tempVertices); UIVertexSpawner spawnerComp = uiSpawner.GetComponent <UIVertexSpawner>(); Vector3 position = spawnerComp.RulerPosition(); if (position.z != -1) { EPCamera.SendMessage("OnUpdateRulerPosition", position); } }