Unity

Unity 2D 유용한 구문

explosion149 2024. 10. 21.
//해당 기능은 Rendering 되는 Sprite 혹은 MeshRenderer등이 있어야 작동을 한다.
OnBecameInvisible(){} //화면에서 사라졌을경우 실행
//화면에서 사라졌을때 Editor환경에서는 Scene view 와 Game view 를 
//동시에 볼수 있는데 하나라도 보인다면 해당 기능이 작동하지 않는다.

OnBecameVisible(){} // 화면에서 보일때 실행
//위의 기능과 반대 SceneView or GameView 하나라도 보인다면 실행

//Direction 방향 구하기 
Vector2 direction = (Vector2)(target.transform.position - transform.position).normalized;

//방향에 대한 각도 구하기
//Ex) 내가 해당 방향으로 회전을 하고 싶을때  ⮕ 에서 ⭣ 방향 등으로 해당 target 방향으로 회전
float angle = Mathf.Atan2(direction.y,direction.x) * Mathf.Rad2Deg;
//Atan2는 y,x 값으로 라디안 값으로 변환하는것이다.
//Rad2Deg 에서 2는 to를 말하며 라디안에서 도 로 변환하는것을 의미한다.
Quaternion rotation = Quaternion.Euler(0,0,angle);
//해당 각도 rotation값으로 변경하기
//이것에 대한 깊은 이해도는 오일러와 짐벌락에 대한 공부가 필요하다.
transform.rotation = rotation;

//여기서 사용된 target은 Transform target이라는 가상의 대상이다.
//해당 지정 대상을 사용하려면
//public 형태로 선언하여 인스펙터 상에 고정을 하던지 아니면 동적으로 찾아서 할당을 해줘야 할것이다.
// 거리 구하기 얼마 만큼 떨어져있나?
float dist = Vector3.Distance(target.position,transform.position);
//Vector2.Distance도 있으나 계산의 차이가 있다고 한다. 
//Vector2.Distance Vs Vector3.Distance 관련 게시물을 읽어 보기 추천한다.​
 if (Input.GetKey(KeyCode.Space))
 {
 	//GetKey = 해당 키의 입력이 있는 한 지속
    //KeyCode.Space 해당 키는 Space다
    // 매 프레임 마다 실행
 } 
 
 if (Input.GetKeyDown(KeyCode.Space))
 {
 	//GetKeyDown = 특정 키가 눌러졌을 경우 1번
    //KeyCode.Space 해당 키는 Space다
 }
 
 if (Input.GetKeyUp(KeyCode.Space))
 {
 	//GetKeyUp = 특정 키가 눌러졌다 올라왔을 경우 1번
    //KeyCode.Space 해당 키는 Space다
 }

// 게임 실행시 가장 먼저 실행 되는 구간 깨어나라
// 1 번만 실행된다.
void Awake()
{

}
// gameObject 가 Active == true 상태 일경우 Start보다 먼저 실행되는 구간
// Active == true 될때 마다 실행된다.
void OnEnable()
{
	
}

// 게임 실행시 Update 보다 먼저 실행되는 구간
// 1 번만 실행된다.
void Start()
{

}

//매 프레임마다 자동으로 실행된다.
//해당 게임 오브젝트가 Active == true 상태 일경우 실행된다.
void Update()
{
	Shoot(); // 매 프레임마다 실행할 기능
}

//
void FixedUpdate()
{
}

// 쿨타임의 주기를 0.5초 마다
float CoolTimeInterval = 0.5f;
bool isSpaceKeyDown;
// 해당 기능은 Update구문에서 매 프레임 마다 실행된다.
void Shoot()
{
	isSpaceKeyDown = Input.GetKeyDown(KeyCode.Space);
	//해당 쿨타임 보다 시간이 적으면 여기서 빠져나가자!!
	if(Time.time < nextBulletTime) return;//여기에 추가 조건 키입력 등을 추가 할 수 있다.
    //if(Time.time < nextBulletTime || isSpaceKeyDown == false) return;
    //다음 쿨타임
    nextBulletTime = Time.time + CoolTimeInterval;
    //실행 구문
}

//if(!(조건))return; 형태는 {}를 사용하지 않아 깔끔한 코드 작업에 도움이 된다.
// !(조건) == 해당 조건의 반전 false 라면 true 그리고 true 라면 false 참을 거짓으로 거짓을 참으로
//void On을 입력하면
//수많은 이벤트 기능들이 보일 것이다.

OnEnable(){}// 해당 게임 오브젝트가 활성화 될때 gameObject.active = true;
OnDestroy(){}// 해당 게임오브젝트가 파괴 될때 Destroy(gameObject);

//Collision과 Trigger는 각각 2D 와 3D가 있는데
//3D 가 기본이며 3D는 따로 적지 않는다.
//2D 는 적어줘야 한다.
//차이점은 Rigidbody와 Collider 모두 2d 붙은 별도의 컴포넌트를 사용한다.

//Vector2 와 Vector3의 차이 처럼 z좌표의 유무와 계산식이 조금씩 다른점이 있다.

//해당 기능은 모두 물리적 충돌 기능인 RigidBody 와 Collider를 필요로한다.

Trigger와 Collision의 차이는 직접적인 충돌의 유무이다.

Trigger는 기본적으로 관통을 한다.
Collision은 충돌체와 물리적 상호작용을한다.

//A Object 와 B Object 가 서로 Trigger상태가 아니라면 충돌시 A와 B는 서로를 밀어낼것이다.

//A Object와 B Object 가 어느 하나라도 Trigger상태라면 충돌시 A와 B는 서로를 관통한다.

// Trigger2D를 인식 하려면 Collider2D 가 필요하고 해당 콜라이더의 isTrigger = true 상태여야 한다.
// Trigger 진입
void OnTriggerEnter2D(Collider2D other){}
// Trigger 빠져나감
void OnTriggerExit2D(Collider2D other) {}
// Trigger 상태 유지
void OnTriggerStay2D(Collider2D other) {}

// 물리적 충돌 시작
void OnCollisionEnter2D(Collision2D other) {}
// 물리적 충돌 끝
void OnCollisionExit2D(Collision2D other) {}
// 물리적 충돌 진행중
void OnCollisionStay2D(Collision2D other) {}

댓글

💲 추천 글