Short Cake
8PM - Animal Crossing Wild World

사생활 보호 설정

https://gamjia.tistory.com

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도 괜찮아요)

 

Type 설명
Lit 조명에 영향을 받는 셰이더로, 빛의 방향, 강도, 색상 등에 따라 오브젝트의 밝기와 색깔이 달라집니다
Unlit 조명에 영향을 받지 않는 셰이더로, 조명이 없어도 항상 일정한 밝기와 색상을 유지합니다. 주로 2D UI 요소조명 효과가 필요 없는 오브젝트에 사용되며, 게임 성능 최적화에 유리합니다

 


 

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하는걸로

마무리 하겠습니다!

저 중력 부분은 저도 잘 몰라서

아마 내일은 다른 강의를

참고하지 않을까 싶습니다..

 

감사합니다!!
 


 

'Challenge' 카테고리의 다른 글

[Day 10] Save The Dog Tutorial 4  (2) 2024.11.16
[Day 9] Save The Dog Tutorial 3  (6) 2024.11.15
[Day 7] Save The Dog Tutorial 1  (8) 2024.11.13
[Day 6] Flappy Bird Tutorial 5  (0) 2024.11.12
[Day 5] Flappy Bird Tutorial 4  (4) 2024.11.11