공부 93

[Unity] 유니티 생명 주기 life cycle, 키보드 입력에 따른 물체 이동 코드

유니티에서는 기본적으로 C# 스크립트를 만들면 써있는 Update, Start 외에도 써있지는 않지만 자동으로 실행되는 함수들이 존재한다. Reset, Awake, OnEnable, Start, FixedUpdate, Update, LateUpdate, OnDisable, OnDestroy, OnApplicationQuite 함수들이 이에 속하는데 직접 몇가지를 실험해보고 이를 검사해보려고한다. Unity 공식 문서에 의하면 (https://docs.unity3d.com/Manual/ExecutionOrder.html) Awake -> OnEnable -> Reset -> Start -> FixedUpdate -> OnStateMachineEnter/Exit -> OnAnimatorMove -> OnAn..

공부/Unity 2023.04.03

[Unity] 왕초보를 위한 코드 5줄로 태양계 자전, 공전 구현하기!

Unity hub를 깔아주시고, 각자 원하시는 버전으로 유니티를 설치하고 진행하시면 됩니다 :) (저는 2020.3.36 버전을 이용했습니다) 새 프로젝트를 3D로 골라서 만들어줍니다 -> Create project 저의 경우 위에와 같이 레이아웃을 구성해주었습니다. (제 컴퓨터가 아닙니다! 정품 인증이 왜 안되어있는 컴퓨터인지 저도 억울합니다!!) Hierarchy 창에서 우클릭 > 3D Object > Sphere 로 3D 구를 만들어줍니다! 와! 벌써 행성 만듦 대박 허허 흰 알이 나왔네요 이제 이 친구는 태양입니다. 인스펙터창에서 이름을 바꿔줍시다 창조주의 마음으로 명명해주고 같은 원리로 수금지화목토천해 8가지 행성들도 추가로 만들어줍시다 ㄱㄱ 멋있게 생성을 완료해주었습니다~ 와~ 이제 크기를 맞..

공부/Unity 2023.04.03

