결과부터 보여드리자면 아래 사이트에 업로드해논 작품입니다! TrueOrTruth by JinwooLooking for sad memories of the pastkimjinwoo.itch.io 이번 게임잼 컨셉은 JAMAKERS, 맛있는 게임을 만들자 입니다GameMakers의 슬로건을 아시나요 ? ‘Thought becomes Reality’ 회원분들이 상상하시는 게임을 현실화 하는 것입니다. 슬로건에 맞게 JAMAKERS 게임잼 주제는 바로, ‘꿈과 현실’ 입니다. JamMakers의 일정은 위 사진과 같이 진행되었습니다.저는... 2일차 오후부터 참여할 수 밖에 없어가지고.. 팀원들에게 양해를 구하고 2일차 오후부터 참여했습니다. 팀 빌딩은 위와 같이 진행되었습니다. 모두 GameMakers 8..
where 키워드란? 제네릭 프로그래밍에서 중요한 역할을 하며, 제네릭 타입에 대한 제약 조건을 지정할 때 사용됩니다. where키워드를 사용함으로써 컴파일 타임에 타입의 특정 특성을 보장할 수 있게 해줍니다. 예를 들어, 특정 타입이 반드시 클래스여야 하거나 특정 인터페이스를 구현해야 한다는 등의 조건을 걸 수 있습니다.where 키워드 예시 형식 설명 예시 where T : class제네릭 타입 매개변수가 클래스여야 함where T : classwhere T : struct제네릭 타입 매개변수가 구조체여야 함where T : structwhere T : new()제네릭 타입 매개변수가 매개변수가 없는 기본 생성자를 가져야 함where T : new()where T : SomeBaseClass제..
접근 제어자 기호 설명 Public+클래스 외부에서도 접근 가능Private-클래스 내부에서만 접근 가능Protected#클래스 및 서브클래스에서 접근 가능Default (Package)~동일한 패키지 내에서만 접근 가능Static_클래스의 인스턴스가 아닌 클래스 자체에 속함
팩토리 패턴은 객체 생성을 담당하는 팩토리 클래스를 도입하여 객체 생성 로직을 캡슐화하는 디자인 패턴입니다. 팩토리 패턴을 사용하면 객체를 생성하는 코드를 분리하여 유연성을 높이고, 객체 생성 방식을 변경할 때 코드 수정을 최소화할 수 있습니다. 팩토리 패턴을 유니티에서 사용하는 경우, 다음과 같은 상황에서 유용합니다.동일한 객체를 반복적으로 생성해야 하는 경우객체 생성 로직을 단일 위치에 집중하여 코드를 관리하고자 하는 경우UML을 바탕으로 코드 작성해보기 제가 직접 짠거는 아니고 유니티 공식 자료에서 가져와봤습니다.저번시간에 UML 작성법을 공부했다고 저 화살표가 무엇을 의미하는지 알게 되어 뜻을 이해할 수 있게 되었습니다. Factory라는 클래스를 ConcreteFactory에서 상속을 받아 사..
여러분들은 코드를 작성하실 때 어떤 방식으로 시작하고, 끝을 맺으시나요? 저는 개발해야하는 순간이 다가오면 잠깐의 고민을 하고 바로 키보드를 두들기며 코드를 작성합니다.이 방식이 잘못되었다는 것은 아니지만, 저는 제 습관을 고치고 싶습니다. 코드를 작성하다보면 무엇을 짜고 있는지 가끔 방향을 잃을 때도 있고, 명확하지 못한 코드들이 남발하게 되며, 나중에 코드를 보게 됐을 때 기억이 나지 않는 등의 문제를 겪곤 합니다. 그래서 앞으로는 코드를 작성하기 전에 저만의 규칙을 만들어보고자 합니다. 사진의 모든 출처는 다음과 같습니다.출처 - https://velog.io/@ssuh0o0/%ED%97%B7%EA%B0%88%EB%A0%A4%EC%84%9C-%EC%A0%81%EC%96%B4%EB%86%93%EB%8..
디자인 패턴이란?디자인패턴이란 개발할 때 자주 발생하는 문제에 대한 해결책이자, 효율적이고 유연한 설계를 위한 가이드라인이라고 생각하면 됩니다. 과거 우리의 대선배님들이 직접 경험으로 쌓아온 노하우와 설계 원칙을 바탕으로 만들어졌다고 합니다. 디자인패턴은 특정 문제 상황에 대한 해결 방법을 제시하고, 재사용 가능한 형태로 만들어 설계에 적용할 수 있게 해줍니다. 이를 통해 유지보수성, 확장성, 재사용성을 향상시키고, 일관된 개발 방법론을 제공한다는 장점이 있습니다. 디자인 패턴은 보통 다음과 같은 구성 요소로 이루어져 있습니다.문제 (Problem): 디자인 패턴이 적용될 문제나 상황을 정의합니다.해결책 (Solution): 문제를 해결하기 위한 구체적인 설계 방법이나 패턴을 제시합니다.결과 (Conse..
OOP란?Object-Oriented Programming의 약자로 한글로 설명하면 객체 지향 프로그래밍이라는 뜻입니다.현실 세계의 객체를 모델링하여 소프트웨어를 개발하는 방법론입니다. 현실 세계의 객체라..?🤔객체라고 단어가 약간 이해하기 어려울 수 있습니다. 객체라는 것은 데이터와 기능을 하나의 단위로 묶은 것을 뜻합니다. 예를 들어, 김진우라는 객체가 있다고 가정하겠습니다. 김진우라는 객체는 이름은 김진우이며, 키 177, 25살, 남자라는 데이터를 가지고 있습니다.그리고 저는 밥 먹고, 걷고, 공부하는 등의 기능을 실행할 수 있습니다. 김진우라는 객체에서 데이터를 코드로 표현하면 다음과 같이 나타낼 수 있습니다.public class Person { public string Name { g..
제가 속해 있는 프로젝트 팀에는 Coda를 이용하여 프로젝트를 진행합니다.Coda에 문제점은 따로 Window앱이 없기 때문에, 항상 윈도우를 열고 진행해야 한다는 점입니다. 물론, 링크를 이용해서 파일을 만들어 바로가기 등 여러 방법으로 해결할 수 있긴 합니다만, 결국에 웹사이트가 열리면서 기존에 열려있던 윈도우 탭에 들어가서 따로 빼줘야 한다거나, 상단 북마크 등이 거슬리는 등 여러 문제가 있어 해결하기 위해서는 꽤 번거로움이 많습니다. 해당 문제들을 해결하기 위해 크롬을 이용해서 쉽게 윈도우 앱을 만드는 방법을 공유드리겠습니다.바로가기 만드는 방법 준비물은 당연히 크롬입니다. 크롬 외에는 해당 방법이 가능한지 모르겠습니다. 크롬 우측 상단에 [저장 및 공유] 탭을 누른 후 바로가기 만들기 버튼을 눌..
transform.GetSiblingIndex()란?transform.GetSiblingIndex()는 GameObject가 현재 계층 구조에서 몇 번째 위치(자식 순서)에 있는 반환해줍니다. 예를 들어, 게임 오브젝트들이 같은 부모 오브젝트 아래에 있는 경우, GetSiblingIndex()를 사용하여 해당 GameObject의 위치 순서(번호?)를 얻을 수 있습니다. GetSiblingIndex함수는 GameObject의 자식들을 정렬하는 경우에 유용합니다. 실제로 transform.GetSiblingIndex()를 사용해서 슬롯을 정렬하는 함수를 만들어봤습니다.int childIndex = transform.GetSiblingIndex();int row = childIndex / maxHorizo..
System.Obsolete란?System.Obsolete는 C#에서 제공하는 속성으로, 특정 메서드나 클래스가 더 이상 권장되지 않음을 나타내는 데 사용됩니다. System.Obsolete속성을 사용하면 해당 메서드나 클래스를 사용하는 코드가 컴파일될 때 경고 또는 오류를 생성합니다.System.Obsolete 속성은 다음과 같이 세 가지 형태로 사용할 수 있습니다.[Obsolete]: 매개변수를 사용하지 않으면 해당 메서드나 클래스를 사용하는 코드가 컴파일될 때 경고를 생성합니다.[Obsolete(string message)]: 더 이상 권장되지 않는 이유를 설명하는 메시지를 포함합니다.[Obsolete(string message, bool error)]: 불리언 값이 true로 설정되면, 해당 메서..
Scene Controller을 만들기 위해서는 Singleton과 UniTask를 사용해야 합니다. 아래 포스팅에서 '싱글톤'과 'UniTask' 사용방법을 참고해주세요. 두고두고 써먹는 싱글톤(SingleTon) 코드싱글톤 패턴이란? Unity 싱글톤 패턴은 특정 클래스가 게임 수명 기간 동안 하나의 인스턴스만 갖도록 하기 위해 Unity 게임 개발에서 일반적으로 사용되는 디자인 패턴입니다. 이 패턴은 게임 내wlsdn629.tistory.com 유니티 코루틴 대신 unitask유니티에서 unitask를 사용하기 앞서, 유니티에서 사용하는 코루틴이 무엇인지 알아야 진정한 unitask의 장점을 알 수 있습니다. 지피지기 백전불태 그렇기에 유니티에 기본적으로 내장되어 있는wlsdn629.tistor..
작업을 하다보면 하이러키창에 필요한 객체를 검색하는 경우가 종종 발생합니다.때로는 특정 컴포넌트를 가지고 있는 객체들만 필터링해서 찾고 싶은 경우가 있습니다. 이런 경우에 유용하게 사용할 수 있는 꿀팁을 알려드리겠습니다. 하이러키창의 검색란 우측에 보면 확장버튼같은게 보입니다. 그 버튼을 눌러주면 우측 사진과 같은 윈도우 창이 뜹니다. Serach 아래에 toggle버튼을 누른 후 우측 + 버튼을 눌러주고, 찾고자 하는 컴포넌트를 검색해줍니다.그럼 우측 사진처럼 씬에 해당 컴포넌트를 사용하고 있는 객체를 알려줍니다.
유니티 하프라이프 알릭스 Distance Grab, XR Interaction Toolkitusing UnityEngine; using UnityEngine.XR.Interaction.Toolkit; public class HalfLifeDistanceGrab : XRGrabInteractable { public float VelocityThreshold = 2f; public float JumpAngleInDegree = 60f; private XRRayInteractor m_XrRayInteractor; private Vector3 prevwlsdn629.tistory.com예전에 하프라이프 그랩 기능을 만들어 본적이 있습니다.Hurricane VR에는 해당 기능이 구현되어 있어서 쉽게 해당 기능을 ..
핵심 2가지HurricaneVR 에셋을 사용하기 위해서는 Scene에 반드시 2가지가 존재해야 합니다.XR Rigs : HurricaneVR에셋에는 이미 제작된 두 개의 XR Rig가 포함되어 있습니다. (XR Rig 위치: /HurricaneVR/TechDemo/Prefabs/)TechDemoXRRig: Oculus / SteamVR 플러그인과 함께 사용할 때 사용하는 Rig입니다.TechDemoXRRigOpenXR: OpenXR 플러그인과 함께 사용할 때 사용하는 Rig입니다.HVRGlobal : 프레임워크가 기능을 수행하는 데 필요한 여러 컴포넌트가 포함되어 있습니다. 예를 들어, Input Manager, Time Manager 등의 역할을 수행합니다. XR Rigs과 HVRGlobal이 포함된..
유니티 원하는 씬으로 실행되게 하기이 포스팅에서 사용된 코드는 아래 블로거분의 코드를 참고하였습니다! https://mentum.tistory.com/657 unity 언제나 특정 씬에서 시작하게 만들기 #. 특정 씬에서 시작하는 게임 환경 어느 씬 에서나 테wlsdn629.tistory.com 예전에 원하는 씬으로 자동 플레이 되는 에디터 스크립트 코드를 작성해본적 있습니다.문제는 지금 보고 있는 씬이 실행되길 원하는데 자동으로 지정한 씬으로 플레이 되기 때문에 불편함이 있다는 것입니다. 그래서 버튼으로 현재 씬을 플레이할 지, 아니면 지정한 씬을 플레이할 지 선택할 수 있게 만들어 봤습니다. using UnityEditor;using UnityEditor.SceneManagement;using Un..
URP에도 샘플이 존재합니다. 샘플 수가 적은 편이 아니고 꽤 되는 편입니다.Rendering Pipeline공부하시는 사람이라면 반드시 샘플 먼저 공부하시면 도움이 될 것 같습니다. 예전에 지나가면 길이 움푹 파이는 효과를 구현해보고 싶었는데 URP 샘플에 있어서 공부할 수 있었습니다.
Normal From Height Node는 들어오는 Height 값을 사용하여 대략적인 Normal을 생성합니다.좌측 Gradient Noise Node를 보면 0과 1의 값으로 이루어져 있으며, 이 값으로 Height 값을 결정하는 것 같습니다. 0이면 높이가 낮고, 1이면 높이가 큰? Normal From Height Node를 처리하는 과정은 단지 Height Input만을 사용하기 때문에 Normal From Texture 노드와 같이 3개 이상의 텍스처 샘플을 사용하는 것보다 더 저렴한 방법으로 Bump Mapping 작업을 수행합니다. 그러나, 필터링이 없기 때문에 결과는 매우 저품질이며 픽셀화된 외관을 가질 수 있다는 단점이 있습니다. The Basic에 대한 설명입니다.The Basic에..
using UnityEngine;using System.Collections;[RequireComponent(typeof(Collider))]public class Door : MonoBehaviour { public enum rotOrient { Y_Axis_Up, Z_Axis_Up, X_Axis_Up } public enum rotFixAxis { Y, Z } public rotOrient rotationOrientation; public bool applyRotationFix = false; public rotFixAxis rotationAxisFix; public float doorOpenAngle = -90.0f; [Range(1,5)] public float speed = 3.0f;..
using UnityEngine;using UnityEditor;public class ResetPlayerPrefs : MonoBehaviour{ [MenuItem("Window/PlayerPrefs 초기화")] private static void ResetPrefs() { PlayerPrefs.DeleteAll(); Debug.Log("PlayerPrefs has been reset."); }} 유니티 에디터 상단에서 버튼을 통해 PlayerPrefs 데이터를 초기화하는 코드입니다. 코드는 에디터 폴더에 만드셔야 합니다.코드를 만들고 나면 위 사진처럼 윈도우 탭에서 PlayerPrefs 데이터를 초기화할 수 있게 됩니다.
디자인 패턴을 무턱대고 사용하지 맙시다! 본인이 사용하고 있는 코드(디자인) 패턴이 무엇인지는 제대로 알고 사용하고, 디자인 패턴의 본연의 의미를 잃어버리지 맙시다!State Pattern이란? State Pattern은 객체의 상태를 캡슐화하여 해당 상태에 따라 객체의 행동을 내부에서 자동으로 변경하는 디자인 패턴입니다. 유니티 설치과정을 예시로 말해보겠습니다. 우리가 유니티를 설치할 때 내부에서 어떻게 설치되는지 알아야 하는 이유가 있을까요? 저희는 그저 Next 버튼을 클릭하기만 하면 됩니다. Next 버튼을 누르면 내부에서 알아서 설치가 되고, 설치가 마무리되면 프로그램은 저희에게 또다시 Next 버튼을 누르라고 합니다. 그 과정이 끝나면 프로그램은 Finish 버튼을 누르라고 저희에게 알립..