본문 바로가기

728x90

Unity

(38)
[Unity] RotateAround()를 이용한 빙글빙글 돌기 RotateAround()라는 함수를 사용하여 빙글빙글 도는 움직임을 만들어보겠습니다. Transform.RotateAround(Vector3 point, Vector3 axis, float angle) point = 기준점 axis = 움직이는 방향(대략적인 설명이다.) angle = 움직이는 속도 movement = 움직이는 방향에 대한 정보를 저장하는 변수이다. moveSpeed = 움직이는 속도에 대한 정보를 저장하는 변수이다. Update()는 OnMove() 함수를 호출한다. FixedUpdate()는 transform.RoateAround(Vector3.zero, Vector3.back, movement * Time.fixedDeltaTime * moveSpeed);를 사용하여 (0,0,0)..
[Unity] Quaternion.AngleAxis()를 이용한 플레이어가 마우스로 바라보면서 따라가는 법 Quaternion.AngleAxis()는 축 axis 주위를 angle만큼 회전한 rotation을 생성한다. moveSpeed = 이동속도를 저장한 변수이다. turnSpeed = 회전하는 속도를 저장한 변수이다. Awake() 함수를 통해 rigid를 초기화해준다. Update() OnRotateAndMove() 함수를 실행시켜준다. mousePos에 마우스 좌표를 넣어준다. 그리고 target에 mousePos - transform.position을 해서 target 방향을 얻는다. 그리고 Mathf.Atan2를 이용하여 tan(y/x) 각도를 구하는데 이 값은 라디안이기 때문에 Mathf.Rad2Deg를 사용하여 각도로 변경해준다. 그리고 -90도 또는 +270도를 해준다.(이렇게 안 해주면 정..
[Unity] A* 알고리즘 2d 길찾기 설명 2d 로그라이크 게임을 제작 중 최적의 길을 찾는 방법에 대하여 검색하다가 A* 알고리즘을 알게 되었다. 기본적으로 A* 알고리즘에는 시작 지점과 끝 지점을 알고 있다는 전제하에 실행이 된다. 그리고 A* 알고리즘에는 G, H, F, neighborNode, OpenList, ClosedList, FinalList라는 단어들을 기본적으로 알아야 한다. G = 이동했던 거리를 저장한다. H = 현재 노드를 기준으로 장애물을 무시한 가로 세로 최단 거리를 저장한다. F = G + H 값을 저장한다. neighborNode = 기준 타일에서 갈 수 있는 타일들을 neighborNode이라고 한다. OpenList = 검색대상들을 집어넣는 리스트 ClosedList = 검색을 마친 노드들을 집어놓는 리스트 Fi..
[Unity] Camera를 이용한 게임 화면 크기 구하기 Camera는 플레이어가 보는 화면을 구성하는 장치이다. xScreenHalfSize 스크린의 x좌표 가운데의 크기를 저장할 변수이다. yScreenHalfSize 스크린의 y좌표 가운데의 크기를 저장할 변수이다. orthograorthographicSize는 오쏘그래픽 모드일 때 카메라 수직 크기의 절반을 리턴해주는 함수이다. 따라서 이 값을 받아와 그대로 yScreenHalfSize에 넣어주면 된다. xScreenHalfSize의 값은 yScreenHalfSize에 메인 카메라의 비율을 곱해주는 것으로 구할 수 있다. 전체 크기를 구하고 싶다면 xScreenHalfSize, yScreenHalfSize에 2를 곱해주어서 구할 수 있다.
[Unity] TouchPhase를 사용한 모바일 터치를 사용한 플레이어 움직이기 사용하는 환경에 따라 플레이어를 움직이게 하는 방법은 많다. 그 중에서 모바일 화면 터치로 플레이어를 움직이게 하는 방법에 대해 설명하겠다. 우선 TouchPhase는 터치 입력을 5가지 단계로 나타내준다. 다음은 5가지 상태에 관한 설명은 유니티 메뉴얼에서 가져온 것이다. Began 화면에 터치가 시작된 상태를 나타냅니다. Moved 손가락 터치가 화면에서 움직인 경우를 나타냅니다. Stationary 터치를 했지만 움직이지 않은 상태를 나타냅니다. Ended 사용자가 화면에서 손가락을 뗀 경우를 나타냅니다. 터치의 마지막 단계를 나타냅니다. Canceled 사용자가 자신의 얼굴에 장치를 가져간 경우 또는 5개의 터치가 동시에 이루어진 경우에 시스템이 터치의 추적을 취소합니다. 터치의 마지막 단계를 나..
[Unity] RaycastHit2D, Invoke()를 사용한 생각하는 적 만들기 Invoke()는 지정된 시간만큼 해당 함수 시작 시간을 지연시켜주는 함수이다. CancelInvoke() 해당 함수의 Invoke를 중지시킨다. nextMove는 다음 움직임을 표현하면서 애니메이터의 애니메이션을 정해주는 변수이다. sprite는 적이 움직일 때 바라보는 방향을 바꿔주기 위해서 선언한 것이다. rigid는 적을 움직이게 하기 위해 선언한 것이다. anim은 적이 움직일 때 애니메이션을 바꿔주기 위해서 선언한 것이다. rigid, anim, sprite는 모두 초기화를 위해 작성되었다. Invoke("Move", 1f)는 적이 생성된 후에 Move라는 이름을 가진 함수를 1초 뒤에 실행시키라는 것을 나타낸다. Think 함수를 실행시켜준다. 적의 이동 속도를 nextMove만큼으로 선언해..
[Unity] 오브젝트에 능력 넣어주기 플레이어가 Object 태그가 걸려있는 오브젝트와 충돌을 하면 오브젝트의 이름을 가져와서 오브젝트에 있는 효과를 Debug로 콘솔창에 띄워준다. 그리고 마지막으로 해당 오브젝트를 비활성화 해준다.
[Unity] Prefab을 이용한 랜덤 뽑기 InstanInstantiate() 함수를 통해서 지정된 위치에 랜덤으로 오브젝트들을 뽑아주는 것을 만들 것이다. 랜덤으로 뽑아줄 오브젝트들을 배열로 입력받는다. 정수형 변수 random에 0~9까지의 임의의 정수를 넣어준다. 그리고 switch~case문을 사용하여 40% 확률로 objects[0]을 소환하고, 30% 확률로 objects[1]을 소환하고, 20% 확률로 objects[2]를 소환하고 마지막으로 10% 확률로 objects[3]을 소환한다. 아래 코드는 박스 스크립트에서 작성한 코드이다. 플레이어가 ChangeSprite함수를 불러올 때 RandomDraw 함수를 실행시켜주는 것을 추가해준 코드이다. 그리고 if(!isChange) 조건을 추가해준 이유는 여러 번 소환되는 것을 방지하기..

728x90