首先来看实现效果:
做的时候距离现在有好几个月了 关键代码只有几行
//生成轨迹点 且轨迹点随着距离越来越小 这里的轨迹点就是gif图里的紫色轨迹
private void PrepareDots()
{
dotsList = new Transform[dotsNumber];
dotPrefab.transform.localScale = Vector3.one * dotMaxScale;
float scale = dotMaxScale;
float scaleFactor = scale / dotsNumber;
for (var i = 0; i < dotsNumber; ++i)
{
dotsList[i] = Instantiate(dotPrefab, null).transform;
dotsList[i].parent = dotsParent.transform;
dotsList[i].localScale = Vector3.one * scale;
if (scale > dotMinScale)
scale -= scaleFactor;
}
}
//根据物体拖动的位置和力 来确定轨迹点的位置
//第一个参数是物体当前的位置
//第二个参数是鼠标给予物体施加的带方向的力
public void UpdateDots(Vector3 ballPos, Vector2 forceApplied)
{
timeStamp = dotSpacing;//dotspacing 相邻轨迹点之间的距离
for (var i = 0; i < dotsNumber; ++i)
{
pos.x = (ballPos.x + forceApplied.x * timeStamp);
pos.y = (ballPos.y + forceApplied.y * timeStamp) - (Physics2D.gravity.magnitude * timeStamp * timeStamp) / 2f;
dotsList[i].position = pos;//在for循环里形成类似于抛物线的轨迹
timeStamp += dotSpacing;//timeStamp 时间
}
}
关于这一行代码的解释:其实可以看作物理上的平抛运动(应该是⊙▽⊙)
喜欢用unity做网络游戏开发的朋友可以看看