39,600원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결밑바닥부터 시작하는 왕초보 유니티 2D 게임 제작
섹션2: 충돌처리
다음과 같이 레이어 설정을 했는데도 왜 충돌시 사라지는 걸까요? 1.Project Settings 각각 오브젝트 레이어 설정
- 미해결밑바닥부터 시작하는 왕초보 유니티 2D 게임 제작
low resolution aspect ratios 체크박스 비활성화
low resolution aspect ratios 체크박스가 비활성화되어 해제할 수가 없습니다. 어떻게 해야 하나요?유니티 2022.3.1f1 버전 사용중입니다.
- 미해결밑바닥부터 시작하는 왕초보 유니티 2D 게임 제작
섹션2: 충돌처리
Square 오브젝트에 ColCheck1함수(print 충돌/접촉/분리)와 ColCheck2 함수(상대방 오브젝트를 사라지게함)를 Inspector창에 같이 넣었을 때, ColCheck1함수를 체크 해제 한다고 해도 ColCheck2 함수가 실행되지 않는 이유를 알 수 있을까요?꼭, ColCheck1함수를 Inspector창에서 remove 해야만 ColCheck2 함수가 실행되더라고요!혹시 이것도 충돌 스크립트의 비활성화 문제와 같이 RigidBody 때문인걸까요?
- 미해결밑바닥부터 시작하는 왕초보 유니티 2D 게임 제작
섹션2: 에너미공격
다음 코드에서 IEnumerator Shoot(float delta){ while(true){ GameObject bul = Instantiate(prefab,transform.position,transform.rotation); Destroy(bul,3); float delay = Random.Range(1f,delta); yield return new WaitForSeconds(delay); } } Instantiate(prefab,transform.position,transform.rotation);이 부분의 현재 위치와 현재 방향은 프리팹의 현재 위치인가요 아니면 이 스크립트를 적용한 오브젝트의 현재 위치인가요?저는 오브젝트(에너미)에서 프리팹(총알)이 발사되어야하기 때문에 후자로 생각했습니다.
- 미해결밑바닥부터 시작하는 왕초보 유니티 2D 게임 제작
섹션2: 에너미이동
랜덤하게 에너미이동을 진행할 때, speed를 높이면 씬뷰에서 카메라 범위를 벗어나게 되어서 기존 코드에 다음 코드를 추가하였습니다. 그런데도 씬뷰를 벗어나게 되더라고요. 업데이트 부분에서 현재 위치의 x,y가 주어진 범위를 벗어나면 코루트를 시작하는 함수를 호출하여 다시 목표 방향을 설정한건데 왜 벗어나는 걸까요?if(transform.position.x < (-hs.x)){ StartCoroutine(ChangeDir(3f)); } if(transform.position.x > (hs.x)){ StartCoroutine(ChangeDir(3f)); } if(transform.position.y < (-hs.y)){ StartCoroutine(ChangeDir(3f)); } if(transform.position.y > (hs.y)){ StartCoroutine(ChangeDir(3f)); }using System.Collections; using System.Collections.Generic; using UnityEngine; public class EnemyMove1 : MonoBehaviour { public float speed = 3; Vector2 hs; //half screen: 원점 초기화 Vector2 dir; //direction: 원점 초기화 // Start is called before the first frame update void Start() { hs.x = Camera.main.orthographicSize; //카메라 위쪽에서 아래쪽 바라보는 가로의 길이 hs.y = Camera.main.aspect * hs.x; //가로세로 비율 * 가로 길이 = 세로 길이 StartCoroutine(ChangeDir(3f)); } // Update is called once per frame void Update() { Vector2 delta = dir * speed * Time.deltaTime; transform.Translate(delta); //자동으로 z가 0으로 됨. if(transform.position.x < (-hs.x)){ StartCoroutine(ChangeDir(3f)); } if(transform.position.x > (hs.x)){ StartCoroutine(ChangeDir(3f)); } if(transform.position.y < (-hs.y)){ StartCoroutine(ChangeDir(3f)); } if(transform.position.y > (hs.x)){ StartCoroutine(ChangeDir(3f)); } } IEnumerator ChangeDir(float delta){ Vector2 goal; while(true){ goal.x = Random.Range(-hs.x,hs.x); //전체 가로 길이 goal.y = Random.Range(-hs.y,hs.y); //전체 세로 길이 dir = goal - (Vector2) transform.position; //이동방향 = 목표지점 - 현재위치(Vector3) dir.Normalize(); float delay = Random.Range(1f,delta); yield return new WaitForSeconds(delta); } } }
- 미해결밑바닥부터 시작하는 왕초보 유니티 2D 게임 제작
섹션2: 에너미 이동2
void Update() { Vector2 delta = dir * speed * Time.deltaTime; }이 부분에서 왜 dir을 곱하는 지 이해가 되지 않습니다!그 전에는 초당 얼만큼 가기 위해 speed를 곱했는데 dir은 여기서 무엇을 뜻하는 걸까요?
- 미해결밑바닥부터 시작하는 왕초보 유니티 2D 게임 제작
섹션2: 서브루틴
질문1. 코루틴은 코루틴이 대기하는 동안 Start()의 다른 함수나 Update() 함수가 진행되는 건가요?예를들어 밑에 코드에서 cortDT1이 Start()에서 시작하고, 1초 기다리는 동안 Start()의 그 밑에 있는 함수가 실행되는 건가요? 그러면 Update()는 언제 실행되는 건가요? 실행순서가 궁금합니다!public class Cort3 : MonoBehaviour { Coroutine cortDT1; Coroutine cortDT2; // Start is called before the first frame update void Start() { cortDT1 = StartCoroutine(DelayTime(1)); cortDT2 = StartCoroutine(DelayTime(2)); } // Update is called once per frame void Update() { if(Input.GetKeyDown("space")){ StopAllCoroutines(); } } IEnumerator DelayTime(float time){ while(true){ yield return new WaitForSeconds(time); //메인루틴(update함수)으로 양도권 양보 print(time + "초 만큼 경과"); } } }
- 미해결밑바닥부터 시작하는 왕초보 유니티 2D 게임 제작
섹션1 유니티기초: 사용자 오브젝트 제어2
vec = Vector3.zero;이 부분을 Update()에 하지 않으면, 키를 누르고 있지 않아도 계속 이동하더라고요.그 이유가 무엇인지 알 수 있을까요?