김김김의 게임개발
  • 유니티 게임개발 입문 #3
    2023년 09월 06일 21시 11분 45초에 업로드 된 글입니다.
    작성자: noun06

    [게더 클론 개인 프로젝트]

    캐릭터 색상 변경

    • 플레이어의 SpriteRenderer 컴포넌트에 접근하여 색상 변경.
    • 랜덤 색상 변경 및 기본 색상으로 초기화하는 메서드 생성.
    //Player.cs
    
    private SpriteRenderer _spriteRenderer;
    private Color originalColor;
    
    private void Awake()
        {
            playerName.text = playerNameStr;
            playerName2.text = playerNameStr;
    
            _rigidbody = GetComponent<Rigidbody2D>();
    
            _spriteRenderer = GetComponent<SpriteRenderer>();
            originalColor = _spriteRenderer.color;
        }
        
    public void ChangeColorRandom() //랜덤 색상 변경
        {
            Color randomColor = new Color(Random.value, Random.value, Random.value);
            _spriteRenderer.color = randomColor;
        }
    
    public void ResetColor() //기본 색상으로 변경
        {
            _spriteRenderer.color = originalColor;
        }

     

    채팅 시스템

    • 인풋 필드의 onEndEdit 이벤트에 SubmitMessage메서드를 추가하여 호출을 통해 메시지 전송.
    • AddMessage 메서드는 새로운 메시지를 현재 채팅창에 추가하는 역할 수행. 
    //Chat.cs
    
    using UnityEngine;
    using TMPro;
    using UnityEngine.UI;
    
    public class ChatSystem : MonoBehaviour
    {
        public TMP_Text chatText;
        public TMP_InputField messageInput;
    
        private void Start()
        {
            messageInput.onEndEdit.AddListener(SubmitMessage); // 엔터 키를 누르거나 입력을 마치면 SubmitMessage 메서드 호출.
        }
    
        private void SubmitMessage(string message) // 사용자가 입력한 메시지 전송.
        {
            if (!string.IsNullOrEmpty(message))
            {
                AddMessage(message);
                messageInput.text = ""; // 인풋필드를 비워 새 메시지 입력 가능하게 설정.
            }
        }
    
        private void AddMessage(string message) //새 메시지를 채팅 내용에 추가.
        {
            string currentText = chatText.text;
    
            // 현재 텍스트와 새 메시지를 연결
            string newMessage = currentText + "\n" + message;
    
            chatText.text = newMessage;
        }
    }

     

    대화 UI 개선

    • 단순하게 OnTrigger을 통해 구현하였지만 추후에 NPC 클래스를 새로 만들어 기능을 정확하게 구현할 계획.
    //ShowUI.cs
    
    using UnityEngine;
    
    public class ShowUI : MonoBehaviour
    {
        public GameObject bellUI;
    
        public GameObject talkUI;
    
        private void Start()
        {
            bellUI.SetActive(false);
            talkUI.SetActive(false);
        }
    
        private void Update()
        {
            if (talkUI.activeSelf)
            {
                bellUI.SetActive(false);
            }
        }
    
        private void OnTriggerStay2D(Collider2D other)
        {
            if (other.CompareTag("Player"))
            {
                bellUI.SetActive(true);
            }
        }
    
        private void OnTriggerExit2D(Collider2D other)
        {
            if (other.CompareTag("Player"))
            {
                bellUI.SetActive(false);
            }
        }
    
        public void ShowDialogue()
        {
            bellUI.SetActive(false);
            talkUI.SetActive(true);
        }
    
        public void EndDialogue()
        {
            talkUI.SetActive(false);
        }
    }

     

    애니메이션

    • 도트 스타일 리소스를 간단하게 제작하여 애니메이션화 작업 진행.

     

    결과물

    댓글