전체 글 26

Unity Quaternion과 Euler

유니티에서 오브젝트의 회전을 보다 잘 이해하고 다루기 위해서 Quaternion과 Euler에 대해 알아야할 필요가 있다. 먼저 Euler Angle이란 x, y, z 각 각의 축을 기준으로 360도 회전하는 좌표계이다. 직관적이고 간단해서 비교적 어렵진 않지만 Euler Angle은 짐벌락(Gimbal Rock)이라는 문제점을 가지고 있다. 짐벌락이란 회전축은 필연적으로 두 개의 축이 회전중에 겹쳐지는 현상이 발생하는데 그렇게 되면 회전축 하나가 사라지게 되면서 사라진 회전축으로 회전이 불가능하게 되는 현상을 말한다. 이러한 현상이 생기는 이유는 오일러 앵글이 자체적으로 설정되어있는 순서로 해당 축들을 개별적으로 계산하기 때문이다. Unity에서는 오일러 앵글이 x, y, z 순서로 계산된다. 세 개의..

Unity 2022.06.21

Unity 점프 구현하기

오브젝트의 이동과 함께 점프를 구현. 먼저 물리 적용을 위해 오브젝트의 인스펙터 창에서 Add Component로 Rigidbody를 추가한다. PlayerMove 스크립트를 열고 Rigidbody를 사용하기 위해 변수를 만들고 start 함수에서 Rigidbody 변수에 GetComponent() 를 알려준다. 그리고 점프의 중복 작용을 방지하기 위한 bool 값을 만든다. 그럼 이제 점프를 구현할 코드를 작성한다. jump 가 false 일때 Input.GetKey로 스페이스바 키를 누르면 위로 jumForce만큼 뛰어오름. 그리고 jump를 true로 바꿔서 점프 중복 방지를 함.그리고 다시 jump를 false로 만들기 위해 바닥에 Ground 태그를 달아서 플레이어가 점프를 하고 다시 바닥에 내..

Unity 2022.06.21

Unity Input으로 오브젝트 이동 구현

Input Manager Input Manger를 알아보기 전에 GetAxis() 함수에 대해 알아보자 GetAxis는 Input Manager에 세팅된 축 값을 불러오는 역할을 하는데, 이동 관련 축에는 Vertical과 Horizontal 이 있다. 수직과 수평을 의미 GetAxis 함수를 사용하면 케릭터 이동 구현이 편리하고 코드도 간결해진다. Input Manager에 들어가면 Axes 아래에 사이즈가 있고 그 밑으로 여러 항목들이 나열되어있는데 이게 기본적으로 유니티에 세팅된 축 값이다. 점프나 공격 세팅도 있고 게임 패드 입력 값도 세팅되어 있다. 만약 새로운 축 값을 지정하려면 Size를 추가하고 세팅하면 된다. Translate로 오브젝트를 이동 시키는 코드를 만들고 테스트. 이동은 간단하..

Unity 2022.06.21

C# 오버라이딩

오버라이딩 메소드 오버로딩과 비슷하지만 다르다. 오버로딩 같은 경우 같은 메소드의 이름을 여러 방법으로 사용이 가능했다면 오버라이딩은 상속 받은 메소드를 새롭게 정의하는 것. 한 마디로 부품을 갈아 끼운다고 생각하면 된다. 녹슨 부품을 새 제품으로 바꾸는거와 같다. 이 방식을 객체 지향의 특성중 하나인 다형성이라고 하는데 오버라이딩을 이용하면 다형성의 이름 답게 다양한 방식으로 사용이 가능하다. 오버라이딩은 virtual과 override 라는 한정자를 이용해서 사용해야하는데 규칙이 존재한다. 1. private를 이용한 선언은 오버라이딩 하지 못한다. 이유는 private는 부모클래스에서만 사용이 되지 오버라이딩 받을 자식 클래스에서는 접근을 제한 받기 때문 2. 부모와 자식 클래스의 접근 한정자가 같..

C# 2022.06.03

C# 상속

