내일배움캠프 Unity 23일차 TIL - Unity 게임 개발 입문 1주차

Wooooo·2023년 11월 29일
0

내일배움캠프Unity

목록 보기
25/94

오늘의 키워드

개인 과제를 마무리하고 제출했다.
마무리를 하면서 때리면 말하는 NPC를 만들었다.
때려야하니까 때릴 수 있도록 마우스 좌클릭을 하면 화살이 나가도록 해봤다.


NPC Interface 리팩토링

어제 만든 Lizard NPC 코드를 보니까, 사용하지 않는 이벤트가 있는게 거슬려서, 불필요한 이벤트는 Interface에서 지우고, 메서드만 구현하도록 했다.


때리면 말하는 NPC

IConversableNPCIHitableNPC 인터페이스를 구현하는 NPC_Skeleton 클래스를 만들었다.

코드

using System;
using System.Collections.Generic;
using UnityEngine;

public class NPC_Skeleton : NPC, IHitableNPC, IConversableNPC
{
    [SerializeField] SpeechBubble speechBubble;

    List<string> hitedScripts = new()
    {
        @"!",
        @"T^T",
        @"Stop, {PlayerName}.",
    };

    public event Action<string> OnConversationEntered;

    protected override void Start()
    {
        base.Start();
        OnConversationEntered += Speech;
    }

    public void Speech(string script)
    {
        script = ScriptConverter.Convert(script);
        speechBubble.Enable(script);
    }

    public void OnConversationEnter(string script) => OnConversationEntered?.Invoke(script);

    public void OnConversationLeave(string script) { }

    string RandomScriptInList(List<string> scripts)
    {
        return scripts[UnityEngine.Random.Range(0, scripts.Count)];
    }

    public void OnHit()
    {
        OnConversationEnter(RandomScriptInList(hitedScripts));
    }
}

화살

화살은 콜라이더에 닿으면 튕겨져나가게 구현해봤다.

    private void OnCollisionEnter2D(Collision2D col)
    {
        if (col.contactCount > 0)
            transform.up = Vector2.Reflect(transform.up, col.contacts[0].normal);
    }

Vector2.Reflect를 이용하면 현재 방향과 닿은 콜라이더의 법선 벡터로 반사각을 찾을 수 있다.
Collision2D.contacts로 접촉 지점인 ContactPoint2D를 받아올 수 있다.
ContactPoint2D.normal로 접촉점의 법선 벡터를 알아낼 수 있다.

화살은 기본적으로 transform.up 방향으로 나아가도록 해줬고, 각도를 변경할 땐 변경된 각도를 transform.up으로 설정해줬다.


구현 영상

때리면 말하는 게 귀엽다.


구현해보고 싶은 것

사용자 키 리바인딩

new Input System의 장점이 런타임에서의 키 리바인딩이라고 하는데, 아직 많이 안써봐서 레거시 Input 클래스에 비해 생소하고 자료형도 어지럽고 메서드들도 너무 많아서 직접 구현해보려하니깐 너무 난해했다.

그래서 유튜브로 사용자 키 리바인딩 구현하는 튜토리열 영상들을 찾아보니까, 이거 생각보다 볼륨이 큰 거 같다.

그래도 사용자 키 리바인딩은 어느 게임이던 필요한 기능이기 때문에, 다른 게임에 이식하기 쉽도록 잘 구현해두면 두고두고 쓸 일이 있을 것 같다.

그런데 다루기 너무 어려워 ..

profile
game developer

0개의 댓글