728x90
반응형

Game Development, 게임개발/개발 98

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

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

게임 제작 과정에서 한 번쯤 생각해야 할 체크리스트

Give objects basic movement, 기본적인 움직임 구현 Basic movement from user input, 사용자 입력을 받아서 움직임 구현 Constrain the Player’s movement, 움직임 범위 제한 Destroy objects off-screen, 없어져야 할 오브젝트 제거 Handle object collisions, 충돌 제어 Make objects into prefabs, 프리팹으로 만들 수 있는 것 Make SpawnManager spawn Prefabs, 프리팹 이용 Position camera based on project type, 목적에 따른 카메라 위치 Enemies, obstacles, projectiles & materials, 오브젝트의 디..

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(); // 힘을..

정해진 시간마다 Method 실행시키기 [Unity]

사실 저번에 랜덤위치에서 생성되게 했지만 솔직히 어떠한 조건을 만들어서 그 조건에 맞을 때 생성되게 하는 것은 정말 귀찮은 일이다. ++ 귀찮아서 메서드 만드는 것에 축하하며 그래서 이번에는 주기적으로 반복시키려고 한다. 마침 Unity에 유용한 메서드가 있다. InvokeRepeating이란 메서드다. { public GameObject[] animalPrefab; private float spawnRangeX = 20f; private float spawnposZ = 20; private float startDelay = 2; private float spawnInterval = 1.5f; // Start is called before the first frame update void Start() ..

Prefab,프리팹을 이용해서 Random Spawn, 랜덤 생성해보기 [Unity]

Prefab을 어떻게 만드는지는 이전 글들을 통해 알았을 것이고 이제는 그 Prefab을 이용해 맘대로 소환하는 방법을 알아보자 나는 어떤 방식으로 구현할 거냐면.. Empty Object가 임의로 움직이면서 딱 그 위치에서 Instantiate를 하면 랜덤 소환이 될 것이라 생각하고 구현할 예정이다. 또는 내가 플레이 하는 범위를 정해줘서.. 그 범위에서 난수발생(Random Number를 generate)하겠다. 그래서 미리 만들었다. 그래서 코드를 만들어봤다. public class SpawnManger : MonoBehaviour { public GameObject[] animalPrefab; private float spawnRangeX = 20f; private float spawnposZ =..

Prefab(ricate), 프리팹이란? [Unity]

prefab이란 단어는 사실 건축용어인데 빌려왔다. Unity에서는 프리팹은 재사용, reuse을 효율적으로 하기 위해 만든다고 보면 된다. 건축에서와 마찬가지의 뜻이다. 하지만 Duplicate로 재사용하면 되지 않느냐...? 라고 할 수 있다. Duplicate를 동적으로 수행할 수 있을까?? 음.. 안해봤는데 어려울듯 이를 해결할 수 있는게 바로 Prefab이다. 그렇다면 Prefab은 어떻게 만드느냐? 얘네들의 차이점이 무엇일까? 맨 앞에 육면체 색깔이 다르다. 그렇다면 왜 다를까? 결론부터 말하자면 파란 애들이 바로 Prefab된 애들이다. 얘네들은 Asset으로 저장되어 언제든지 불러올 수 있으며 만약 수정을 하면 불러올 때는 수정된 이후의 정보들로 불러와진다. -> 재사용 용이(reusabl..

Update(), FixedUpdate(), LateUpdate()의 차이 [Unity]

2019.4 LTS 기준으로 설명한다. Unity의 기본적인 틀은 거의 바뀌지 않기에 맞다고봐도 무방하다. docs.unity3d.com/ 원하면 위의 영상을 참고해도 좋다. Update() Update는 처음 C# 생성될 때 만들어진 주석의 설명 그대로다. Update is called every frame, if the MonoBehaviour is enabled. 매 프레임마다 호출된다. **MonoBehaviour는 C# 스크립트라면, Unity를 사용한다면 무조건 같이 포함된 Class라고 배웠다. 나중에 더 알아보자 Update is the most commonly used function to implement any kind of game script. -> script를 읽어들이는 주기라..

GameObject 움직이는 여러가지 방법 [Unity]

사실 translate()라는 메서드를 소개했지만 다른 방법도 많기에 조금 더 다뤄보려고 한다. 움직인다는 말은 여러가지의 의미가 있다. 이전 위치와 다른 위치를 갖게 된다면 그것을 움직인다는 말로 우리는 이해하겠다. 즉, 순간이동을 하든, 뛰어가든, 날라가든, 위치의 변화가 생겼으면 바로 그것이 움직인 것이라 보겠다. 기본 전제 3D 환경 Sphere (3D) Empty Object (Name: Target) C# script (whatever) 1. Set position public class NewBehaviourScript : MonoBehaviour { public Transform target; // Start is called before the first frame update void ..

GameObject 자연스럽게 회전시키기 [Unity 3D]

사실 지금까지 GameObject가 그냥 움직이는 꼴을 봤다. 근데 사실 자동차가 저렇게 미끄러지듯이 움직이는 것이 말이되나? 아니 전진할 땐 그렇다 쳐도 어떻게 좌우 이동이 저러냐? 그래서 좌우이동을 약간 수정해주기로 했다. void Update() { horizontalInput = Input.GetAxis("Horizontal"); forwardInput = Input.GetAxis("Vertical"); transform.Translate(Vector3.forward*Time.deltaTime * speed * forwardInput); // same as above line. it's just expression difference. transform.Rotate(Vector3.up, turnS..

728x90
반응형