<5주차 과제>
1번 필수과제- 런게임 만들기
100미터로 길이는 고정중력 / physics 세팅 등은 건들이지 말것
2d/3d 둘 중 하나 선택하여 개발2d/3d에 따라 오브젝트 다른 콜라이더 정의 (폴리곤 / 메쉬콜라이더)
바닥블록은 3개 생성하여 구덩이 2개 개발
구덩이에 빠질 경우 바닥에 트리거 처리 하여 게임오버처리 (로그 / 오브젝트 표시)
이동은 velocity로 개발
가운데 블록에는 좌우로 움직이는 적 개발
적 부딫히면 로그로 처리점프는 addforce / velocity 중 하나로 개발
2번- 선택과제
100미터가 아닌 무한 생성하는 런게임 제작Instantiate / Prefab 사용어드밴티지로 플레이어 고정 with 바닥 블록, 적이 우에서 좌로 움직이게 작업
2번 심화과제를 입맛대로 개발해봤습니다.
2D Runner game!
- 구현할 내용
- 플레이어는 좌우로 움직이지 않고 점프, 슬라이드 등만 할 수 있다.
- 블록, 적(움직이는 적과 스파이크)이 무한 생성된다.
- 적은 왼쪽 방향으로 움직인다.
- 플레이어가 적에게 닿으면(충돌) 점수가 깎인다. (2점씩 깎인다)
- 만약 동전을 먹을 시 동전종류 별로 점수를 받을 수 있다.→ (브론즈: 1점, 실버:2점, 골드: 3점)
- 적에게 5번이상 맞으면 게임오버된다.
- 플레이어가 화면 밖으로 나가면 게임오버 된다.
- 게임오버 시 씬전환으로 최종점수와, 지금까지 플레이 중 최고점수, 다시하기를 제공한다.
시연영상
코드 정리는 https://heeyeon9578.notion.site/2D-Runner-game-5bae36ac0fc040d38acae162492f0114 에 되어 있습니다.
목요일 수업
1. 점프 구현, collider, contact
rgbd.AddForce(Vector3.one, ForceMode.Force);
// float xSpeed = 10f;
// Vector3 vec = rgbd.velocity;
// vec.x += xSpeed + Alpha;
// rgbd.velocity = vec;
//
가속도* 시간 = 속도/ 속도*시간= 거리
//rgbd.velocity.y += Physics.gravity.y * Time.fixedDeltaTime;
// 중력 구현부
// float xSpeed = 10f;
// Rigidbody rgbd = this.GetComponent<Rigidbody>();
// Vector3 speed = rgbd.velocity;
// speed.x = xSpeed;
// speed.y += Physics.gravity.y * Time.fixedDeltaTime;
// rgbd.velocity = speed;
2. effector-> 2D에서만 사용가능
surface effector-> 가장자리면 관련된 이펙터
Buoyancy effector: 부력 관련 이펙터
- Density: 크면 클수록 부력 효과가 높아집니다.
3. tunneling 줄이는 방법
1. timescale 줄이기
time deltatime 은 cpu에 종속되어 값을 변경할 수 없음.
fixedupdate는 프로젝트 설정에서 값을 변경할 수 있음. (projectsetting-> time-> fixed timestep 값)
2. collision detection
discrete-> continuous 로 변경하기 (반복적 검사)
4. boxcast: 박스 사이즈(1/2) 만큼의 캐스트를 쏘는 것(흔적을 따라가는 것)
Physics.OverlapBox(transform.position,); : 처음에 정해진 박스크기만큼만 검사 (영역을 지정해두는것)
-> 여러 오브젝트를 감지하고 싶다면 OverlapBoxAll 메서드를 사용하면 좋습니다.
boxcast 사용이유? : layer mask
4. lerp: 선형보간: 왠만하면 주기함수랑 같이 사용
Mathf.Lerp()
//숫자 간의 선형 보간
Vector2.Lerp()
//Vector2간의 선형 보간
Vector3.Lerp()
//Vector3간의 선형 보간
Quaternion.Lerp()
//Quaternion 간의 선형 보간
Vector2 pos = Vector2.Lerp(new Vector2(0, 0), new Vector2(100, 100), 0.5);
-> Vector2(50, 50)의 값이 반환
public static Vector3 Lerp(Vector3 a, Vector3 b, float t);
a | 시작 값. t=0일 때 반환 |
b | 끝 값. t=1일 때 반환 |
t | a와 b사이를 보간될 때 사용되는 값 |
5. 동적생성, 큐, 선입선출
1) 블록크기, 블록사이의 거리 랜덤으로 생성하기
private void Recycle()
{
//스케일에 따라 다른 크기의 블록 생성
Vector3 scale = new Vector3(
Random.Range(minSize, maxSize), 1f, 1f);
Vector3 position = nextPosition;
position.x += scale.x * 0.5f;
position.y += 0.5f;
Transform o = objectQueue.Dequeue();
o.localScale = scale;
o.localPosition = position;
objectQueue.Enqueue(o);
//다음에 생성할 블록끼리의 거리도 랜덤
nextPosition += new Vector3(
Random.Range(minGap, maxGap) + scale.x, 0, 0);
}
2) 블록들을 큐로 생성하기 : 선입선출
private Queue<Transform> objectQueue;
objectQueue = new Queue<Transform>(numberOfObjects);
for(int i = 0; i < numberOfObjects; i++){
objectQueue.Enqueue((Transform)Instantiate(prefab));
}
nextPosition = startPosition;
for(int i = 0; i < numberOfObjects; i++){
Recycle(); // Init
}
6. 생애주기
Awake : 스크립트가 실행될 때 한번만 호출 (Coroutine 사용 불가)
OnEnable :인스펙터뷰에서 체크를 통해서 게임 오브젝트를 활성화 할 때 사용됩니다. (활성화 할 때마다 호출)
Start : Update 함수가 호출되기 전에 한번만 호출됩니다.
FixedUpdate : 주로 물리 엔진을 사용하는 경우 일정 시간 간격으로 힘을 가할 때 사용하는 함수입니다. 발생 주기가 일정합니다. (Default : 0.02초)
Update : 프레임마다 호출되는 함수로 게임의 핵심 로직에 사용됩니다. 스크립트가 활성화 되있어야 사용 가능하고, 주기가 일정하지 않습니다.
LateUpdate : 모든 Update 함수가 실행되고 나서 호출됩니다. 주로 카메라 이동 로직에 사용합니다.
OnDisable : 게임 오브젝트 또는 스크립트가 비 활성화 되었을 때 호출됩니다. (Coroutine 사용 불가)
OnDestroy : 오브젝트 생존기간의 마지막 프레임이 업데이트 된 후 실행됩니다. (Object.Destroy 또는 씬 종료 시)
OnApplicationQuit : 응용프로그램 종료 전에 모든 오브젝트에서 호출됩니다. 에디터에서는 플레이 모드를 중지하면 나타납니다.
-참고: https://itmining.tistory.com/47
7. 코루틴-협동하는 루틴
최소한 하나의 yield return 구문이 있어야 함.
시작할 시점과 끝날 시점이 정해져 있으면 코루틴 사용하면 좋음.
매개변수를 넘길 수 있지만 ref 는 사용할 수 없음.(Invoke보다 좋은 점)
MonoBehaviour가 있어야 코루틴이 돌아감.
IEnumerator 함수이름()
{
yield return // + 조건
// 함수 내용
}
8. 디버그
void Start()
{
Debug.Log("이번 로그는<b>볼드</b>다");
Debug.Log("이번 로그는<i>이탤릭</i>다");
Debug.Log("이번 로그는<size=20>사이즈</size>다");
Debug.Log("이번 로그는<color=green>컬러</color>다");
}
9. 기즈모: 씬에 있는 게임 오브젝트와 관련된 그래픽
DrawCube - 타겟을 중심으로 박스를 그립니다.
DrawFrustum - 카메라 절 두체를 그립니다.
DrawGUITexture - 씬에 텍스처를 그립니다.
DrawIcon - 씬뷰위치에 아이콘을 그립니다.
DrawLine - 타겟부터 타깃까지 직선을 그립니다.
DrawSphere - 타겟을 중심으로 구체를 그립니다.
DrawMesh - 메쉬를 그립니다.
DrawRay - 레이를 그립니다.
DrawWireCube - 와이어큐브를 그립니다.
DrawWireMesh - 와이어메쉬를 그립니다.
DrawWireSphere - 와이어구체를 그립니다.
출처
docs.unity3d.com/kr/530/ScriptReference/Gizmos.html
10. 배치
: 배칭(Batching)이란 동일한 메터리얼을 공유하는 오브젝트들을 묶어서 드로우콜하는 기법이다.
동일한 메터리얼을 공유하는 오브젝트만 배칭할 수 있다.
11. 싱글톤, 옵저버 패턴
1) 싱글톤
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GameManager : MonoBehaviour
{
/* // 싱글톤 //
* instance라는 변수를 static으로 선언을 하여 다른 오브젝트 안의 스크립트에서도 instance를 불러올 수 있게 합니다
*/
public static GameManager instance = null;
private void Awake()
{
if (instance == null) //instance가 null. 즉, 시스템상에 존재하고 있지 않을때
{
instance = this; //내자신을 instance로 넣어줍니다.
DontDestroyOnLoad(gameObject); //OnLoad(씬이 로드 되었을때) 자신을 파괴하지 않고 유지
}
else
{
if (instance != this) //instance가 내가 아니라면 이미 instance가 하나 존재하고 있다는 의미
Destroy(this.gameObject); //둘 이상 존재하면 안되는 객체이니 방금 AWake된 자신을 삭제
}
}
//게임 내에서 씬이동시 유지하고 픈 골드 값(변수)
public int myGold = 0;
출처: https://art-life.tistory.com/130 [무꼬's Art Life:티스토리]
2) 옵저버(다른 객체들한테 연락이 가서 자동으로 내용이 갱신되는 방식. 1:N 의존성)
: 델리게이트가 곧 이 옵저버 패턴
<옵저버>
// 옵저버 추상클래스
// : 옵저버들이 구현해야 할 인터페이스 메서드
public abstract class Observer
{
// 상태 update 메서드
public abstract void OnNotify();
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 옵저버 구현클래스
public class ConcreteObserver1 : Observer
{
// 대상타입의 클래스에서 이 메소드를 실행시킴
public override void OnNotify()
{
Debug.Log("옵저버 클래스의 메서드 실행 #1");
}
}
12. UI
Anchors의 min,max 값을 다르게 주면 영역을 지정할 수 있습니다.
이는 화면 비율에 따라 유동적으로 바뀌어 반응형 화면을 구성할 수 있습니다.
——————————————————————————
유데미코리아 바로가기 : https://bit.ly/3b8JGeD
본 포스팅은 유데미-웅진씽크빅 취업 부트캠프 유니티 1기 과정 후기로 작성되었습니다.
'대외활동 > starters 부트캠프 feat.웅진씽크빅' 카테고리의 다른 글
유데미 스타터스 취업 부트캠프 유니티 1기 8주차 학습 일지 (0) | 2022.08.14 |
---|---|
유데미 스타터스 취업 부트캠프 유니티 1기 7주차 학습 일지 (0) | 2022.08.07 |
유데미 스타터스 취업 부트캠프 유니티 1기 5주차 학습 일지 (1) | 2022.07.24 |
[유데미] "쉽게 배우는 C# 알고리즘 입문" 리뷰 (0) | 2022.07.17 |
유데미 스타터스 취업 부트캠프 유니티 1기 3주차 학습 일지 -2 (0) | 2022.07.10 |