Answers:
您可以使用粒子系统和着色器轻松完成此操作。设置粒子系统以每X毫秒释放1个粒子,最多释放3个粒子。(根据您想要尾随精灵的距离选择一个X。)对于粒子,请使用与角色当前精灵相同的图像,但使用不同的材质。在材质上尝试一些Alpha混合着色器,以在尾随的粒子上获得所需的效果。
如果您想变得更聪明,可以根据角色的当前速度调整最大粒子数和其他设置。
这是一个我仅用1个Quad,1个精灵,2种材质和一个粒子系统就能完成的示例。
我将粒子系统附加到Quad,然后将Quad设置为使用Sonic Sprite。我仅使用“粒子系统”的“发射”,“生命周期内的颜色”和“渲染器”设置。
最大粒子数:5
模拟空间:世界
启动寿命:1
起始速度:0
使用寿命内的颜色:从白色(Alpha 255)变为黑色(Alpha 0)
渲染器材质:使用与原始图像相同的图像,但带有“粒子/ Alpha混合”着色器。
就像粒子系统解决方案一样,您可以使用2dtoolkit来创建相同的效果。向角色添加3个子级游戏对象,并且仅将一个精灵附加到角色上。根据需要更改Alpha和颜色。然后,您可以根据角色的速度改变精灵的本地位置:
myTransform.localPosition = characterSpeed * distanceFactor;
如果要平滑或交错放置,它可以保存绘制调用(与粒子相比),并可以完全控制效果的散布。
尽管LVBen提供的粒子系统解决方案可以正常工作,但在将2D Toolkit用于精灵时,它并不是最合适的解决方案。主要原因是不可能将粒子系统中的幻影轨迹材料与主预制件的当前精灵动画同步。
这是我最终使用的2D Toolkit友好解决方案。
对于您要从中获得幻影痕迹的预制件,请在其上附加一个空的游戏对象以用作根。在此根目录下,附加任意数量的tk2dSprite或tk2dSpriteAnimator(取决于您是否要使用动画精灵)(我添加了4个)游戏对象,并适当调整它们的颜色alpha值以实现重影/渐隐效果。
在顶级父级Update中
// AmountToMove is a Vector3 of the amount we will translate this gameobject.
float y = (int)AmountToMove.y == 0 ? 0 : -AmountToMove.y;
float distanceFactor = 0.05f;
for (int i = 0; i < GhostingRoot.childCount; ++i) {
// Based on the player's current speed and movement along the x and y axes,
// position the ghost sprites to trail behind.
Vector3 ghostSpriteLocalPos = Vector3.Lerp(
GhostingRoot.GetChild(i).localPosition,
new Vector3((-CurrentSpeed * distanceFactor * i),
(y * distanceFactor * i), 0),
10f * Time.deltaTime);
// GhostingRoot is the root gameobject that's parent to the ghost sprites.
GhostingRoot.GetChild(i).localPosition = ghostSpriteLocalPos;
// Sync the animations.
// _ghostSprites is a List of the tk2dSpriteAnimator ghost sprites.
_ghostSprites[i].Play(SpriteAnimator.CurrentClip.name);
_ghostSprites[i].Sprite.FlipX = Sprite.FlipX;
}
此解决方案将在将重影精灵的动画与主精灵同步时创建尾随的重影效果。