如何在Unity3D中渲染非移动对象的轨迹

rkue9o1l  于 2023-11-22  发布在  其他
关注(0)|答案(1)|浏览(163)

在我的游戏中,我的球员(一个球)不在x轴上移动,球只能跳跃(y轴)。
水平总是在x轴上平移,并给予球员球在移动的感觉。
有没有可能给我的球添加一个轨迹渲染器(或者类似的东西)?来增强球移动的感觉。
图片:

(来源:barouch.fr

z8dt9xmd

z8dt9xmd1#

是的,你可以,我已经证明了这是可能的。
x1c 0d1x的数据
如图所示,我递归地嵌套了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(用于跳跃),然后我们向其自身添加力(仅向上),使其看起来像是在跳跃。然后,获取子对象(左侧的球)并调用BodyScript内部的函数ChildJump
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,该函数仅包含一个函数Invoke
Invoke用于在一定的延迟量之后调用函数。在此代码中,延迟为0.1s。
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材质,让它们变得更加透明,瞧!工作完成了!

相关问题