본문 바로가기

728x90

게임 개발/유니티

(7)
[유니티] 씬 재로딩 후 Action 변수의 target null 문제 아래와 같이 정적 클래스에 Action 참조 변수를 만들어놓고 public class MethodManager { public static event System.Action SomeThing; public static void DoSomeThing() { SomeThing(); } } 아래와 같이 다른 클래스에서 함수를 등록하여 사용하려고 합니다. public class GameControll : MonoBehaviour { void Start() { MethodManager.SomeThing += Controll1; } void Controll1() { // do controll1 } } 이제 다른 클래스에서 언제든지 MethodManager.DoSometing(); 을 호출하면 GameControl..
[유니티] Input.GetKey() 한글로 입력해도 동작하게 하고 싶다면 - 예를 들어 키보드 wasd 로 캐릭터나 카메라를 이동해야하는 경우 Input.GetKey(KeyCode.W)) { MoveUp(); } 위와 같이 사용하면 영어일때만 동작하고 한글일 때는 동작하지 않습니다. switch (Input.inputString) { case "W": MoveUp(); break; } 이렇게 사용하면 부드럽게 실행되지 않고 뚝뚝 끊겨서 사용됩니다. - 이 방법 저 방법 찾아보다가 의외로 간단하게 해결되었는데, Edit > Project Setting... > Input Manager 에서 Use Physical Keys 를 사용하면 됩니다. 밑에 있는 설명을 보니 물리적 키를 사용하면 키보드 언어 레이아웃에서 키 코드를 물리적 키트에 독립적으로 매핑할 수 있다. 예를 들어 키..
[유니티/셰이더] 순차적 체커보드 패턴 Procedural checkerboard pattern # 순차적 체커보드 패턴 메시의 텍스처 좌표에 기반한 체커보드 패턴을 출력하는 셰이더입니다. Shader "Unlit/Checkerboard" { Properties { // 체커보드의 밀도를 결정합니다. _Density ("Density", Range(2,50)) = 30 } SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct v2f { float2 uv : TEXCOORD0; float4 vertex : SV_POSITION; }; float _Density; v2f vert (float4 pos : POSITION, float2 uv : TEXCOORD0) { v2f ..
[유니티/셰이더] 커스텀 셰이더 기초 # 준비 기본적인 머테리얼을 생성합니다. Unlit Shader를 생성합니다. 이것은 조명없이 텍스처만 표시하는 간단한 셰이더입니다. 유니티의 에셋스토어에서 무료로 제공하는 Space Robot Kyle 에셋을 임포트합니다. # 간단한 Unlit Shader 기본적인 언릿 셰이더를 생성하고 더 단순화한 뒤 코멘트를 붙였습니다. Shader "Unlit/NewUnlitShader" { Properties { // 인스펙터에 타일링/오프셋 설정이 보이지 않습니다. [NoScaleOffset] _MainTex("Texture", 2D) = "white" {} } SubShader { Pass { CGPROGRAM #pragma vertex vert // 버텍스 셰이더는 vert #pragma fragment ..
[유니티] Photon Fusion 103 간단 요약 # Photon Fusion 103 Photon Fusion 103은 Photon 홈페이지의 기술문서에 있는 Fusion 튜토리얼 중 한 단계를 말합니다. # FixedUpdateNetwork 로컬 물리 시뮬레이션에서 MonoBehaviour의 FixedUpdate() 역할을 하는 것이 네트워크 물리 시뮬레이션에서 NetworkBehaviour의 FixedUpdateNetwork()입니다. 각 틱의 시간 간격은 NetworkProjectConfig의 Simulation > Tick Rate에 의해 정의되며, 1/60초의 델타와 같습니다. NetworkRunner.DeltaTime 으로 접근할 수 있습니다. 따라서 Time.deltaTime이 아니라 Runner.DeltaTime으로 사용합니다. using..
[유니티] Photon Fusion 102 간단 요약 # Photon Fusion 102 Photon Fusion 102은 Photon 홈페이지의 기술문서에 있는 Fusion 튜토리얼 중 한 단계를 말합니다. # 방만들기, 접속하기 Photon Fusion 네트워크의 주체는 입니다. NetworkRunner의 멤버 함수인 StartGame(StartGameArgs args) 로 Fusion 네트워크를 시작할 수 있습니다. private NetworkRunner _runner;// 러너 변수를 선언하고 _runner = gameObject.AddComponent(); // 객체를 생성합니다. _runner.ProvideInput = true;// 이 클라이언트에서 입력을 한다는 뜻 await _runner.StartGame(new StartGameArgs()..
[유니티] 게임 패널에 GUI 띄우기 유니티로 게임 개발을 하다보면 특정한 상황을 반복적으로 실행해서 테스트를 해야하는 경우가 많습니다. 예를 들면 캐릭터가 죽었을 때 재시작 버튼을 띄운다던가, 다시 시작지점으로 돌아가게 한다던가 하는 후속 처리가 있습니다. 이 기능들이 제대로 작동하는지 테스트하려면 캐릭터를 반복적으로 죽여야 합니다. 하지만 직접 캐릭터를 죽음의 상황에 처하도록 컨트롤하는 것은 시간낭비가 많습니다. 그래서 유니티에서는 게임 패널에 UI버튼을 추가하여 스크립트를 실행할 수 있도록 도와주고 있습니다. 예를 들어 캐릭터가 적에게 맞아 체력이 0 이하로 내려가면 die() 함수가 실행됩니다. 그럴 때 간단히 UI 버튼을 눌러 die()함수가 실행되도록 하는 것입니다. 가장 간단하게 구현하는 방법은 다음과 같습니다. private ..

728x90