사생활 보호 설정
https://gamjia.tistory.com
Updated News
Mini Rooms
답글수 [0]
What Friends Say
한마디로 표현해봐~
1촌평 관리
[Day 8] Save The Dog Tutorial 2
GamJia 2024. 11. 14. 19:45
오블완 챌린지 8일차
오늘 수능 보는 전국의
모든 학생들을 진심으로
응원하는 GamJia 입니다
어제 강의에 이어서Save The Dog을 만들어 보겠습니다
일단 빈 객체를 하나 생성해주고
Line Renderer Component를 추가해주겠습니다
LineRenderer는 3D 공간에 선을 그릴 수 있게 해주는 컴포넌트입니다.
시작점과 끝점 좌표를 설정하면 그 사이에 선을 그리고,
여러 좌표를 추가해 복잡한 선이나 궤적을 표현할 수도 있습니다
https://docs.unity3d.com/kr/2018.4/Manual/class-LineRenderer.html
라인 렌더러 - Unity 매뉴얼
라인 렌더러(Line Renderer) 컴포넌트는 3D 공간에서 두 개 이상 지점의 배열을 사용하고 각각을 연결하는 직선을 그립니다. 따라서 하나의 라인 렌더러 컴포넌트는 단순한 직선에서 시작해서 복잡
docs.unity3d.com
Line Renderer의 Point를 선처럼
연결해서 Line Renderer 입니다
그래서 좌표에 변화를 주면 그거대로
선이 저렇게 그어진답니다
" 선이 핑크색으로 설정되어있구나! "
싶을 수 있지만
그건 아니고 마젠타는
개발자에게 곧 투명색입니다
Line 전용 UI Material을 하나 생성해주고
색은 원작처럼 검은색으로 설정해주겠습니다
선 객체는 빛에 반사될 필요가 없어서
UI Material로 만들어주었습니다
(Unlit Material도 괜찮아요)
Line Renderer가 point들을 연결해서
선을 만들기 때문에 이런 특성을 이용해
그걸 Edge Collider에도 적용하겠습니다
using System.Collections.Generic; using UnityEngine; public class LineManager : MonoBehaviour { private LineRenderer lineRenderer; private EdgeCollider2D edgeCollider; // LineRenderer와 EdgeCollider2D에 설정할 포인트 리스트 private List<Vector2> linePoints = new List<Vector2>(); void Awake() { lineRenderer = GetComponent<LineRenderer>(); edgeCollider = GetComponent<EdgeCollider2D>(); // EdgeCollider2D의 초기 설정 (충돌 감지 범위가 좁아지도록) edgeCollider.edgeRadius = 0.05f; } void Update() { if (Input.GetMouseButton(0)) { Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition); // 마우스 포지션이 마지막 점과 충분히 떨어진 경우에만 추가 if (linePoints.Count == 0 || Vector2.Distance(linePoints[linePoints.Count - 1], mousePos) > 0.1f) { linePoints.Add(mousePos); UpdateLine(); } } } private void UpdateLine() { // LineRenderer의 점을 업데이트 lineRenderer.positionCount = linePoints.Count; for (int i = 0; i < linePoints.Count; i++) { lineRenderer.SetPosition(i, linePoints[i]); } // EdgeCollider2D의 점을 업데이트 edgeCollider.SetPoints(linePoints); } }
update에서 distance를 확인한 이유는
저게 없으면 point들이 필요 이상으로 붙어있어서
쓸데 없는 point들이 쌓일 수 있기에
그걸 방지하기 위함 입니다
저장 후 실행했더니 강아지가 선 위에
잘 있는 모습을 볼 수 있습니다
근데 뭔가 이상하지 않나요?
잘 보면 원작과는 다른 점이 2가지가 있는데요
1. 선에 중력이 없다
2. 그리면 안되는 부분(땅) 위에 선이 그려진다
3. 선이 분리되지 않는다
중력이야 Rigidbody만 추가하면
그만 아닌가? 싶을 수 있지만
실제로는 이렇게 됩니다
Collider의 position에 맞춰
LineRenderer position들이 이동해야 하는데요
생각보다 굉장히 복잡한 내용이라
내일 이어서 하도록 하겠습니다
오늘은 여기까지 하고
GitHub에 Commit하는걸로
마무리 하겠습니다!
저 중력 부분은 저도 잘 몰라서
아마 내일은 다른 강의를
참고하지 않을까 싶습니다..
감사합니다!!