본문 바로가기
728x90
반응형

C#12

[Unity] 목표 지점을 바라보도록 객체를 회전시키는 유니티 내장 함수 소개 및 직접 스크립트로 구현하기(삼각함수, 벡터 연산 활용) 3인칭 게임에서 자신의 캐릭터를 화면 내 마우스가 클릭한 곳으로 이동하는 스크립트를 작성하는 도중, 회전에 대한 이해가 직관적으로 되지 않아 회전에 필요한 함수를 직접 구현해보는 시간을 가졌다. 포스팅 후 내용을 더 정리해서 추가적으로 3인칭 게임에서의 클릭 인식과 캐릭터 이동, 회전을 모두 포함한 글도 작성할 예정이다.  목표 지점을 가리키는 단위 방향 벡터 구하기방향을 구하는 방법은 벡터 값인 위치 데이터를 활용해 구할 수 있다. 이후 진행할 각도를 구하는 연산의 편의성을 위해, 방향의 크기를 1로 조정해주는 정규화를 진행한다. 회전이 아닌 단순 이동의 경우에도 정규화가 필요한데, 이는 정규화를 진행하지 않는다면, 대각선 방향에서의 크기가 더 커지기 때문이다. 유니티에서 정규화는 .Normalize(.. 2024. 5. 13.
[C#] 코딩 스탠다드(.NET 코딩 규칙) 한 외국 블로그의 C# 코딩 스탠다드를 번역 및 정리한다. https://www.dofactory.com/csharp-coding-standards World's #1 .NET Developer PlatformDofactory is the popular technology platform that offers software engineers the best jobs, products, and tutorials. Monetize your skills today!www.dofactory.com  클래스(Class)클래스의 이름과 메서드 이름에 파스칼(Pascal) 표기법 사용 지향public class ClassName{ public void GetInfo() { // ... } publ.. 2024. 5. 8.
[C#] 부분 클래스와 부분 메서드(partial), 정적 클래스(static) 부분(분할) 클래스와 부분 메서드의 개념과 사용법을 직관적인 예제와 함께 간단히 정리해보겠다. 이후 정적 클래스의 개념과 특성을 알아본다. 부분(Partial) 클래스분할 클래스라고도 부른다. 클래스의 기능이 복잡하면 하나의 클래스가 몹시 길어지기 때문에, 한 파일에 한 클래스를 구현하는 것이 어려울 수 있다. 닷넷 2.0부터 partial 키워드를 통해 한 클래스를 여러 파일로 분할할 수 있게 되었다. 부분 클래스 정의를 사용할 때의 제한 사항에 주의. 부분 클래스 : 여러 파일로 나눠서 동일 클래스 구성하기  //1. First.csusing System;namespace PartialPractice{ public partial class PartialClass { public.. 2024. 5. 2.
[C#] 인덱서(Indexer)와 반복기(iterator, yield 키워드), 지연된 연산 클래스의 인스턴스를 인덱싱해주는 인덱서와 점진적으로 반복하도록 해주는 반복기(이터레이터)와 yield 키워드의 사용법을 정리하고, 지연된 연산이라는 개념을 소개한다.  인덱서 (Indexer)인덱서는 클래스의 인스턴스를 배열처럼 인덱싱해주는 구문으로, 매개 변수를 사용하는 점을 제외하면 속성을 유사한 형태이다. 배열을 쓰듯 인덱스로 속성을 초기화 및 값을 가져올 수 있다. 정수형 인덱서 : 정수형 매개변수를 받는 인덱서this[ int index ]using System;class IndexerPractice{ private string name; //정수형 인덱서 : this[int index] public string this[int index] { get {.. 2024. 4. 30.
[C#] 익명 형식(Anonymous Type)과 덕 타이핑(Duck Typing), 개체 이니셜라이저, nameof 연산자 개체 이니셜라이져는 속성을 통해 개체 값을 설정하는 편의기능을 제공한다. 또한 개체 이니셜라이져와 new 연산자를 함께 사용하는 것으로 익명 형식을 만들 수 있다. 또한 재미있는 덕 타이핑이라는 주제와 유용한 nameof 연산자까지 다루도록 하겠다. 덕 타이핑과 nameof는 속성에 국한된 개념은 아니지만, 개념 설명 후 속성에 관련지어 정리하겠다.  개체 이니셜라이저 (Object Initializer)개체 이니셜라이저를 사용해 단일 명령문으로 개체의 모든 엑세스 가능한 필드나 속성에 값을 추가할 수 있다. 개체 이니셜라이저를 사용한 개체 속성 초기화using System;class InitPractice{ public string Name { get; set; } public int Age.. 2024. 4. 30.
[C#] 속성(Property)과 접근자(get, set, init), 읽기/쓰기 전용 속성 속성은 클래스의 전용 필드 값을 읽거나 쓰고 연산하는 유연한 방법을 제공하는 멤버로, 접근자라는 특수 메서드이다. 주로 private한 필드를 public 속성으로 외부에 공개할 때 사용하며, 안정성과 유연성을 높이는 것에 도움을 준다. 관련한 내용을 정리해보겠다.  속성 접근자속성 접근자를 사용해 필드의 값을 가져오고(get) 설정하는(set) 기능을 수행할 수 있다. get 접근자 (게터 : getter) : 특정 값 또는 특정 필드 값을 반환set 접근자 (세터 : setter) : value 키워드를 사용해 값을 읽어 관련 필드에 저장init 접근자 : set 접근자와 거의 같으나, 생성자나 개체 이니셜라이저에 의해서만 사용 가능using System;class PropertyPractice{ .. 2024. 4. 30.
[C#] 생성자(Constructor)와 소멸자(Destructor) 클래스의 구성 요소 중 생성자와 소멸자(종료자)를 다룬다. 개체의 생성과 소멸에 관련된 메서드로, 생성자는 명시적으로 정의하고 호출해서 생성해야 하지만 소멸자는 필요하지 않다면 정의하지 않아도 닷넷 가비지컬렉터(Garbage Collector; GC)가 자동으로 역할을 해준다. 그렇게 어려운 개념은 아니므로 빠르게 다루고 넘어간다.  생성자(Constructor)클래스 이름과 동일한 이름을 가지는 메서드로, 주로 클래스의 인스턴스를 생성할 때 사용된다. 클래스는 적어도 한 개의 생성자를 가진다. 생성자는 void를 포함한 반환값을 가지지 않음에 주의하자 생성자를 사용한 개체 생성 : 클래스 이름과 동일한 이름으로 작성using System;class Hello{ //생성자 : 클래스 이름과 같다 .. 2024. 4. 29.
[C#] 스레드(Thread)와 동기화(lock), 병렬 처리 API(TPL) 병렬 프로그래밍을 통해 애플리케이션의 처리량과 응답성을 높일 수 있다. C# 기본 문법은 아니지만, 닷넷에서 제공하는 클래스 라이브러리를 통해 병렬 처리를 구현할 수 있다. 이 주제는 깊이가 깊으므로 대학교에서 운영체제 시간에 배운 개념 일부와 C#에서의 간단한 사용법 정도만을 다루고 넘어가도록 하겠다.  프로세스(Process)와 스레드(Thread) 직관적인 이해를 위해서 스레드의 개념을 단순화 및 추상화한다면, 하나의 프로젝트를 맡은 팀(프로세스)에서 각 작업을 담당할 직원(스레드)이 함께 프로젝트를 위해 일한다고 보면 편하다. 구체적으로는, CPU의 1개의 코어는 기본적으로 하나의 작업만을 진행할 수 있다. 그러나 짧은 시간 동안 작업을 번갈아 가면서 하는 것으로 마치 여러 작업이 동시에 실행되는.. 2024. 4. 29.
[C#] 이벤트(Event) 이벤트는 언제 발생할지 예측할 수 없는 특정 상황이 일어날 때, 개체 또는 클래스에게 알림을 제공해서 원하는 동작이 일어나도록 하는 멤버이다. 흔히 웹에서 버튼을 누르거나 엔터 키를 누를 때 무엇인가 일어나는 것은 이벤트 기반 프로그래밍을 통해 이루어지는 것이다. C#에서 대리자(delegate)와 어떻게 이어지는지를 중점으로 간단히 다루고, 이벤트의 구체적인 사용은 이후 유니티를 통한 프로그램 개발에서 다룰 듯하다.  이벤트(Event)이벤트와 이벤트 핸들러를 바탕으로 이벤트 기반 프로그래밍을 할 수 있다. 이벤트 : 키 입력이나 클릭과 같은 동작(트리거)이벤트 핸들러(event handler) : 특정 이벤트와 연결하고자 만든 메서드특정한 이벤트가 오면, 대리자 형식으로 이벤트를 수행하도록 한다. 기.. 2024. 4. 26.
[C#] Action, Func, Predicate 제네릭 대리자(델리게이트; Delegate)와 매개변수에 메서드 전달 닷넷 API에 내장된 제네릭 대리자인  Action, Func, Predicate를 정리해보자 대리자요약Action반환값이 없는 메서드를 대신 호출Func매개변수와 반환값이 있는 메서드를 대신 호출Predicate매개변수에 대한 bool 값을 반환하는 메서드를 대신 호출  Action 대리자반환값이 없는 메서드를 대신 호출하는 제네릭 대리자로 주로 출력 등과 엮어서 사용할 수 있다. class DelegatePractice{ static void Main() { //Action 대리자 생성 : 반환값이 없으므로 인자는 모두 매개변수 Action printf = Console.Write; Action printAdd = (int a, int b) => Con.. 2024. 4. 26.
728x90
반응형