Today
-
Total
-
  • [C#]Unity - 대화 애니메이션 구현하기
    Coding/etc 2019. 3. 25. 22:41

    **C#과 유니티로 제작하였습니다**



    **유니티 초보자의 시점에서 직접 구현해 본 것으로, 좋은 코드가 아닐 수 있습니다**




    게임을 하다보면, 다양한 캐릭터들간의 대화 씬을 구현해야 할 경우가 있습니다.



    이렇게 독백이든, 캐릭터 간 대화이든 UI를 이용하여 캐릭터의 대사를 표현해야 할 경우가 생깁니다.


    대부분의 게임에서 대사는 빠질수가 없으니까요!



    이런 단순한 대화창을 구현하는 것은 유니티로 굉장히 쉬울 것입니다. 


    단순하게 텍스트값을 입력받아 유니티 UI의 Text로 출력해 주면 되기 때문이죠.



    하지만 대화가 오고가는 장면에서 텍스트가 화면에 뚝 나타났다, 바로 사라지면 위화감이 들겠죠.


    그래서 많은 게임에서 대사에 타이핑 애니메이션을 추가해서 대사가 한글자씩 써지는 것 같이 보이는 효과를 주려 합니다.





    이렇게 글자가 한글자 한글자 써지는 느낌의 타이핑 효과를 주기위해선 간단한 코드만 거치면 가능했습니다.


    일단 저렇게 텍스트가 적히는 동안 다른 동작들이 멈추면 안되기 때문에 유니티의 코루틴을 이용하기로 했습니다.



    텍스트 창 UI


    일단 이렇게 Panel과 Text를 이용하여 대화 창을 간단하게 구현해 주었습니다.



    그리고 ChatController라는, 대화 창을 컨트롤 할 수 있는 C# 스크립트를 만들었습니다.



    코드상으로 UI를 이용해야하므로 


    using UnityEngine.UI;


    대사 텍스트가 출력되는 ChatText, 캐릭터의 이름이 출력되는 CharacterName 두 가지의 Text를 선언하였습니다. 



    스크립트를 저장한 뒤, 다시 유니티로 돌아가 ChatController라는


    빈 게임 오브젝트를 만들고 방금 만든 스크립트를 넣어주었습니다.



    각각의 텍스트 오브젝트에 아까 만든 UI를 대입하여 넣어주었습니다.


    다시 스크립트로 돌아가



    NormalChat이라는 IEnumerator를 선언합니다. 이는 두 가지의 매개변수(narrator = 화자, narration  = 대사)


    를 입력받아 타이핑 효과를 적용하여 출력합니다.



    CharacterName.text에 narrator를 전달받아 화자의 이름을 입력시키고, 


    writerText라는 String을 통하여 narration을 하나씩 전달받았습니다.


    코루틴에서 yield return null은 다음 Update까지 기다리는 것이므로, 대사의 인덱스만큼 for문을 돌려 한 프레임에 writerText를 하나씩 증가시키고, 계속해서 출력하여 마치 대사가 하나씩 입력시키는 것 처럼 보이게 합니다.



    이제 타이핑 효과를 줄 수 있게 되었으니 대사만 입력해주면 됩니다.



    이렇게 틀을 짜놓은 NormatChat을 이용해 내가 원하는 대사를 코드상으로 입력한 뒤




    Start문으로 전체 코루틴을 작동시키면,



    이렇게 타이핑 효과로 대사를 출력할 수 있습니다! 대사를 조금더 천천히 출력하고 싶다면 for문을 도는 빈도를 줄이거나, 코루틴의 yield return WaitForSeconds 등을 이용하여 더 천천히 출력하게 할 수도 있습니다.




    * 개선해야 할 점


    대사창은 성공적으로 구현하였으나, 코드내에서 다소 불필요한 다수의 코루틴을 사용해야 하는 것이 문제가 될 수 있으므로 코루틴이 아닌 다른 방법으로도 매끄럽게 대사들을 출력하는 방법도 찾아봐야 함.





    사용한 소스 파일

    ChatController.cs


    'Coding > etc' 카테고리의 다른 글

    [XSLT 예제] HTML 테이블 그리기  (0) 2019.09.17
    [XSLT 예제] 다중 조건문 수행하기  (1) 2019.09.09
    [XSLT 예제] 간단한 조건문 처리하기  (0) 2019.09.06
    XML 기본 문법  (0) 2019.09.04
    XML의 정의와 기본 특징  (0) 2019.09.04

    댓글