在游戏中经常要用到类似箭矢一样的抛物线运动的效果,在最近的一个项目中就有这样一个需求。此前在之前项目中有用到过这种效果,在此做一个总结。
我们项目的需求是在没有物理引擎的情况下模拟抛体运动,故此次介绍的是一个通用的方案。
项目中的需求是已知起点,终点,模拟从起点射到终点的抛物线。在此情况下,初速度,初始角度都能影响终点位置。
现在介绍的是基于初始速度的方案。
void Start()
{
float topY = m_startPos.y > endPos.y ? m_startPos.y + 100 : endPos.y + 100; //选一个最高点
float h_down = topY - endPos.y; //下落距离
float t_down = Mathf.Sqrt(h_down * 2 / G); //下落时间
float h_up = topY - m_startPos.y;//上升距离
float t_up = Mathf.Sqrt(h_up * 2 / G);//上升时间
V0 = G * t_up;//上升初速度
float curDisX = endPos.x - m_startPos.x;//水平距离
m_speedX = Mathf.Abs(curDisX / (t_up + t_down));//水平速度
}
void Update()
{
float speedY = (float)V0;
float speedX = m_dir * m_speedX ;
transform.localPosition = new Vector3(transform.localPosition.x + speedX, transform.localPosition.y + speedY, 0);
V0 -= G;
//刷新物体角度
float angle = Mathf.Atan2(speedY, speedX);
transform.localEulerAngles = new Vector3(0, 0, angle * 180 / Mathf.PI);
}
本文地址:https://blog.csdn.net/doowind/article/details/107342047
如对本文有疑问, 点击进行留言回复!!
解决Android10读取不到/sdcard/、/storage/emulated/0/文件的问题
Codeforces Round #649 (Div. 2)-B. Most socially-distanced subsequence(思维)
IOS开发教程第一季之UI进阶day2合并IOS学习013--App启动过程、多控制器管理
网友评论