在我的游戏中,我的球员(一个球)不在x轴上移动,球只能跳跃(y轴)。水平总是在x轴上平移,并给予球员球在移动的感觉。有没有可能给我的球添加一个轨迹渲染器(或者类似的东西)?来增强球移动的感觉。图片:
(来源:barouch.fr)
z8dt9xmd1#
是的,你可以,我已经证明了这是可能的。x1c 0d1x的数据如图所示,我递归地嵌套了5个球体,每个球体都有其父球体的Z + 1。你将需要rigidbody为他们每个人,因为我们要AddForce给他们。这是最重要的部分,剧本。我有3个脚本,命名为HeadScript,BodyScript,TailScript(有点像蛇游戏,所以我这样命名它们)HeadScript:
rigidbody
AddForce
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(用于跳跃),然后我们向其自身添加力(仅向上),使其看起来像是在跳跃。然后,获取子对象(左侧的球)并调用BodyScript内部的函数ChildJump。BodyScript:
ChildJump
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:
Invoke
Jump
public void ChildJump(){ Invoke ("Jump", 0.1f); } void Jump(){ rigidbody.AddForce(new Vector3(0, 6, 0), ForceMode.Impulse); }
型最后一个脚本TailScript只包含AddForce本身,因为它没有子脚本。每个球体(头部除外)将在0.1秒延迟后从其父球体跳转,成为您所称的轨迹渲染器。现在剩下的就是为它们添加alpha材质,让它们变得更加透明,瞧!工作完成了!
1条答案
按热度按时间z8dt9xmd1#
是的,你可以,我已经证明了这是可能的。
x1c 0d1x的数据
如图所示,我递归地嵌套了5个球体,每个球体都有其父球体的Z + 1。
你将需要
rigidbody
为他们每个人,因为我们要AddForce
给他们。这是最重要的部分,剧本。
我有3个脚本,命名为
HeadScript
,BodyScript
,TailScript
(有点像蛇游戏,所以我这样命名它们)HeadScript:
字符串
HeadScript只连接到头部(最右边的球体),它需要检测keydown(用于跳跃),然后我们向其自身添加力(仅向上),使其看起来像是在跳跃。然后,获取子对象(左侧的球)并调用
BodyScript
内部的函数ChildJump
。BodyScript:
型
BodyScript被附加到除了第一个和最后一个球体之外的每个球体。父对象调用函数
ChildJump
,该函数仅包含一个函数Invoke
。Invoke
用于在一定的延迟量之后调用函数。在此代码中,延迟为0.1s。Jump
本身会调用它的子节点(左边的球)ChildJump
函数,现在你明白为什么它是递归的了。我们添加了if条件,这样当我们从最后一个球体中获取
BodyScript
分量时就不会出现任何错误,最后一个脚本只有TailScript
。TailScript:
型
最后一个脚本
TailScript
只包含AddForce
本身,因为它没有子脚本。每个球体(头部除外)将在0.1秒延迟后从其父球体跳转,成为您所称的轨迹渲染器。
现在剩下的就是为它们添加alpha材质,让它们变得更加透明,瞧!工作完成了!