在我的游戏中,我的玩家(球)不会在x轴上移动。球可以跳(Y轴)。
关卡总是在x轴上平移,并向球员提供球移动的感觉。
我的问题是:是否可以在我的球上添加一个线索渲染器(或类似的东西)?强化球的移动感觉?
作为图片..:the effect I want to have http://www.barouch.fr/bouncyball.png
谢谢!
答案 0 :(得分:2)
是的,你可以,我已经证明这是可能的。
正如您在图片中看到的那样,我以递归方式嵌套 5个球体,每个球体都有其父级的 Z + 1 。
你们每个人都需要rigidbody
,因为我们要AddForce
给他们。
这是重要的部分,脚本
我有3个脚本,名为HeadScript
,BodyScript
,TailScript
(有点像蛇游戏,所以我将它们命名为)
用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(用于跳跃),然后我们向自身添加力(仅向上),因此它看起来像是在跳跃。然后,获取子对象(左侧的球)并调用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附加到除第一个和最后一个之外的每个球体。父对象调用仅包含1个函数ChildJump
的函数Invoke
。
Invoke
用于在一定量的延迟后调用函数。在此代码中,延迟为0.1秒。
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材料,使它们变得更加透明,瞧!工作完成了!