在我的游戏中,我的玩家(球)不会在 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
内部的函数 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 材质,使它们变得更加透明,瞧!工作完成了!