티스토리 뷰
오늘의 til은
유니티 입문과정 9강의 도전과제 입니다
1. 화살의 발사방향을 Arm의 회전에 맞게 조정해보세요.
private void CreateProjectile()
{
// 화살을 생성합니다.
// TODO : 화살이 실제로 날라가게 구현 / 오브젝트 풀을 통한 구조 개선
Instantiate(testPrefab, projectileSpawnPosition.position, Quaternion.identity);
}
화살을 생성하는 함수입니다.
여기서 Instantiate함수는
- 유니티에서 제공하는 메소드로 오브젝트를 복사합니다.
-이 함수를 통해 생성된 게임 오브젝트는 독립적이며. 원본 개체에 대한 변화는 이에 영향을 주지 않습니다.
사용방법
Instantiate(Object original, Vector3 position, Quaternion rotation)
마지막 인자값인 Quaternion값을 적절하게 넣어주면 될 것 같습니다.
private void CreateProjectile()
{
// 화살을 생성합니다.
// TODO : 화살이 실제로 날라가게 구현 / 오브젝트 풀을 통한 구조 개선
float rotZ = Mathf.Atan2(aimDirection.y, aimDirection.x) * Mathf.Rad2Deg;
//화살 생성
Instantiate(testPrefab, projectileSpawnPosition.position, Quaternion.Euler(0, 0, rotZ));
}
TopDownAimRotaion.cs에서 각도를 구해줬던 것 처럼 rotZ를 구해주고
Quaternion.Euler()을 이용해 가져온 값을 Quaternion화 해줍니다.
2. 화살이 앞으로 나갈 수 있게 만들어 보세요.
private void CreateProjectile()
{
// 화살을 생성합니다.
// TODO : 화살이 실제로 날라가게 구현 / 오브젝트 풀을 통한 구조 개선
float rotZ = Mathf.Atan2(aimDirection.y, aimDirection.x) * Mathf.Rad2Deg;
//화살 생성 및 이동
GameObject arrow = Instantiate(testPrefab, projectileSpawnPosition.position, Quaternion.Euler(0, 0, rotZ));
arrow.GetComponent<Rigidbody2D>().velocity = aimDirection * 5.0f;
}
복사된 오브젝트를 arrow로 정의하고
GetComponent<Rigidbody2D>()로 arrow의 리기드 바디의 컴포넌트를 가져와줍니다.
velocity는 Rigidbody2D의 속도를 나타내는 속성으로 방향*속도(임의값)을 넣어줍니다.
3. 화살이 벽에 닿은 경우 사라지게 만들어 보세요.
public class ArrowScript : MonoBehaviour
{
void OnCollisionEnter2D(Collision2D collision)
{
// 충돌한 오브젝트가 "Wall" 태그를 가지고 있는지 확인
if (collision.gameObject.tag == "Wall")
{
Destroy(gameObject); // 화살 오브젝트를 파괴
}
}
}
파괴되는 스크립트를 짜줍니다
콜리더와 리기드바디 컴포넌트를 넣어주고
작성한 스크립트를 넣어줍니다.
리기드 바디의 Gravity Scale 중력 조절은 0으로 해줍니다