일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 괄호 검사 프로그램
- 프로그래머스 푸드 파이트 대회
- C언어 계산기 프로그램
- IPv4 주소체계
- r-value참조자
- const l-value참조자
- auto 키워드
- 논리 연산
- 회전 및 자리 이동 연산
- c언어 괄호검사
- 문제해결 단계
- 주기억장치
- const화
- 입출력 관리자
- 값/참조/주소에 의한 전달
- 프로그래머스 배열만들기4
- LAN의 분류
- 알고리즘 조건
- string유형
- getline()함수
- 원형 연결 구조 연결된 큐
- 문자형 배열
- 운영체제 기능
- C언어 덱
- 유형 변환
- 백준 파이썬
- 범위 기반 for문
- C언어 스택 연산
- 네트워크 결합
- l-value참조자
- Today
- Total
chyam
[unity]- 2d 탑다운 [ 대화창 UI 기본 구현, 폰트 저장 ] 본문
>UI 이미지 생성
source image에 원하는 사진을 끌여다 넣으면 된다.
그리고 원래 image type은 simple인데 sliced를 해준 이유는,
image의 크기를 늘리면 그림이 깨지기때문이다.
아래처럼 하는 방법은, sprite editor에 들어가서 설정해야한다.
미리 설정을 해뒀는데, Border부분에서 숫자를 건들이면 그림에서 초록색부분으로 뜬다. 초록색 바깥쪽으로는 픽셀이 깨지지 않는다. apply한 다음에 이미지에서 sliced로 바꿔주면된다.
그리고 캔버스에서 pixel perfect라는것을 체크해야한다.
이것을 하면 게임에서 스프라이트나 오브젝트의 움직임, 충돌 판정 등이 픽셀 단위로 정확하게 계산되고 처리되어 깔끔해진다.
대화창의 위치를 상대적으로 하기 위해서 anchor를 사용한다.
-저 위에있는 네모를 누르면저런 창이 뜬다. alt를 누르면 가운데 네모가 가에쪽으로간다.
shift까지 누르면 중심점도 같이 이동한다. 맨 오른쪽꺼는 끝까지 늘려준다.
left와 right는 여백으로 길이을 조절할수있다.
>폰트 설정하기 + 한글 가능하게 하기
1) window- TextMeshPro - Font Asset Creator 누르기
2) source font file에 원하는 폰트를 넣고
저기처럼 설정하고 save를 눌러서 Assets- Text Mesh Pro- Fonts 폴더에 저장한다.
-수정 : 이후에 다른 프로젝트에서 이렇게 하려니까 안돼서 알아보니
Charactor Set 을 Custom Range로 하고 32-126,44032-55203,12593-12643,8200-9900 로 설정하니 됐다.
3) 한글 폰트 적용을 하기위해서 폰트 파일을 누르고 inspector창을 보고 static을 dynamic을 눌러준다.
>대화창 만들기
image-text를 눌러 생성
아래를 표시하는거에서 set Native size를 하면 원본의 크기대로 이미지 사이즈를 맞출수있다.
애니메이션을 넣기 위해서 animation controller을 추가해주어야한다.
그리고 저 이미지에 animator를 추가하여 컨트롤러를 저기에 넣어준다.
저 커서가 움직이는 애니메이션을 만들기위해 animation도 추가해준다. 그리고 반복도 해야하므로 loop time을 켜준다.
animator에서 커서의 움직임을 표현해야한다.
anchor이 적용된 UI이기 때문에 anchored position을 선택한다.
이렇게하면 커서가 위아래로 왔다갔다한다.
>코드 구현
먼저 빈 오브젝트를 생성해서 GameManager로 이름짓고 스크립트도 만들어준다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
UI를 사용해야해서 UnityEngine.UI를 선언해주고, 텍스트도 변경해주어야해서 TMPro도 선언해준다.
public GameObject talkPanel;
public TextMeshProUGUI talkText;
public GameObject scanObject;
public bool isAction;
객체를 생성해준다.
public void Action(GameObject scanObj)
{
if (isAction)
isAction=false;
else
isAction = true;
scanObject = scanObj;
talkText.text= "이것의 이름은"+scanObject.name+"이라고 한다.";
talkPanel.SetActive(isAction);
}
isAction이 참이면 플레이어가 물체와 상호작용하는것이다.
거짓이면 물체와 상호작용이 끝난것이다.
scanObject를 scanObj으로 넣는다.
talkText의 text내용을 그 오브젝트의 이름을 넣어서 변경해준다.
그리고나서 isAction의 값에 따라 비활성화/활성화해준다.
----PlayerAction 수정----
1. 객체 선언에 public GameManager manager; 추가
2.
//Move Value
h = manager.isAction ?0: Input.GetAxisRaw("Horizontal");
v = manager.isAction ? 0 : Input.GetAxisRaw("Vertical");
//Check Button Down & up
bool hDown = manager.isAction ? false : Input.GetButtonDown("Horizontal");
bool vDown = manager.isAction ? false : Input.GetButtonDown("Vertical");
bool hUp = manager.isAction ? false : Input.GetButtonUp("Horizontal");
bool vUp = manager.isAction ? false : Input.GetButtonUp("Vertical");
isAction이 참이면 물체랑 상호작용하는것이므로 움직일수없어서 0의값을 가진다.
hDown부분에서도 isAction이 참이면 0의 값을 가진다.
//scan object
if (Input.GetButtonDown("Jump")&&scanObject!=null)
{
manager.Action(scanObject);
}
스페이스바를 누르면 manager에 있는 Action함수를 실행한다.
'unity' 카테고리의 다른 글
[unity]- 2d 탑다운 [ 퀘스트 ] (0) | 2024.07.03 |
---|---|
[unity]- 2d 탑다운 [ npc와 대화 + 초상화 ] (0) | 2024.07.02 |
[unity]- 2d 탑다운 [ rule tile, 이동, 물체랑 상호작용 ] (0) | 2024.07.01 |
[unity]- 2d 기초 [ rule tile ] (0) | 2024.06.30 |
[unity]- 2d 도트 기초 [ 스테이지 게임 완성 ] (0) | 2024.06.30 |