728x90
반응형

유니티 72

정해진 시간마다 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..

GameObject를 입력받아서 방향대로 움직이기 [Unity 3D]

움직이게 하는 것은 translate()라는 메서드로 한다고 배웠다. 그렇다면 Input을 받아서 하는 것은?? 우리가 기본적으로 WASD가 방향을 뜻하는 것을 알고 있다. 과연 유니티도 그럴까? Edit의 Project Settings로 가보자 저기 왼쪽 tab에 Input이 있네? 음 WASD가 보이나? Negative, Positive 하면서 써있다. 여기서 왜 Negative, Positve로 나눌 수 있냐면.. 좌표평면을 생각해보면 알 수 있다. Y가 +면 위쪽 이니까 아래쪽은 - 겠지? X도 마찬가지다. ++저기있는 Name을 잘 기억해두고 이용할 수 있다는 것을 알아야 한다. 나중에 Call 할 때는 Name을 이용할 거니까. 그럼 약간 코드를 수정해주자 public class PlayerC..

Play 중인지 아닌지 쉽게 구별하기, Preferences[Unity]

맨날.. 하다보면 수정을 하거나 무엇인가를 하는데 왜 안돼? 하면 꼭 Play를 눌러놓은 상태여서 안되는 경우가 많다. 그래서 쉽게 구별하기 위해 하나 소개하려고 한다. 지금 당장 Edit를 누른다 거기서 당장 preferences를 누른다 바로 Color로 들어간다 수많은 것들이 있지만 나머지는 익숙해서 버리고 Playmode tint를 보자.. ?색이 없나? 하고 봤더니 있긴 하지만 우리가 눈치 챌만큼은 아니었다. 분명 Playmode를 누르면 살짝 회색빛으로 변하지만 생각안하면 그냥 그렇구나하고 넘어갈 정도다. 그래서 눈에 띄게 바꿔주기로 했다. (204,204,54,104)로 했다. 마지막은 투명도 오줌 지린 LCD 액정같다. 하지만 Playmode인지는 누가봐도 알겠다. 사실 Preference..

카메라 플레이어에게 고정하기, Unity 3D

GameObject는 움직이는데 카메라는 움직이지 않는 경우가 있다. 그럴 때 어떻게 해야할까? 마치 이렇게.. Main Camera를 어떻게좀 해야겠지..? 그래서 스크립트를 하나 만들자. "FollowPlayer"라고 이름지어서 만들자. 항상 스크립트 제목은 명확하게 뭔지 알 수 있게 지어야한다. 짧게가 아니라! 뭔 스크립트인지 알 수 있게 !! 그 후 짧게 짓는 것이다. public GameObject player; // subject // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { transform.position = player.tran..

SerializeField의 개념 [Unity]

하도 사람들이 쓰긴 하는데 잘 모른다? 그치? 그래서 알아보자 유니티에서 변수를 선언할 때 public이나 private 같은 접근제한을 선언하고는 한다. ++ protected도 있긴 하다. 접근 제한자는 왼쪽 링크에서 따로 다뤄보자. 그리고 public을 썼을 때 인스펙터 창에서 접근할 수 있다. 또한 public으로 선언하면 다른 스크립트에서 접근가능하다. 그런데 왜 만들었냐면? 외부 스크립트에서 수정을 못하게, 참조할 필요도 없는 변수를 접근해서 쓸데 없는 상황을 만들지 않기 위해!!! 인스펙터에서 접근 가능하지만 외부 스크립트에서 접근이 불가능하게 막으려고 한다. 그래서 SerializeField를 쓴다. private 변수를 인스펙터에서 접근가능하게 해주는 기능으로 원하는 변수 앞에 [Seri..

728x90
반응형