Prologue
이 글은 LineRenderer Component 를 사용하여 Unity(C#) 화면에 선을 그리는 방법에 대한 흥미로운 내용을 담고 있습니다.
Unity Documentation 는 here 에서 아주 명확한 방법으로 그것을 설명하기 위하여 작성되어 있습니다.
그러나 실행 시 사용되는 스크립트, 즉 예제를 추가하는 방법에는 어떤 정보가 없습니다.
기본적인 이해를 돕기 위해 이 곳에 예제를 작성해봅니다.
First Time
새로운 C# script 을 Main Camera에 추가합니다. 추가한 script 를 열고 밑에 있는 코드를 적습니다. :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | using UnityEngine; using System.Collections; public class DrawLineTest : MonoBehaviour { private LineRenderer line; private Vector3 mousePos; private Vector3 startPos; private Vector3 endPos; // Update is called once per frame void Update () { if (Input.GetMouseButtonDown(0)) { if (line == null) createLine(); mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); mousePos.z = 0; line.SetPosition(0, mousePos); line.SetPosition(1, mousePos); startPos = mousePos; } else if (Input.GetMouseButtonUp(0) && line) { if (line) { mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); mousePos.z = 0; line.SetPosition(1, mousePos); endPos = mousePos; addColliderToLine(); line = null; } } else if (Input.GetMouseButton(0)) { if (line) { mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); mousePos.z = 0; line.SetPosition(1, mousePos); } } } // Following method creates line runtime using Line Renderer component private void createLine() { line = new GameObject("Line").AddComponent<LineRenderer>(); line.material = new Material(Shader.Find("Diffuse")); line.SetVertexCount(2); line.SetWidth(0.1f, 0.1f); line.SetColors(Color.black, Color.black); line.useWorldSpace = true; } // Following method adds collider to created line private void addColliderToLine() { BoxCollider col = new GameObject("Collider").AddComponent<BoxCollider>(); col.transform.parent = line.transform; //Collider is added as child object of line float lineLength = Vector3.Distance(startPos, endPos); //length of line // size of collider is set where X is length of line, Y is width of line, Z will be set as per requirement col.size = new Vector3(lineLength, 0.1f, 1f); Vector3 midPoint = (startPos + endPos) / 2; col.transform.position = midPoint; // setting position of collider object // Following lines calculate the angle between start Pos and endPos float angle = (Mathf.Abs(startPos.y - endPos.y) / Mathf.Abs(startPos.x - endPos.x)); if ((startPos.y < endPos.y && startPos.x > endPos.x) || (endPos.y < startPos.y && endPos.x > startPos.x)) { angle *= -1; } if (angle != angle) // check NaN { Destroy(line.gameObject); // NaN? Destroy gameObject } else // Not NaN { angle = Mathf.Rad2Deg * Mathf.Atan(angle); col.transform.Rotate(0, 0, angle); } } } | cs |
script 를 저장한 후 Unity 로 돌아갑니다.
인제 Scene 을 실행을 하면 화면에 아무것도 없는 것을 보고 실망을 했을 수 있습니다.
하지만 당신은 이미 Line 을 만들 수 있습니다!
화면에서 오른쪽 버튼을 누른 채 드래그를 하면 Line 이 생성되는 것을 볼 수 있습니다.
감사합니다~
'Programming > Unity3D' 카테고리의 다른 글
AssetBundle 관련 정리 (0) | 2020.04.23 |
---|---|
[Unity3d] 경로 보여주는 툴 (0) | 2019.11.15 |
UForm (Unity3D + WinForm) 에 대한 고찰... (0) | 2015.07.27 |
AssetBundle 관하여... #1 (0) | 2015.07.23 |
Unity + WinForm 을 구현해보자! 2편 (1) | 2015.07.20 |
최근댓글