1. awake 함수
스크립트 인스턴스가 로드 되는 중에 호출되는 함수, 스크립트 비활성인 상태에서도 호출됨
(인스턴스가 만들어진 후에 로드 되는 함수)
씬에 있는 모든 게임 오브젝트의 awake 함수는 무작위로 호출되기 때문에 awake 함수안에서 다른 게임 오브젝트를 호출 할 때 그 오브젝트가 인스턴스화 되지 않았을 수도 있기 때문에 문제가 발생
그래서 awake 함수에서는 자신의 인스턴스 자체를 참조하거나 변수를 초기화 하는데 사용한다
public class gameManager : MonoBehaviour
{
public static gameManager gameManage;
void Awake()
{
// this -> "gameManager"인스턴스를 gameManage 변수에 저장
gameManage = this;
}
}
Start()는 Awake()가 끝난 이후 호출되므로 해당 클래스 내부에서 다른 객체를 참조하는 경우 Start() 내부에 적용 할 수 있다. Awake()가 종료되면 모든 게임오브젝트는 인스턴스화가 된 상태이므로 Start()에서 다른 인스턴스를 참조 할 수 있음
public class gameManager : MonoBehaviour
{
public GameObject square;
public static gameManager gameManage;
void Awake()
{
// this -> "gameManager"인스턴스를 gameManage 변수에 저장
gameManage = this;
InvokeRepeating("makeSquare", 0.0f, 0.5f);
}
public void makeSquare()
{
Instantiate(square);
}
}
"square"라는 게임오브젝트의 awake()가 실행이 안된 상태여도 인스턴스화를 강제로 하면 참조 할 수 있음
참고 : https://gamedevbeginner.com/start-vs-awake-in-unity/
객체지향 언어)
1. 객체들을 각각 독립적으로 분할해서 작업 할 수 있기 때문에 절차지향 방식보다 협업이 쉬워진다
ex) 자동차를 만들 때 여러명의 직원들이 여러 개의 부품을 다같이 만들고 조립도 다같이 한다면 어딘가에서 문제가 발생했을 때 어떤 부품에서 문제가 생겼는지 여러명이 동시에 찾다보니까 찾기가 어려워진다.
작업이 소규모라면 금방 해결되겠지만, 작업이 점차 커지면 오히려 복잡해져서 대규모의 인원이 투입되도 혼란만 발생시킨다.
2. 디버깅이 절차지향 언어보다 쉽다
어떤 파트에 문제가 생겼으면 그 파트를 담당하는 객체부분을 찾아가서 문제를 확인하면 되기 때문에 직관적으로 빠르게 파악 할 수 있다.
3. 확장성이 용이하다
객체들이 독립적으로 나뉘어져 있기 때문에 새로운 객체를 만들거나 기존의 객체의 코드를 수정해도 다른 객체에 영향이 덜 가기 때문에 확장성이 용이함
4. 코드 재사용성
기존에 만들어진 객체를 다른 객체에 붙여서 사용가능하기 때문에 새롭게 만들어야 되는 비용이 절약됨
Object(객체), Class, Instance의 정의)
1. Object
OOP에서의 객체는 int, float, 사용자 정의 자료형 같은 형식 또는 개념
2. Class
객체를 기술하기 위한 문법
(객체의 추상적인 형식을 코드상으로 나타낸 것)
3. Instance
class가 실제로 존재하게 되어서 사용 할 수 있는 단계
2. 오브젝트가 화면 밖으로 나갔을 때만 제거하는 방법
정사각형이 존재하는 위치(y 좌표)를 가져와서 정사각형의 가로 or 세로 길이의 반을 더했을 때 -5 이하라면 background 내부에서 벗어난 것이기 때문에 오브젝트를 제거 할 수 있음
만약에 정사각형이 아니라 직사각형, 타원 형태의 도형이라면 계산법이 다르기 때문에 이 공식을 적용 할 수 없음
// 정사각형(square) 가로길이 가져오기, y축(세로길이)을 가져와도 동일
float half = transform.localScale.x / 2f;
if(half + transform.position.y <= -5)
{
Destroy(gameObject);
}
'게임개발 > 유니티 엔진' 카테고리의 다른 글
애니메이션 State 패턴 적용 (0) | 2024.02.26 |
---|---|
에니메이션 Lerp (0) | 2024.02.22 |
Raycast (0) | 2024.02.19 |
싱글톤 패턴 적용 (0) | 2024.02.02 |
[스파르타 국비] 유니티로 만드는 게임개발 1주차 (0) | 2024.01.20 |