0

在我的游戏中,我的球员(球)不会在 x 轴上移动。球只是可以跳跃(y轴)。

关卡始终沿 x 轴平移,并为玩家提供球在移动的感觉。

我的问题是:是否可以在我的球上添加轨迹渲染器(或类似的东西)?加强球运动的感觉?

如图.. :(来源:barouch.fr我想要的效果

谢谢!

4

1 回答 1

2

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

在此处输入图像描述

正如您在图像中看到的,我递归地嵌套了5 个球体,每个球体都有其父级的Z + 1 。
你会需要rigidbody他们每个人,因为我们要去AddForce他们。

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

标题:

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(用于跳跃),然后我们向自身添加力(仅向上),使其看起来像在跳跃。然后,获取子对象(左侧的球)并调用ChildJumpinside的函数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 附加到除第一个和最后一个球体之外的每个球体。父对象调用ChildJump仅包含 1 个函数的函数Invoke

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

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

BodyScript我们添加了 if 条件,因此当我们从不存在的最后一个球体中获取组件时,我们不会收到任何错误。最后一个脚本只有TailScript.

尾脚本:

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

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

最终的脚本,TailScript只包含AddForce它自己,因为它没有孩子。

每个球体(头部除外)都会在其父级延迟 0.1 秒后跳跃,成为你所说的轨迹渲染器。

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

于 2014-07-22T05:55:16.247 回答