如何在Unity3D中渲染不动物体的轨迹

问题描述 投票:0回答:1

在我的游戏中,我的玩家(球)不会在 x 轴上移动。球只能跳跃(y 轴)。

水平仪始终沿 x 轴平移,给玩家带来球在移动的感觉。

是否可以向我的球添加轨迹渲染器(或类似的东西)?加强球移动的感觉。

图片:
(来源:barouch.fr

unity-game-engine renderer particle-system
1个回答
2
投票

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

enter image description here

如图所示,我递归地嵌套 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 (用于跳跃),然后我们向其自身施加力(仅向上),因此看起来像是在跳跃。然后,获取子对象(左侧的球)并调用

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 附加到除第一个和最后一个之外的每个球体。父对象调用函数

ChildJump
,它只包含 1 个函数
Invoke

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

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

我们添加了 if 条件,这样当我们从最后一个球体(不存在)中获取

BodyScript
分量时,我们就不会收到任何错误。最后一个脚本只有
TailScript

尾部脚本:

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

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

最终脚本

TailScript
仅包含
AddForce
自身,因为它没有子级。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.