Vector3 targetDirection = transform.InverseTransformPoint(currentTarget.transform.position);
targetDirection.z = 0;
float zAngleDiff = Vector3.SignedAngle(rotateAxisZ.up, targetDirection, -transform.forward);
if (Mathf.Abs(zAngleDiff) > 90) zAngleDiff = Vector3.SignedAngle(-rotateAxisZ.up, targetDirection, -transform.forward);
float zRot = rotateSpeedZ * Time.fixedDeltaTime;
if (Mathf.Abs(zAngleDiff) <= zRot) {
rotateAxisZ.Rotate(0, 0, -zAngleDiff);
} else {
rotateAxisZ.Rotate(0, 0, zRot * -Mathf.Sign(zAngleDiff));
}
targetDirection = transform.InverseTransformPoint(currentTarget.transform.position);
float xAngleDiff = Vector3.SignedAngle(rotateAxisX.forward, targetDirection, -rotateAxisZ.right);
float xRot = rotateSpeedX * Time.fixedDeltaTime;
if (Mathf.Abs(xAngleDiff) <= xRot) {
rotateAxisX.Rotate(-xAngleDiff, 0, 0);
} else {
rotateAxisX.Rotate(xRot * Mathf.Sign(-xAngleDiff), 0, 0);
}
지표면에 좌우 회전하는 몸체와 수직 각도를 맞추는 포신 부분 이동을 분리해서
터-렛스럽게 움직이는 짧막한 코드.
요렇게 생긴 구조에서 돌아가도록 며칠을 삽질하였다.
요즘 집중이 잘 안되긴 하지만 고작 이걸로 며칠 하다니
나란 코드몽키...