728x90
반응형

유니티 72

유니티에서 Static이란 [Unity]

static.. Dynamic의 반대로 알고 있다. 정적을 의미한다. 즉, 런타임 이전에 훨씬 이전에 수행되어 만들어진다는 뜻으로 알고 있다. 사실 선언했을 때 만들어진다. ** 메모리에서의 Data에 저장된다. 그럼 유니티에서 Static의 의미를 알아보자 static은 Data 영역에 저장되기 때문에 변수를 수정하거나, 읽을 때, 클래스 객체를 만들 필요가 없다. 아무리 객체를 만들더라도 static은 유일하게 존재한다. using UnityEngine; using System.Collections; public class Enemy { //Static variables 은 모든 클래스의 인스턴스와 공유된다. public static int enemyCount = 0; public Enemy() { ..

Linear Interpolation, 선형 보간법

이 방법을 이전에 오브젝트를 움직이게 할 때 써먹었다. 하지만 움직이게 하는 것 뿐만 아니라 모든 것에 쓸 수 있기에 한 번 더 복습하고 가려고 한다. 알아보자 어떠한 value 2개를 가지고 그 사이를 선형보간법을 이용하는 것이다. Lerp (X, Y, t) 함수의 원형은 이렇게 생겼다. X,Y 가 value가 되는 것이고 t가 0~1 의 값을 가진다. ?? 뭐야 보간이 뭔데? 보간이란 알고 있는 값으로, 알려진 값 2개의 사이에 위치한 값을 추정하는 것을 말한다. 즉, 알고 있는 값으로 근사 함수를 만들어 값을 추정하는 것이다. 아래와 같은 식으로 추정한다. 그럼 t는 왜필요한건데?? t가 d1,d2값을 정해준다. x1,x2의 거리를 1로 보고 t가 비율을 정하는 것이다. 쉽게 말하면 그라데이션의 중..

Start()와 Awake()의 차이 [Unity]

1. Awake() Awake()는 일반적으로 게임이 시작되기 전에, 모든 변수와 게임의 상태를 초기화하기 위해서 호출된다. 즉, start보다 먼저 호출된다. 다행히 모든 오브젝트가 초기화되고 호출되기 때문에 GameObject.FindWithTag를 이용해서 해당 게임 오브젝트를 요청하거나, 다른 오브젝트와 안전하게 연동해서 사용할 수 있다. 즉, 초기화시키기에 이렇게 알맞은 것이 없다. **단, 각 게임오브젝트의 Awake()는 랜덤 순서로 실행되기 때문에 스크립트간의 참조(reference)를 설정하기 위해 Awake를 사용하고, 정보를 보내고 받는 경우에는 Start를 사용해야 한다. 2. Start() Start()는 Update메소드가 처음 호출되기 바로 전에 호출되고 해당 Behaviour..

C#에서 쓰이는 약간 다른 Loop 활용 [Unity]

For, While은 어디서 한 번쯤 들어봤을 것이다. 하지만 각 언어마다 특징이 있듯이 C#에도 약간 좀 다른 특징이 있다. 알아보자 1. Do, While 문 using UnityEngine; using System.Collections; public class DoWhileLoop : MonoBehaviour { void Start() { bool shouldContinue = false; do { print ("Hello World"); }while(shouldContinue == true); } } 일반적으로 While문을 돌릴 때 행동하기 전에 조건이 True인지 체크를 하는데 얘는 우선 돌리고 True인지 체크를 한다. 예를 들면 설거지를 하고 있는데 남은 접시가 0보다 크면 설거지를 해야한..

Collider에 대한 모든 것(기본) [Unity]

이번 글에서는 Collider의 종류와 쓰임 보다는 Collider가 무슨 역할을 하며 왜 필요한지.. 어떤 property를 가지고 있는지를 알아볼 것이다. 도대체 무엇인가? ++Unity.Engine 클래스에 포함되어 있다. RigidBody가 나온다면 항상 따라오는 것이 있다. 바로 Collider다 ++영어단어 뜻이 Collide with, 으로 많이 쓰이듯이 "충돌"을 의미한다. 즉, 충돌에 대해, 접촉에 대해, 모든 것을 관리한다고 볼 수 있다. 다시 말해서 물리적인 상호작용에 관여한다고 보면 된다. 어떤 속성을 가지고 있는데?? 그냥 충돌하면 그게 끝 아니야?? 사실 우리가 당연하게 여기는 모든 행동 안에는 물리적인 법칙이 끊임없이 적용되고 있다. 유니티는 조금이라도 자연스럽게 만들고자 여러..

용어 정리

Real-Time (실시간) how quickly an image is rendered (or displayed) on the screen. 얼마나 이미지들이 실제로 보는 화면(스크린)에 빨리 반영되느냐? 를 말한다. 스타크래프트 같이 RTS라는 실시간 전략 시뮬레이션 게임 장르가 있다. 얘는 우리가 우클릭만 하면 유닛들이 바로바로 움직여서 화면에 움직이는 것을 알 수 있다. 그렇다면 개발자 입장에서 실시간은 무엇이냐? 게임을 업데이트할 때 업데이트에 이상이 있거나 잘 작동하는지 알아보려면 우리는 실행시켜서 확인을 해봐야 한다. 하지만 그 작업을 맨날 처음부터 우리가 수정했던 부분까지 확인하려면 시간이 정말 오래걸린다. (실제로 지금도 그렇게 하고는 있지만 컴퓨터 속도가 빨라졌다.) 그렇게 빨라져서 수정..

AddForce에 대한 모든 것(+RelativeForce) [Unity]

Rigidbody에서 엄청 많이 쓰이는 AddForce를 알아보자 어떠한 form을 가지고 있냐? 2가지 형태가 있다. 하지만 비슷한 메커니즘을 가진다. public void AddForce(Vector3 force, ForceMode mode = ForceMode.Force); public void AddForce(float x, float y, float z, ForceMode mode = ForceMode.Force); 쉽게 말하면 AddForce(방향*힘 값, 힘의 종류) 라고 보면 된다. 무엇을 하는 메서드냐? 말 그대로 AddForce다. Rigidbody에게 힘을 전달해준다. (하지만 모든 Rigidbody가 아닌 Active 상태일 때만 전달된다.) **이러한 Force calculatio..

C#, Unity에서의 접근제한자,Access modifier [Unity]

물론 C#을 이용하는 사람이 모두 Unity를 쓰는 것은 아니겠지만.. 난 Unity를 기준으로 설명하겠다. 어차피 C#도 똑같다. 종류는 4가지가 있다. private 클래스 내부에서만 접근이 가능. 즉, 동일 클래스나 구조체 내의 멤버만 접근 가능하다. public 모든 곳에서 해당 멤버로 접근이 가능. 여기서 말하는 모든 곳은 inherit class를 포함한 정말 모든 외부를 말한다. internal 같은 어셈블리에서만 접근이 가능. protected 클래스 외부에서 접근할 수 없으나 파생 클래스에서는 접근이 가능. public + private이라고 보면 된다. 약간 mixed 되어 있다. ++ protected internal( 결합) 같은 어셈블리에서만 protected으로 접근이 가능. 근..

Physics Material에 대한 것 [Unity]

Physics Material이 왜 쓰이느냐..? The Physic Material is used to adjust friction and bouncing effects of colliding objects. 마찰, 탄성, 충돌에 관한 효과를 어떻게 적용할 것인가에 대해 쓰인다. Collider에서 Material을 정할 수 있다. 세부적으로 살펴보자 먼저 Friction! Friction is the quantity which prevents surfaces from sliding off each other. 마찰계수 덕분에 미끄러지지 않을 수 있는 것이다. Dynamic Friction, 동적 마찰계수 이미 움직이고 있을 경우에 적용되는 마찰 계수를 말한다. 0이면 얼음이라 생각하면되고, 1은 많은..

시점에 따라 좌표축 바꾸기, Local Coordinates [Unity]

항상 우리는 거의 Global에서 무엇인가를 조작한다. 하지만 때로는 Local로 조작하는 것이 더 쉬울 때가 있다. 이를 오늘 알아보자. 아무 3D 프로젝트를 켜놓고 Floor를 만들고 Sphere를 만들어보자 나는 이렇게 만들었다. 공에는 우리 입력을 받아 움직일 수 있게 스크립트를 짜주자. public class PlayerController : MonoBehaviour { private Rigidbody playerRb; public float speed = 5.0f; //private GameObject focalPoint; // Start is called before the first frame update void Start() { playerRb = GetComponent(); // 힘을..

728x90
반응형