상속 여기서 말하는 상속이란 부모가 가지고 있는 속성(변수, 메소드 등)을 자식에게 상속시켜서 자식이 부모의 속성을 사용할 수 있다는 것을 말한다. 상속 받는 방법은 아래와 같다. class 자식클래스 : 부모클래스 클래스명 뒤에 : 부모클래스명을 붙여주면 된다. 상속을 사용하는 이유는 다음과 같다. 개와 고양이는 비슷한 특징을 가진다. (네 개의 다리와 꼬리 등등) 그렇다면 이러한 특성을 각각 따로 만들어 사용하는건 비효율적이다. 그러므로 공통된 특성은 하나의 클래스에 만들어서 개와 고양이 둘에게 상속받아 사용하는 것이 효율적. 그럼 상속에 대해 알아보자 일단 자식클래스는 부모클래스로부터 private를 제외한 모든 걸 물려 받는다. 그리고 물려받은 기능을 사용하려면 base라는 기능을 사용해야 한다...

C# 2022.06.03

C# 접근 한정자

접근 한정자 접근 한정자란 지금까지 사용했던 private, public 등 을 말한다. 이 접근 한정자는 말 그대로 접근을 제한하는 한정자이다. 객체 지향으로 따지자면 정보 은닉에 해당 public 클래스의 내부/외부 접근 protected 클래스 외부에서 접근 불가, 파생 클래스 가능 private 클래스 내부에서만 접근 internal 같은 어셈블리에 있는 코드만 public으로 접근 다른 어셈블리에서는 private 수준의 접근 protected internal 같은 어셈블리에 있는 코드만 protected로 접근 다른 어셈블리에서는 private 수준의 접근 private protected 같은 어셈블리에 있는 클래스에서 상속받은 클래스 내부만 접근 위에서 자주 사용하는 접근 한정자는 publi..

C# 2022.06.02

C# this

this this는 자신을 나타내는 키워드 한마디로 객체가 자기 자신을 나타낼때 쓰는 키워드이다. 여기서 주의할 점. 이 this는 자신만 나타내는 키워드 이다. 만약 static 한정자로 정적으로 만들어버리면 자기 자신을 가리킬 수 없다. 한정자로 지정해버리면 그 필드의 메소드나 변수는 클래스의 고유의 존재이다. 그렇다면 둘 이상 존재하지 못한다. 그래서 본인을 가리키는 this라는 키워드가 필요 없다. 따라서 인스턴스 필드에서만 this 키워드 사용이 가능하다. this 키워드는 자신 객체 내에서 언제나 자기 자신을 가리킨다. 그리고 생성자도 가리킬 수 있다. 생성자는 일반적으로 새로운 객체를 만들때만 불러온다. 바로 new 연산자를 통해서 객체를 만들때 말이다. 하지만 this를 이용해서 생성자를 ..

C# 2022.06.02

C# 얕은 복사, 깊은 복사

얕은 복사 얕은 복사란 다른 객체인데 객체의 변수끼리 서로 연결이 되어 값이 둘다 바뀜. 그 이유는 클래스의 구조가 참조 형식이라서 그렇다. 클래스 끼리 대입 연산을 해버리면 참조를 해버리는 것. 이게 얕은 복사(Shallow Copy)이다. 깊은 복사 얕은 복사는 목적에 어긋나는 복사 방식이다. 서로의 변수를 공유하니 동일한 클래스에 객체를 복사해 사용할 수 없다. 둘 중에 하나가 바뀌면 둘 다 바뀌어 버림. 그래서 깊은 복사(Deep Copy) 라는게 존재 깊은 복사의 원리는 새로운 객체를 만들어서 그 객체와 참조시켜버림. test copy = new test() 새로운 객체를 만들어서 copy.count = this.count; 이 객체의 본 객체의 값을 넣는다. (this 란 자기 자신을 가리킴)..

C# 2022.06.02

C# 생성자와 종료자

생성자 생성자의 역할은 객체의 생성과 동시에 초기화를 해주는 역할을 한다. 클래스에 처음 입문하고 객체에 인스턴스를 하기 위해 생성자를 사용했는데 우리는 생성자를 만든 적이 없는데 어떻게 생성자가 있는지 의문이 들었을 텐데 컴파일러는 생성자가 없다면 따로 기본 생성자를 만듦. 그래서 생성자를 따로 만들지 않아도 사용이 가능하다. 또 생성자는 하나라도 만들게 되면 컴파일러는 기본 생성자를 제공하지 않는다. 기본 생성자를 제공한다고 하여 생성자를 만들지 않게 되면 쓰레기 값이 들어가 원하지 않는 결과를 초래하게 된다. 초기화는 습관이다. 생성자는 메소드 오버 로딩이 가능. 초기화가 필요한 경우 생성자를 꼭 만드는 게 좋다. 종료자 C++에서는 종료자와 같은 역할을 하는 소멸자가 있음. 종료자의 형식은 아래의..

C# 2022.06.01