728x90
반응형
using UnityEngine;
[RequireComponent(typeof(Rigidbody))]
public class Parabola : MonoBehaviour
{
public Transform m_Target;
public float m_InitialAngle = 30f; // 처음 날라가는 각도
private Rigidbody m_Rigidbody;
void Start()
{
m_Rigidbody = GetComponent<Rigidbody>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Vector3 velocity = GetVelocity(transform.position, m_Target.position, m_InitialAngle);
m_Rigidbody.velocity = velocity;
}
}
public Vector3 GetVelocity(Vector3 player, Vector3 target, float initialAngle)
{
float gravity = Physics.gravity.magnitude;
float angle = initialAngle * Mathf.Deg2Rad;
Vector3 planarTarget = new Vector3(target.x, 0, target.z);
Vector3 planarPosition = new Vector3(player.x, 0, player.z);
float distance = Vector3.Distance(planarTarget, planarPosition);
float yOffset = player.y - target.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) * (target.x > player.x ? 1 : -1);
Vector3 finalVelocity
= Quaternion.AngleAxis(angleBetweenObjects, Vector3.up) * velocity;
return finalVelocity;
}
}
728x90
반응형
'프로그램 > 유니티 스크립트 소스' 카테고리의 다른 글
[유니티 스크립트 소스] 유니티에서 윈도우 파일 브라우즈 열어서 파일 패스 얻기 (1) | 2021.06.19 |
---|---|
[유니티 스크립트 소스] 목표 위치값까지 포물선 궤적으로 오브젝트 날리기 (0) | 2021.02.21 |
[유니티 스크립트 소스] 음력 구하기 (0) | 2021.02.20 |
[유니티 스크립트 소스] 자식 오브젝트 정렬 (0) | 2021.02.09 |
[유니티 스크립트 소스] 배열, 리스트 섞기(Shuffle) (0) | 2021.02.09 |