유니티 10

[유니티] Behaviour Tree 개념 정리

상태Running : 노드 검사 진행중Success : 조건을 만족하여 노드 실행 성공Failure : 조건을 만족하지 못하여 노드 실행 실패 노드Composite Node : 합성 노드. 하나 이상의 자식을 가지는 부모 노드. 자식의 상태 결과에 따라 실행 성공과 실패 여부가 결정된다. 자식 노드는 순차적으로 실행되며 한 노드의 검사가 끝나기 전까지 다른 노드는 실행되지 않는다. - Sequence node: 말그대로 자식 노드의 연속적인 실행이 목적인 노드. 자식 모두 성공 시 성공 처리.- Selector node: 자식 중 선택된 하나의 노드 성공이 목적인 노드. 자식 중 하나가 성공 시 다음 노드로 이어가지 않고 바로 성공 처리 Decorator Node: 자식 노드의 반환 값을 바꾸거나 동작을..

유니티 2024.12.13

[Photon 정리] Pun 기능 개요 및 인스턴스 생성. 보스 동기화, 내가 가한 데미지만 표시하는 방법

기능 개요 PhotonNetwork 파일 안에는 필요한 모든 함수와 변수들 있음. Photon 연결PhotonNetwork.ConnectUsingSettings("v1.0") 게임 생성 및 참가PhotonNetwork.JoinRoom(roomName); // 방 참가PhotonNetwork.CreatRoom(roomName); // 방 생성PhotonNetwork.JoinRandomRoom(); // 방 무작위 생성  Photon.PunBehaviour 상속을 통한 콜백 오버라이드public override void OnJoinedRoom() // 콜백 오버라이드{ Debug.Log("OnJoinedRoom() called by PUN: " + PhotonNetwork.room.na..

유니티/포톤 2024.11.26

터렛 업그레이드 시스템 구현

구상터렛 업그레이드 기능을 추가하려 한다. 일단 StatusManager에 이벤트를 만들어서 버튼을 눌렀을 때 이벤트가 발생하도록 해놓았다. 처음에는 적을 만들 때와 같이 터렛의 프리팹에 업글 UI를 추가하려했으나, 인게임에 송출되었을 때 두 가지 문제점이 발생하였다.   1. UI가 화질이 깨지고 희미하게 보인다. 2. 터렛이 화면 가운데에 있을 때는 터렛의 바로 위에 UI가 뜨지만, 사이드에 있을 때는 터렛의 바로 위보다 살짝 옆에 있는 것 처럼 보인다.   1과 2의 이유는 동일하다.프리팹 안에 캔버스가 있다는 것. 그래서 눙물을 머금고 (코드가 복잡해진다는 것을 알기에...) UI를 화면에 동적으로 띄우기로 했다. 하나의 슬라이더를 선택한 오브젝트의 위로 이동시킬지, 아니면 풀링으로 여러 개 만들..

유니티 2024.08.30

[멋쟁이사자처럼 유니티 TIL] UI 슬라이더, 체력바 구현 (+ 델리게이트(delegate), 이벤트)

슬라이더 ● 생성 방법Hierarchy 에서 마우스 오른쪽 클릭  → UI → Slider 를 클릭  ● 구성 요소 슬라이더를 생성하면 자식 개체 여러 개가 함께 생성된다. - Background : 슬라이더를 비활성화 시켰을 때의 이미지. 슬라이더의 배경. - Fill Area : 슬라이더를 활성화 시켰을 때의 이미지. Background를 채우는 이미지. - Handle Slide Area : 슬라이더의 손잡이. 슬라이더를 마우스로 직접 작동시킬 때 필요한 버튼.  ● 구현 예시 이동 속도를 조절하는 바를 만들어보자 ① Slider를 생성한다. 이때 자동으로 Canvas도 함께 생성된다. ② 원하는 위치로 앵커를 설정한다. 본인의 경우 하단 가운데에 위치하도록 center의 bottom으로 지정하였다..

유니티 2024.06.11

[유니티 이론] 중요한 기능!! Deltatime 정의 및 사용법

세상에는 롤, 아크, 에펙스를 최고 사양으로 돌려도 잘 돌아가는 컴퓨터가 있으며, 메이플도 안되는 개쓰뤠기(본인이 이에 포함된다면 죄송합니다) 컴이 있다. 여기 60fps와 10fps 컴이 있다고 가정하자. (각각 1초에 60,10 프레임 씩) 만약 이 두 컴퓨터로 카트라이더를 한다면 항상 60fps 쪽이 승리할 것 이다. 만약 1프레임에 1m를 간다고 가정하면, 각각 1초에 60m, 10m를 가는 것이다. 당연히 10fps 컴은 쭈구리가 되는 것이다. 이러한 불리한 상황을 방지하기 위해 쓰는 것이 deltaTime 이다. | deltaTime 이란? Time.deltaTime: 전 프레임이 완료되기까지 걸린 시간 이를 이동거리에 곱하면 된다. 이동거리 * Time.deltaTime 을 예시에 적용하면,..

