最近在开发游戏,有渐开线发散性子弹技能需求。有同事用渐开线公式制作,弄了双层For循环,代码有有差不多300多行性能也实在是看不下去于是开始研究,为此也研究了渐开线原理。  一、渐开线原理 直线在圆上纯滚动时,直线上一点K的轨迹称为该圆的渐开线,该圆称为渐开线的基圆,直线称为渐开线的发生线。 渐开线的形状仅取决于基圆的大小,基圆越小,渐开线越弯曲;基圆越大,渐开线越平直;基圆为无穷大时,渐开线为斜直线。渐开线方程为:
x=r×cos(θ+α)+(θ+α)×r×sin(θ+α)
y=r×sin(θ+α)-(θ+α)×r×cos(θ+α)   很懵,百度百科上的渐开线很容易模仿,毕竟渐开线是用于机械工程齿轮运动用的,我们游戏只要大致相同就可以,所以就是一个运动的点,并且逐步向外扩散的结果。  二、简单解决方案
public GameObject cneter;
public GameObject[] prfbs;
float r;
void Update()
{
transform.RotateAround(cneter.transform.position,Vector3.forward, speed * Time.deltaTime);
B = transform.position - cneter.transform.position;
r += Time.deltaTime;
for (int i = 0; i < prfbs.Length; i++)
{
prfbs[i].transform.position =cneter.transform.position + Quaternion.Euler(new Vector3(0, 0, i * 30))* B * r;
}
}

|