포물선 운동
1. Unity Physics
1) 원하는 방향으로의 포물선 운동
1 2 3 4 | void SetVelocity(Vector3 velocity) { GetComponent<Rigidbody>().velocity = velocity; } | cs |
또는
1 2 3 4 | void SetForce(Vector3 force) { GetComponent<Rigidbody>().AddForce(force, ForceMode.Impulse); } | cs |
2) 원하는 좌표로의 포물선 운동
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | Vector3 GetVelocity(Vector3 currentPos, Vector3 targetPos, float initialAngle) { float gravity = Physics.gravity.magnitude; float angle = initialAngle * Mathf.Deg2Rad; Vector3 planarTarget = new Vector3(targetPos.x, 0, targetPos.z); Vector3 planarPosition = new Vector3(currentPos.x, 0, currentPos.z); float distance = Vector3.Distance(planarTarget, planarPosition); float yOffset = currentPos.y - targetPos.y; float initialVelocity = (1 / Mathf.Cos(angle)) * Mathf.Sqrt((0.5f * gravity * Mathf.Pow(distance, 2)) / (distance * Mathf.Tan(angle) + yOffset)); Vector3 velocity = new Vector3(0f, initialVelocity * Mathf.Sin(angle), initialVelocity * Mathf.Cos(angle)); float angleBetweenObjects = Vector3.Angle(Vector3.forward, planarTarget - planarPosition) * (targetPos.x > currentPos.x ? 1 : -1); Vector3 finalVelocity = Quaternion.AngleAxis(angleBetweenObjects, Vector3.up) * velocity; return finalVelocity; } | cs |
Type | Identifier | Explain |
---|---|---|
Vector3 |
currentPos | 출발 좌표 |
Vector3 | targetPos | 도착 좌표 |
float | initialAngel | 포물선의 각도 |
Example
1 2 3 4 5 | void Fire(Vector3 target) { Vector3 velocity = GetVelocity(transform.position, target, 45f); SetVelocity(velocity); } | cs |
2. Spline
세개 이상의 좌표를 이용해 포물선을 구현 가능
Curves and Splines
소스 받기