Notice
Recent Posts
Recent Comments
Link
박민혁의 개발
유니티 유도 미사일 본문
public class HumanAttackintelligentmissile : MonoBehaviour
{
bool targeting;
GameObject target;
Bullet _bullet;
private float turningForce;
public bool ready;
int targetName;
public void init(int i)
{
if (i == 1)
{
targeting = false;
_bullet = GetComponentInParent<Bullet>();
turningForce = 15f;
targetName = 7;
ready= true;
}
else
{
transform.localScale = new Vector3(5,5,0);
targeting = false;
_bullet = GetComponentInParent<Bullet>();
turningForce = 7f;
targetName = 8;
ready = true;
}
}
// Update is called once per frame
void Update()
{
if (targeting)
{
if (target == null) { return; }
Vector2 dir = (target.transform.position - transform.position).normalized;
_bullet.gameObject.transform.right = Vector3.Slerp(_bullet.gameObject.transform.right.normalized, dir, turningForce * Time.deltaTime);
}
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (ready &&!targeting && collision.gameObject.layer == targetName)
//TODO 먼훗날 팀킬 패치 하기
{
targeting = true;
target= collision.gameObject;
}
}
}
코드의 풀버전이지만 사실 포인트는 아래
if (targeting)
{
if (target == null) { return; }
Vector2 dir = (target.transform.position - transform.position).normalized;
_bullet.gameObject.transform.right = Vector3.Slerp(_bullet.gameObject.transform.right.normalized, dir, turningForce * Time.deltaTime);
}
타겟이 있다면 현재 트랜스폼의 오른쪽(2d환경, 오른쪽이 앞인 스프라이트를 가진 물체임)
을 현재 방향과 타겟 방향을 보간 처리 해준다 (안할시 너무 급작스럽게 변화함)
업데이트에서 돌리기 때문에 time.deltaTime 까지
현재 이코드는 젤 처음 만나는 대상을 타겟팅 하지만
좀더 변형 시킨다면 실시간으로 가까운 타겟을 업데이트에서도 돌리는 응용이 가능하다
'TIL' 카테고리의 다른 글
상태이상 구현하기 그런데 최적화를 곁들인 (0) | 2023.12.19 |
---|---|
데바데 스킬 체크 구현 (1) | 2023.12.19 |
특정 대상 중심으로 원하는 방향에 오브젝트 생성 , 마우스 방향으로 오브젝트 생성 (0) | 2023.12.19 |
컴포넌트 체크 이렇게 하기 (1) | 2023.12.19 |
캐릭터 주위를 원 운동 하는 코드 (0) | 2023.12.19 |