在我的游戏中,我的球员(球)不会在 x 轴上移动。球只是可以跳跃(y轴)。
关卡始终沿 x 轴平移,并为玩家提供球在移动的感觉。
我的问题是:是否可以在我的球上添加轨迹渲染器(或类似的东西)?加强球运动的感觉?
如图.. :(来源:barouch.fr)
谢谢!
在我的游戏中,我的球员(球)不会在 x 轴上移动。球只是可以跳跃(y轴)。
关卡始终沿 x 轴平移,并为玩家提供球在移动的感觉。
我的问题是:是否可以在我的球上添加轨迹渲染器(或类似的东西)?加强球运动的感觉?
如图.. :(来源:barouch.fr)
谢谢!
是的,你可以,而且我已经证明这是可能的。
正如您在图像中看到的,我递归地嵌套了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
inside的函数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 材质,使它们变得更加透明,瞧!工作完成了!