- 한 축으로 타겟(targetAngle) 지점까지 회전
object.transform.eulerAngles = new Vector3(0, 0, Mathf.LerpAngle
(object.transform.eulerAngles.z, targetAngle, Time.deltaTime* fSpeed));
public Transform m_kTargetTrans;
private Transform m_kCachedTrans;
private const float m_fMoveSpeed = 1.0f;
void Start()
{
m_kCachedTrans = gameObject.GetComponent<Transform>();
}
private void UpdatePosition()
{
Vector3 kDir = m_kTargetTrans.position - m_kCachedTrans.position;
kDir.Normalize(); // 정규화 하면 정속 주행 안하면 감속 주행(값으 크기 차로 인해)
kDir *= m_fMoveSpeed * Time.deltaTime;
m_kCachedTrans.position -= kDir;
}
private void FixedUpdate()
{
Vector2 kTargetVel = GetComponent<Rigidbody2D>().velocity; // 속도(방향과 속력)
Vector2 kDir = kTargetVel.normalized; // 정규화(방향만 축출)
fDegree = Mathf.Atan(kDir.y / kDir.x) * Mathf.Rad2Deg; // Atan을 구한 뒤 Degree로 변환
transform.rotation = Quaternion.Euler(0, 0, fDegree); // 회전 적용
}
public Transfrom kPlayerTrans;
public Transfrom kEnemyTrans;
const float fCloseDistance = 3.0f;
private void LastUpdate()
{
// 백터의 뺄셈으로 구하기(정확한 거리를 알아내야 할 때)
float fDistance = Vector3.Distance(kPlayerTrans.position, kEnemyTrans.position);
// 백터의 크기를 구한 뒤 뺄셈으로 구하기(속도 느림)
float fDistance = (kPlayerTrans.position - kEnemyTrans.position).magnitude;
// 백터의 제곱근의 크기끼리의 뺄샘으로 구하기(두 백터간 일정 간격의 크기가 필요할 때)
float fDistanceSqr = (kPlayerTrans.position - kEnemyTrans.position).sqrMagnitude;
// ex 근접 거리도 제곱근으로 배교 한다.
if(fDistance < (fCloseDistance * fCloseDistance) )
Debug.Log ("공격");
else
Debug.Log ("이동");
}
댓글
댓글 쓰기