Unity3D:用于无移动对象的Trail Renderer

时间:2014-07-21 17:37:19

标签: unity3d renderer particle-system trail

在我的游戏中,我的玩家(球)不会在x轴上移动。球可以跳(Y轴)。

关卡总是在x轴上平移,并向球员提供球移动的感觉。

我的问题是:是否可以在我的球上添加一个线索渲染器(或类似的东西)?强化球的移动感觉?

作为图片..:the effect I want to have http://www.barouch.fr/bouncyball.png

谢谢!

1 个答案:

答案 0 :(得分:2)

是的,你可以,我已经证明这是可能的。

enter image description here

正如您在图片中看到的那样,我以递归方式嵌套 5个球体,每个球体都有其父级的 Z + 1 。 你们每个人都需要rigidbody,因为我们要AddForce给他们。

这是重要的部分,脚本 我有3个脚本,名为HeadScriptBodyScriptTailScript(有点像蛇游戏,所以我将它们命名为)

用HeadScript:

void Update () {
    if(Input.GetKeyDown(KeyCode.Space)){
        rigidbody.AddForce(new Vector3(0, 6, 0), ForceMode.Impulse);
        GameObject child = transform.FindChild("Sphere").gameObject;
        BodyScript childScript = child.GetComponent<BodyScript>();
        childScript.ChildJump();
    }
}

HeadScript仅附加到头部(最右边的球体),它需要检测keydown(用于跳跃),然后我们向自身添加力(仅向上),因此它看起来像是在跳跃。然后,获取子对象(左侧的球)并调用ChildJump内的函数BodyScript

BodyScript:

public void ChildJump(){
    Invoke ("Jump", 0.1f);
}

void Jump(){
    rigidbody.AddForce(new Vector3(0, 6, 0), ForceMode.Impulse);
    GameObject child = transform.FindChild("Sphere").gameObject;
    if(child.GetComponent<BodyScript>() == null){
        TailScript childScript = child.GetComponent<TailScript>();
        childScript.ChildJump();
    }
    else {
        BodyScript childScript = child.GetComponent<BodyScript>();
        childScript.ChildJump();
    }
}

BodyScript附加到除第一个和最后一个之外的每个球体。父对象调用仅包含1个函数ChildJump的函数Invoke

Invoke用于在一定量的延迟后调用函数。在此代码中,延迟为0.1秒。

Jump本身将调用其子项(左侧的球)ChildJump函数。现在你明白为什么它是递归的。

我们添加了if条件,因此当我们从最后一个球体获得BodyScript组件时,我们不会出现任何错误。最后一个脚本只有TailScript

TailScript:

public void ChildJump(){
    Invoke ("Jump", 0.1f);
}

void Jump(){
    rigidbody.AddForce(new Vector3(0, 6, 0), ForceMode.Impulse);
}

最终脚本TailScript仅包含AddForce,因为它没有子节点。

每个球体(头部除外)将在从其父级延迟0.1秒后跳跃,成为您所称的跟踪渲染器。

现在剩下的就是为每一个添加alpha材料,使它们变得更加透明,瞧!工作完成了!