public class Blackhole : MonoBehaviour{ public Transform absorbCenter; public float pullForce = 10f; public float maxSpeed = 15f; public float minSize = 0.2f; public float absorbDistance = 0.5f; public float effectStartDistance = 5f; // 크기 감소가 시작되는 거리 private void OnTriggerStay(Collider other) { Debug.Log("[Blackhole] OnTriggerStay"); // props 태그가 아니면 무시 if (!other.CompareTag("Props")) return; // Rigidbody 없으면 무시 Rigidbody rb = other.attachedRigidbody; if (rb == null) return; // 아직 로봇 팔에 붙어 있는 중이면 무시 if (rb.isKinematic) return; // 중심 방향으로 힘 적용 Vector3 direction = (absorbCenter.position - other.transform.position).normalized; float distance = Vector3.Distance(absorbCenter.position, other.transform.position); // 속도 늘리기 if (rb.velocity.magnitude < maxSpeed) { float distanceFactor = Mathf.Clamp01(1f / Mathf.Max(distance, 0.1f)); rb.AddForce(direction * pullForce * distanceFactor, ForceMode.Acceleration); } // 크기 줄이기 if (distance < effectStartDistance) { // 거리 비율 (0=가까움, 1=멀리) float t = Mathf.InverseLerp(effectStartDistance, absorbDistance, distance); // 스케일 보간 (멀리 있을 땐 1, 가까울수록 minSize) float scaleFactor = Mathf.Lerp(1f, minSize, t); other.transform.localScale = Vector3.one * scaleFactor; } } }
로봇 팔이 이상하게 움직이던 오류 수정
public class MoveState : BasePlayerState{ public Vector3 RotationAxis = Vector3.up; private float currentAngle = 0f; private float targetAngle = 0f; public override eTransitionType ChangableStates { get; } = eTransitionType.IdleState | eTransitionType.DownState; public override void Enter(RobotArmController controller) { currentAngle = controller.Body.localRotation.eulerAngles.y; targetAngle = currentAngle; } public override void HandleInput(RobotArmController controller) { // A, D 키 입력 (axisInput) 기준으로 목표 회전 각도 변경 if (axisInput != 0) { float deltaAngle = axisInput * controller.GetSpeed() * Time.deltaTime; targetAngle += deltaAngle; } base.HandleInput(controller); } public override void LogicUpdate(RobotArmController controller) { currentAngle = Mathf.MoveTowardsAngle(currentAngle, targetAngle, controller.GetSpeed() * 0.5f); // 보간 Debug.Log($"[RobotArm] TargetAngle: {targetAngle}, CurrentAngle: {currentAngle}"); controller.Body.localRotation = Quaternion.AngleAxis(currentAngle, RotationAxis); } public override void Exit(RobotArmController controller) { } }
문제 1. 내가 어디는 Rotation, 어디는 LocalRotation을 써서 생긴 문제였음