https://senji.tistory.com/75

 

241206(금) [NPC 대화]

NPCdata.csusing UnityEngine;[CreateAssetMenu(fileName = "NewNPCData", menuName = "Dialogue/NPC Data")]public class NPCData : ScriptableObject{ public string npcName; public string[] dialogueLines;} NPC 대화정보를 스크립터블 오브젝트로 관

senji.tistory.com

이전 NPC 대화는 NPC만 대화를 출력하고 (단방향) 이미지는 나오지 않았다.

 

 

이번에는 NPC와 플레이어가 상호작용(양방향 대화)하고

NPC에 맞는 이미지가 보여지게 되었으며

DOTween을 통해 대화메시지가 한글자씩 출력되는 애니메이션이 실행된다.

[CreateAssetMenu(fileName = "NewNPCData", menuName = "Dialogue/NPC Data")]
public class NPCData : ScriptableObject
{
    ... 중략
    
    public Sprite npcHeadImage;
    public Sprite npcBodyImage;
}

 

NPC 이미지를 npcData 매개변수를 통해 데이터를 넘겨준다.

DialougeManager.cs
[SerializeField] private Image npcHeadImage;
[SerializeField] private Image npcBodyImage;

public void StartDialogue(NPCData npcData)
    {
        ... 중략

       npcHeadImage.sprite = currentNPCData.npcHeadImage;
       npcBodyImage.sprite = currentNPCData.npcBodyImage;

        // 첫 대화 출력
        NextDialogue();
    }

 

다이얼로그 매니저에 NPCData를 전달하여 NPC마다 보이는 이미지가 다르게

표현되게 했다. 처음에 NPC와 접근하면 이미지가 흰색 이미지가 떠서 오류 원인 파악을 위해 튜터님에게 여쭤봤는데

필요없는 오브젝트가 겹쳐서 발생한 문제로 오브젝트를 삭제했더니 정상적으로 보이게 됐다.

 

또한, 한글자씩 타이핑 한 것처럼 보이는

대화 애니메이션을 사용하기 위해 Dotween 함수를 사용했다.

  canTalking = false;
  if (npcIndex < currentNPCData.npcDialogue.Length)
            {
                npcDialogueText.text = string.Empty;
                npcDialogueText.DOText(currentNPCData.npcDialogue[npcIndex], DOTextDelay).OnComplete(() => canTalking = true);
                ... 중략
            }

 

DOText를 사용하여 npc 또는 player 다이얼로그를 DOTextDelay 만큼 실행되게 하였고

OnComplete 함수를 통해 대화가 끝날때만 넘어갈 수 있게 설정했다.

 

if (!canTalking)
{
    playerDialogueText.DOComplete();
    npcDialogueText.DOComplete();
    return;
}

 

CanTalking이라는 bool형 변수를 사용했다.

CanTalking이 false면 타이핑 애니메이션이 실행중이여서 대화가 불가능한 상태를 뜻한다. (다음대화로 안 넘어가짐)

player, npc 대화메시지를 DOTween 함수중

DOComplete 함수를 사용하여 즉시 완료 상태가 되게끔 설정하여

이용자가 대화를 다 안보더라도 대화가 모두 출력된 뒤 다음 대화로 넘어갈 수 있게 됐다.

 

참고자료

https://velog.io/@livelyjuseok/Unity-DOTween-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

Unity - DOTween 사용하기

다트윈, 닷트윈으로 불리는 유니티에서 유명한 에셋중 하나입니다. 설명을 보면 C나에게는 가벼운 기능들을 빠르고 효율적이게 쓸 수 있게 해주는 API 같은 존재이다. 사용하기 위해서는 using DG.T

velog.io

 

https://wlsdn629.tistory.com/entry/%EC%9C%A0%EB%8B%88%ED%8B%B0-Dotween-%ED%95%A8%EC%88%98-%EC%A0%95%EB%A6%AC

 

유니티 Dotween 함수 정리

자주 사용하는 함수- DoRestart : 트윈을 처음부터 다시 시작- DoRewind : 트윈을 거꾸로 재생하여 처음 상태로 되돌림두 개의 함수를 이용해서 주로 UI 애니메이션 만들곤 함.   함수 이름  설명 DOCo

wlsdn629.tistory.com

 

https://dotween.demigiant.com/documentation.php

DOTween 공식문서로 이승환 튜터님이 참고해보라고 주신 자료

다 영어이긴 하지만...ㅠㅠ 유용한 자료같다.

감사합니다! 

 

DOTween - Documentation

Nomenclature Tweener A tween that takes control of a value and animates it. Sequence A special tween that, instead of taking control of a value, takes control of other tweens and animates them as a group. Tween A generic word that indicates both a Tweener

dotween.demigiant.com

 

 

 

 

 

 

+ Recent posts