์๋ ํ์ธ์~
์ฝ๋๊ทธ๋ฆผ์ ๋๋ค!
์ค๋์ ์ ๋ํฐ๋ก ๋ผ์ธ๋๋ก์ ํ๋ ๋ฒ์ ์ ๋ฆฌํด ๋ณผ๊ฒ์!! ใ ใ
์๋์ ๊ฐ์ด ๋ด๋ง๋๋ก ๊ทธ๋ฆผ์ ๊ทธ๋ฆด ์ ์๋ ์ฑ์ด์์๐๐
์ฐ์ ์ ๋ํฐ๋ถํฐ ์ผ์ฃผ์ธ์~!!
1. ํ๋ก์ ํธ ์ ํ
1-1. window -> Package Manager
1-2. AR foundation ํจํค์ง ๋งค๋์ ๋ค์ด๋ก๋
์๋จ +๋ฒํผ ์์ packages: Unity Registry๋ก ๋ฐ๊ฟ์ฃผ์๊ณ
๊ฒ์์ผ๋ก com.unity.xr.arfoundation์ ๊ฒ์ํ์๋ฉด ๊ธ๋ฐฉ ์ฐฉ์ค์์ด ์ฐพ์ผ์ค ์ ์์ต๋๋ค.
๊ทธ๊ฒ ์๋๋ผ๋ฉด, ์คํฌ๋กคํด์ AR foundation์ ์ฐพ์ผ์ ๋ค์ ๋ค์ด๋ก๋ ํด์ฃผ์ธ์๐
2. ์ ๋ํฐ์์ ํ๋ก์ ํธ ์์ ์ค์ ํด์ฃผ๊ธฐ
์์ ๊ฐ์ ๋ชจ์ต์ผ๋ก ํ์ผ๋ค์ ์ ํ ํด์ค๋๋ค.
์ฌ๊ธฐ์ ์ค์ํ๊ฑด Script ํ์ผ์ ๋ง๋ค ๋ ์ด๋ฆ์ ์์ ํ๋ฉด ๋ฐ๋์ class๋ช ๋ ๋ค์ ํ์ธํ์ ์ผ ํด์~!
3. script ์ฝ๋์ ํ
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Drawing : MonoBehaviour
{
public Camera cam;
public Material defaultMaterial;
private LineRenderer curline;
private int positionCount = 2;
private Vector3 PrevPos = Vector3.zero; //์์ (0,0,0)์ ์๋ฏธํจ
// Start is called before the first frame update
//์ฒ์์ ํ๋ฒ ์คํ
void Start()
{
}
void DrawMouse()
{
//2์ฐจ์ ์ขํ๋ฅผ 3์ฐจ์ ์ขํ๋ก ๋ฐ๊พธ๊ฒ ๋์์ฃผ๋ ํจ์.
//ScreenToWorldPoint ํจ์๋ ์นด๋ฉ๋ผ์์ ์ธ ์ ์๋ค.
Vector3 mousePos = cam.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0.3f));
//GetMouseButtonDown ํ๋ฒ ๋๋ฅด๋ ์๊ฐ ํธ์ถ
if (Input.GetMouseButtonDown(0))
{
//createLIne
createLIne(mousePos);
}
//GetMouseButton ๋๋ฅด๊ณ ์์๋ ๊ณ์ ํธ์ค
else if (Input.GetMouseButton(0))
{
//connectLine
connectLine(mousePos);
}
}
void createLIne(Vector3 mousePos)
{
positionCount = 2;
GameObject line = new GameObject("Line");
LineRenderer lineRend = line.AddComponent<LineRenderer>();
line.transform.parent = cam.transform;
line.transform.position = mousePos;
lineRend.startWidth = 0.01f; //์ ์ ์์๋๊ป
lineRend.endWidth = 0.01f; //์ ์ ๋ ๋๊ป
lineRend.numCornerVertices = 5;
lineRend. numCapVertices = 5;
lineRend.material = defaultMaterial;
lineRend.SetPosition(0, mousePos);
lineRend.SetPosition(1, mousePos);
curline = lineRend;
}
void connectLine(Vector3 mousePos)
{
if (PrevPos != null && Mathf.Abs(Vector3.Distance(PrevPos, mousePos)) >= 0.001f)
{
PrevPos = mousePos;
positionCount++;
curline.positionCount = positionCount;
curline.SetPosition(positionCount-1, mousePos);
}
}
// Update is called once per frame
//๋งค๋ฒ ์
๋ฐ์ดํธ ์คํ
void Update()
{
DrawMouse();
}
}
์ค์ ๋ถ๋ถ๋ค์ ์ฃผ์์ฒ๋ฆฌํ์ฌ ์ค๋ช ๋ ๊ฐ์ด ๋ฃ์ด๋์์ด์!
์ดํด์ ๋์์ด ๋์๊ธธ ๋ฐ๋๋๋ค๐
4. ์ ๋ํฐ์์ ์์ธ์ค์
4-1. ์ ๋ํฐ hierarchy์์ ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ํด๋ฆญ -> Create Empty
๋ผ์ธ๋๋ก์์ ๊ด๋ จ๋ ํจ์์ ์นด๋ฉ๋ผ๋ฅผ ์ฐ๊ฒฐํด ์ค๊ฑฐ์์!
4-2. ์นด๋ฉ๋ผ, sript ๋งตํ
Asset์ ์๋ Drawing script ํ์ผ์ hierarchy์ ๋๋๊ทธ ์ค ๋๋กญ ํด์ฃผ์ธ์.
๊ทธ๋ผ ์๋์ ๊ฐ์ ์ฐฝ์ด ํ์ฑํ ๋ฉ๋๋ค.
Camera์๋ XR Origin ์์ ์๋ Main Camera๋ฅผ cam์ ์ฐ๋ํด์ฃผ์ธ์.
material์ project -> Assets ๋ง์ฐ์ค ์ค๋ฅธ์ชฝ ํด๋ฆญ
material -> default material์ ํด๋ฆญํด์ ๋ง๋ค์ด ์ฃผ์ธ์.
camera์ ์ฐ๋ํ๋๊ฑฐ๋ ๋๊ฐ์ด ๋๋๊ทธ์ค๋๋กญ์ผ๋ก ์ฐ๊ฒฐํด์ค๋๋ค.
5. ํ๋ ์ด
์ ๋ํฐ ์๋จ์ ํ๋ ์ด ๋ฒํผ์ ๋๋ฅด๊ณ
๊ฒ์ ํจ๋์์ ๋๋๊ทธ๋ก ๋๋ก์ ํด๋ณด๋ฉด ๊ฐ์ฒด๊ฐ ์ฌ๋ผ๊ฐ๋ ๊ฒ์ ๋ณผ ์ ์์ด์.
๋น๋๋ฅผ ํตํด ํธ๋ํฐ์ผ๋ก ์ผ๋ณด๋ฉด ํ๋ฉด์์ ๋๋ก์์ด ๋๋ ๋ชจ์ต๋ ํ์ธํ์ค ์ ์์ต๋๋ค.
๊ทธ๋ผ ์ค๋๋ ๋ชจ๋๋ชจ๋ ์ฆ๊ฒ๊ณ ํ๋ณตํ ์ฝ๋ฉํ์ญ์ ~
์ด์ ์ฝ๋๊ทธ๋ฆผ์ด์์ต๋๋ค~~
๋๊ธ