[C#] 콘솔창의 키보드 입력 필요할때만 받아서 처리하기

콘솔로 리듬게임을 구현하고 싶었고, 이를 위해 키보드 입력을 받아야 했다. 하지만 while문 안에 ReadKey 함수를 넣으니, 키보드 입력을 받지 않으면 다음 while문으로 넘어가지 않는 문제점이 발생하였고, 이를 KeyAvailable을 이용해 해결했다. while (true) { if (Console.KeyAvailable) { break; } } Console.KeyAvailable을 사용하면 계속 입력받지 않아도 자동으로 while문을 돌며 키보드 입력이 있는지 확인할 수 있다. 그래서 키보드 입력이 있을 시에 이를 확인한다 의 용도로 보통 스위치 문을 많이 쓴다. static ConsoleKeyInfo input; input = new ConsoleKeyInfo(); 로 선언을 해 준 뒤 ..

공부/C# 2023.03.31

[C#] Window 콘솔에서 mp3파일 가져와서 재생하기

윈도우에서 mp3파일을 실행하기 위해 reference를 추가해준다. COM에 들어가 Windows Media Player를 둘다 확인해준다. 새로 사용한다고 선언을 해 준 뒤 WMPLib.WindowsMediaPlayer player = new WMPLib.WindowsMediaPlayer(); bool stop = false; ThreadPool.QueueUserWorkItem(_ => { player.URL = @"C:\Users\~~~~~~~.mp3"; //Url에 본인 컴퓨터에 저장된 노래 주소를 넣어주면 된다 // 무한 루프 시작 while (true) { } } }); Console.WriteLine($"{player.controls.currentPositionString} / {player..

공부/C# 2023.03.30

[C#] 디자인패턴 - 싱글톤, Factory, state(상태 패턴)

Singleton: 객체 인스턴스가 1개, 정적, 시스템에 많이 적용 Factory: 양산(미니언 같이) State: 상태에 따라 무언가를 호출, 한정된 상태 안에서 계속(유한상태머신 FSM) → 몬스터 AI에 많이 사용, 상태이상에 사용 Program.cs class test { public test() { Console.WriteLine("test"); } public void Call() { Console.WriteLine("일반클래스"); } } //main 전에 선언 //... main문 시작 test testing = new test(); testing.Call(); //singleton singleton = new singleton(); 싱글톤 선언을 해 두었기에 아래 식으로 바로 접근이 가..

공부/C# 2023.03.28

[C#] out과 ref / stack과 queue / Hashtable과 Dictionary

Out / ref (modifier) C#에서 기본 데이터 형식 매개변수는 call by value, value로 값 전달이 기본이다. 이를 reference 형식으로 바꾸고 싶다면 ref / out 키워드를 사용한다. value와 reference의 차이를 예시를 들어 설명하자면 static void example(int a){ a = 3; } 위의 코드는 기존의 존재한 int a를 받아 3으로 바꾸는 코드이다. 하지만 void로 설정되어있어 이를 return으로 받지 않는 한 C#은 value형식이기 때문에 a는 3으로 바뀐걸 전달해주지 못한다. 만일 return을 쓰지 않고도 값을 바꾸고 싶다면 reference 형식으로 바꿔야 한다. static void example1(ref int a){ a ..

공부/C# 2023.03.27

[C#] 예외처리 try-catch의 이용과 자료구조 Array, List, ArrayList 차이

예외처리 if / switch : 값의 예외 try - catch : 흐름의 예외 => 버그가 터져도 코드가 계속 이어져야 될 때 사용 try - catch try { 정상 실행할 코드 } catch (예외) { 예외 발생시 처리 } catch (예외2) { 예외2 발생시 처리 } finally {try든 catch든 꼭 마지막에 실행} try내의 코드에서 예외가 발생할 시 catch에서 처리하고 다시 try가 감싸는 코드를 실행한다. catch절은 try절에서 던질 예외 객체와 같은 형식이어야 한다. 예외를 던질 때는 throw를 사용하기도 한다. 예를 들어 array등의 초기값이 설정이 안되어있으면 비어있는 Null값이 들어있는데 이에 접근하려하면 Null관련 예외처리 많이 발생한다. string은 ..

공부/C# 2023.03.24

[C#] 상속과 virtual, abstract, interface / 오버로딩, 오버라이딩 코드

앞의 내용에서 상속을 다뤘는데, virtual / abstract / interface와는 무슨 연관이 있을가? 본래 상속은 단일 클래스만 가능한 일이지만, 다중 상속이 가능한 키워드가 있다. 부모클래스에서 protected / public으로 선언한 변수는 자식클래스에서도 참조가 가능하지만 private으로 선언한 변수는 안된다는 것은 모두 알고 있을것이다. 그렇다면 method, 즉 함수의 경우는 어떨까? protected / public으로 선언된 메소드는 위와 동일하다. 하지만 메소드를 재정의 하는 경우는 또 다르다. virtual(가상) abstract(추상) interface virtual : 재정의가 가능하고 이는 필수가 아니다. abstract: 재정의가 가능하지만 이는 필수이다. (abs..

공부/C# 2023.03.23

[C#] class 추가와 public / private 속성(프로퍼티)의 get set 초기화식

새로 cs파일을 만들어 class를 선언하고 이를 참조해보자. 프로젝트 이름 우클릭 > 추가 > 새 항목 에서 파일을 새로 생성할 수 있다. Player_info.cs파일을 만들었다. class Player_info { public string Name; public float HP; public int level; public bool isAlive; } 위와 같이 class에 선언해두었다. player의 이름과 체력, 경험치와 살아있는지 여부를 판단하는 변수를 선언했다. public으로 선언해 두었기에 원래의 Program.cs에서 main함수에서 참조가 가능하다. static void Main(string[] args) { player.name = "주인공"; } player의 이름을 주인공으로 바..

공부/C# 2023.03.22

[C#] 상속(Inheritance) / 오버로딩 + 오버라이딩

상속이란 특정 기능(데이터와 동작)을 제공하는 기본 클래스를 정의하고 해당 기능을 다시 선언하지 않고 받아 사용하거나 재정의 할 수 있게 파생 클래스를 정의하는 기능이다. 객체 지향 프로그래밍 언어의 주요 특징 중 하나다. (추상화, 상속, 다형성, 캡슐화) 쉽게 말해, 공통되는 함수나 변수를 가지고 있으면 이를 상속받아 비슷하게 사용하고, 확장하거나 수정하는 기능이다. 부모 클래스의 동작을 다시 사용하거나 확장 / 수정하기 위해 자식 클래스를 정의한다. 상속되는 클래스를 기본 클래스 ( 부모 클래스 ) / 상속하는 클래스를 파생 클래스 ( 자식 클래스 ) 라고 한다. *하지만 static (정적 생성자: 클래스의 정적 데이터 초기화), 생성자(클래스의 이름과 같은 메소드, 클래스의 새 인스턴스 만들 때..

공부/C# 2023.03.22
728x90