분류 전체보기 12

[백준 2164] 카드2 (C++)

먼저 규칙을 찾아보자. NResultNResult11922210432......4415145216166417276......88332규칙을 알아차리는 게 좀 늦어서 1~17까지는 직접 그려서 결과를 찾았다....ㅎ 규칙$N else$Result$는 첫째 항이 2이고 공차가 2인 등차수열이다. (단, $Result else: 등차수열을 다시 시작한다.위와 같은 규칙으로 수열을 만들면 아래와 같다. 1, 2 || 2, 4 || 2, 4, 6, 8 || 2, 4, 6, 8, 10, 12, 14, 16 || 2, ... , 32 || ...(앞의 예외를 제외하면) 수열이 만들어지는 숫자는 2, 4, 8, 16, ... 순으로 늘어난다. 이는 첫째 항이 2이고 공비가 2인 등비수열과 같다.이제 규칙을 ..

unhandled exception: exception_access_violation

이득우의 언리얼 C++ 게임 개발의 정석 Chapter 12. AI 컨트롤러와 비헤이비어 트리를 실습하던 중,delegate에서 이런 에러가 발생했다.Unhandled Exception: EXCEPTION_ACCESS_VIOLATION reading address 0x0000000000000008 UnrealEditor_CoreUObject!UGCObjectReferencer::VerifyGCObjectNames() [D:\build\++UE5\Sync\Engine\Source\Runtime\CoreUObject\Private\Misc\GCObjectReferencer.cpp:203] UnrealEditor_CoreUObject!TBaseUObjectMethodDelegateInstance::Execut..

[Unity/C#] 상속과 클래스 구조

상속을 예전에 공부만 해두고 잘 활용하지 않았기 때문에 의문점이 생겼다. 더보기 1. PlayerBase를 상속하는 StagePlayer를 GameManager에서 PlayerBase 변수로 받아도 StagePlayer에서 Override한 기능이 제대로 작동하는가? 2. StagePlayer에서 override하지 않은 기능도 제 때에 같은 기능으로 수행하는가? 3. PlayerBase의 기능을 override할 때 StagePlayer와 TutorialPlayer에서 Base의 기능 수행 시점을 조절할 수 있는가? 이에 대한 답을 모르는 채로 무작정 게임에서 이 디자인을 적용하고자 하면 기능이 많이 꼬일 수도 있을 것 같아 샘플 프로젝트에서 간단히 테스트해보았다. Player에는 PlayerBase를..

SW Programming/C# 2023.03.29

[Unity] MonoBehaviour Flow

📌 Base Awake() 제일 먼저, 1회만 호출됨 GameObject가 SetActive(true)일 때 호출됨 🌟 해당 Component가 disable되어있을 때도 호출되므로 유의할 것! OnEnable() GameObject가 SetActive(true)될 때마다 반복적으로 호출됨 해당 스크립트에 사용되는 값을 특정 값으로 리셋하거나 이벤트를 연결할 때 주로 쓰임 Start() GameObject와 해당 Component가 둘다 켜져있을 때 1회만 호출됨 Update() Frame 단위로 불규칙적으로 호출됨 가장 빈번히 사용되며, 규칙적인 움직임을 위해서 흔히 Time.deltaTime을 같이 사용함 Time.deltaTime: 현재 frame과 이전 frame 사이의 시간(직전 frame이 완..

배열과 리스트

배열과 리스트 공통점: 동일한 데이터를 하나로 묶을 수 있는 자료형 (Type-Safe) 차이점 배열 Array: 동적 크기 할당 불가능, 연속된 메모리 공간으로 이루어짐 -> 메모리 관리 용이 리스트 List: 동적 크기 할당 가능, 포인터를 사용해 데이터들의 주소값을 가지고 있음 -> 메모리 측면에서는 비효율적 (∵ 불필요한 메모리 추가 사용) [▲ 배열과 리스트의 메모리 공간 사용 차이] ArrayList 배열과 리스트의 중간 형태라고 볼 수 있는 자료형. 동일하지 않은 데이터들도 묶을 수 있으나, 데이터를 꺼낼 때마다 박싱과 언박싱이 이루어져 비효율적! -> List는 ArrayList를 보완한 자료형이라고 볼 수 있음. 게임에 쓴다면 무엇을 어디에 쓸까? 배열은 인벤토리에, 리스트는 퀘스트 목록..

SW Programming/C# 2022.07.04

유니티와 C#의 관계

유니티와 C#의 관계 유니티는 C#을 기본적으로 지원하는 스크립팅에 표준 Mono 런타임 구현과 유니티 게임 엔진만을 위한 여러 기능과 클래스(SceneManager, Renderers, Vectors, Rigidbody, etc.)들을 사용한다. 유니티에서는 코딩 없이 엔진만으로 게임 오브젝트를 생성할 수 있으며, 그 위에 여러 컴포넌트를 붙여 기능을 수행하게 한다. 또한 컴포넌트의 public 값은 게임 엔진 내에서 플레이 중에도 자유자재로 바꿀 수 있다. 이는 블록코딩과 유사한 형태로 게임 개발을 더 쉽게 만들어준다. 유니티를 이용하는 개발자들이 C#으로 스크립팅을 하긴 하지만 컴포넌트와 게임 오브젝트는 C++ 사용이 많은 오브젝트이므로, 개발자들이 작업하기엔 간편하지만 체계적이지 않은 방식으로 저..

게임 엔진/Unity 2022.07.04

퀵셀 메가스캔

[러셀과 함께하는 시작해요 언리얼] 2주차: 퀵셀 메가스캔 사용하기 퀵셀 세계 최대 규모의 사진 측량 에셋 라이브러리 및 번들 소프트웨어를 개발 · 제공하는 회사. 메가스캔, 퀵셀 브릿지, 믹서 등 메가스캔 에코스캔 제품군을 언리얼 사용자에게 무료로 제공하고 있다. 퀵셀 메가스캔: 3D_Assets 처음 퀵셀 브릿지에 접근했다면 퀵셀 브릿지에서 에픽게임즈 아이디로 로그인 해야한다. 퀵셀 브릿지의 에셋들은 임시 위치에 데이터를 저장한 것을 사용하고자 하는 것들만 언리얼 엔진의 컨텐츠 브라우저에 끌어오는데, 최고등급 퀄리티(나나이트)로 진행할 때에는 용량이 매우 크기 때문에 외장하드와 같은 보조 저장장치에 저장할 것을 권한다. ( 📌 러셀님이 추천하신 여유 공간 크기는 30기가! ) 데이터가 저장되는 장소는..

언리얼 엔진 첫 사용: 가정집 만들기

최근 언리얼 엔진을 사용하기 위해 그 준비단계로 같은 학교 후배들과 C++ 스터디를 하고 있다. 그러다 언리얼 엔진으로 메이플스토리를 만드셔서 재밌게 봤던 러셀님이 (그래픽에 치중한 것이긴 하지만) 강의를 무료로 진행하신다고 하길래 신청해보았다. [1주차: 언리얼 엔진 시작하기]는 6월 2일에 진행되었고, 아래와 같은 내용을 배웠다. UE5 에디터 UI소개 템플릿 프로젝트 생성 및 플레이하기 간단한 레벨 구성하기 캐릭터 속성 조절해 보기 유니티에서 사용해 본 개념도 많았고, 생소한 개념도 많았다. 유니티에서 사용해봤지만 이름이 다른 것도 있었다. 예를 들어 유니티에서는 '게임 오브젝트'라고 불리는 것들이 언리얼에서는 '엑터'라고 불리는 식이다. [유니티-언리얼 사이의 차이가 잘 정리된 공식 문서]: 여기..

[C#] 클래스와 구조체

구조체와 클래스 구조체 Struct 형이 다른 여러 데이터들을 하나로 통합해 관리할 수 있는 값형 데이터. 클래스와 거의 비슷하게 필드와 메소드를 가질 수 있다. 클래스와 비슷하지만, 메모리 공간에 대한 구조가 다르다. -> 객체가 스택에 할당됨 가용 메모리 크기가 작다. GC(Garbage Collector)에 의해 관리되지 않아, 성능상 이점이 있다. : 구조체는 함수가 종료될 때 자동으로 메모리가 정리됨! new연산자 없이도 인스턴스화 가능 객체를 전달할 때: 원본의 내용을 복사한 새로운 객체를 생성하여 전달! -> 자신의 크기만큼 스택 공간을 새로이 할당하므로, 크기가 클수록 메모리 사용량이 늘어남 여기서 생성된 구조체 객체는 함수가 종료되면 자동으로 메모리에서 해제됨! 다른 구조체, 클래스를 상..

SW Programming/C# 2022.06.01

[C#] 상속과 다형성

상속 다른 클래스의 멤버를 이어받는 기능으로, 기본 클래스와 파생클래스가 1:N의 관계를 갖는다. 파생클래스의 객체는 기본 클래스의 private을 제외한 멤버를 사용할 수 있다. 기본 클래스(부모 클래스): 상속하는 바탕이 되는 클래스 파생 클래스(자식 클래스): 상속하여 만든 클래스 sealed: 다른 클래스에서 상속 불가능하도록 하는 키워드. virtual메서드를 override한 메소드에도 지정 가능 base : 상속 원본에 인수를 전달하는 키워드 -> 기본 클래스의 인수가 있는 생성자를 호출 base 사용하지 않으면: 상속 원본의 인수가 없는 생성자 호출 이름의 은폐가 일어날 때, 은폐된 기본 클래스 멤버를 파생 클래스 안에서 사용할 때에도 이용 -> base.a: 기본클래스 필드의 a usin..

SW Programming/C# 2022.06.01