유니티 2024.01.23

[유니티 기초] 버튼 입력 방식으로 물체 이동하기 - GetButton, Transform

저번 강의에 글에 이어 이번에는 버튼 입력 방식을 알아보자 | 버튼 방식 Edit ▶Project Settings ▶InputManager 에 들어가면 유니티에서 기본적으로 설정되어 있는 버튼들을 볼 수 있다. 이런 버튼들을 사용할 수 있게끔 하는 함수가 GetButton 이다. GetButton: Input 버튼 입력을 받으면 true 반환 if (Input.GetButton("Jump")) Debug.Log("점프 모으는 중..."); if (Input.GetButtonUp("Jump")) Debug.Log("슈퍼 점프!!!"); if (Input.GetButton("Fire1")) Debug.Log("불을 쏘았습니다."); 내가 원하는 입력을 InputManager에 지정하고 싶을 경우, Axies..

유니티 2024.01.23

[유니티 기초] Input 으로 키보드, 마우스 입력 기능 넣기

Input: 게임 내의 입력을 관리하는 클래스 Input은 클래스이다. 그러므로 점을 이용하여 Input의 함수를 부를 수 있다 ex) Input.함수 함수를 알아보자 | 입력 방식 유니티의 입력 방식은 총 3가지 Down: 누름 Stay: 누른 상태 Up: 뗌 예를 들어, 엔터 키를 눌러 들어가면 Down 적용. 엔터 키를 계속 누르고 있으면 Stay 적용. 손을 떼 엔터 키가 나오면 Up 적용. | 키보드 입력 anyKeyDown: 아무 키 입력을 최초로 받을 시 true 값 반환 anyKey: 아무 키 입력을 받을 시 true 값 반환 void Update(){ if (Input.anyKeyDown) Debug.Log("아무 키를 눌렀습니다."); if (Input.anyKey) Debug.Log(..

유니티 2024.01.21

[유니티 기초] 오브젝트 라이프 사이클

유니티의 기본적인 오브젝트 라이프 사이클 초기화→물리연산→게임로직→해체 1. 초기화 Awake(): 게임 오브젝트 생성시 최초 실행 Start(): 업데이트 시작 직전, 최초 실행 2. 물리 연산 FixedUpdate(): 물리 연산을 하기 전에 실행되는 업데이트 함수. 1초에 50분 꾸준히 호출 => CPU 부하 많음 주로 이동 기능에 사용 3. 게임 로직 Update(): 게임 로직 업데이트. 환경에 따라 실행 주기 바뀜 주로 주기적으로 변하는 로직을 넣을 때 사용 LateUpdate(): 모든 업데이트가 끝난 뒤 마지막으로 실행. 주로 캐릭터를 따라가는 카메라나 후처리 등에 사용 4. 해체 OnDestroy(): 게임 오브젝트가 삭제될 때 실행. 활성화와 비활성화 1. 활성화 OnEnable(): ..

유니티 2024.01.21

[유니티] 레벨 만들기 - Snap Increment

Cube를 이어붙여 땅을 만들려 했는데, 직접 붙이려니 딱 맞는지도 모르겠고 여간 노가다가 아니다 그래서 영상을 보니 edit에 들어가 snap setting에서 무언가를 설정하면 쉽게 가능하였다 그러나 내 화면에는 snap setting이 보이지 않았다 아마도 Unity 2022 이전 버전에만 있었나보다 그리하여 이와 똑같은 기능을 가진 Snap Increment 의 위치와 사용방법을 알아보았다 | 위치 Scene의 상하좌우 중 한 곳에 달라붙어 있는 버튼들 중 좌표그림 2개와 선들이 좍좍 그어져 있는 버튼이 있다 여기서 가장 오른쪽에 있는 선 좍좍 버튼이 Snap Increment 버튼이다 | 사용법 이 버튼을 누르면 Move, Rotate, Scale이 뜬다 Move: 객체를 이동시킬 거리 조정 R..

유니티 2024.01.09

[C#, 유니티] 게임 개발 - [SerializeField]와 [System.Serializable] 차이점

Unity에서 많이 쓰던데 왜 쓰는 걸까? 요약 어트리부트(Attribute) 기능 SerializeField private로 선언된 변수를 인스펙터에 노출시킴 System.Serializable MonoBehaviour 이외의 클래스 멤버들을 인스펙터에 노출시킴 ↓↓ 자세한 내용이 알고 싶으면 내려가기↓↓ 1. SerializeField 유니티에서 SerializeField는 private 필드의 직렬화를 위해 이용된다. 직렬화란? 객체가 메모리에 보존되지 않아도 저장이나 전송을 할 수 있게 만드는 것. 원래는 public을 이용하여 직렬화가 가능하도록 하며 인스펙터에서 특정 변수의 값을 변경할 수 있게 한다. 그러나 필요에 의해 private 필드를 써야할 경우, [SerializeField]를 작성..

유니티 2024.01.06