【发布时间】:2016-07-25 12:42:20
【问题描述】:
我在 Unity 3D 5.3.5 中实施工作咒语时遇到问题。我有一个空的游戏对象,它是能力的父项,它只包含一个名为 Spell 的脚本,还有一个子项,它是粒子系统。出于测试目的,我将它留在资源文件夹中,以便我可以像这样轻松实例化它
GameObject castedSpell = (GameObject)Instantiate(Resources.Load("Fireball"), transform.position, transform.rotation);
-
transform指的是当前 Player 对象的transform
但是它在地面上生成,可以通过从变换中移动 y 轴来修复,但这听起来不是一个好主意,有时粒子会与玩家发生碰撞,我想实例化这个法术朝向屏幕中间的十字准线:http://prntscr.com/bx91op
十字准线的工作方式与在线 Tera 中的完全一样 - 参考:https://www.youtube.com/watch?v=Jcg4o8IVwlw
我确实有这个十字准线的副本,但我仍然不知道如何实例化指向它的咒语。当咒语发生碰撞时,我还需要做一些破坏等。我看到粒子系统具有碰撞属性和事件触发器private void OnParticleCollision(GameObject other),但是当我将它附加到主粒子对象http://prntscr.com/bx9356 时,这似乎根本不起作用。我的播放器对象的图层标签为PlayArea,当我将碰撞属性设置为不与此特定标签碰撞时,没有任何变化,它仍然会在播放器内部爆炸。
我的问题的简短摘要:
- 如何正确实例化一个法术?
- 如何旋转并将其发送到屏幕上的十字准线?
- 如何防止与特定物体发生碰撞?
- 发生碰撞时如何检查?
【问题讨论】:
-
如果你使用玩家作为起始位置,那么法术可能从底部开始是合乎逻辑的。这取决于玩家对象的来源。通常你使用一个空的游戏对象作为起始位置并且定位正确(例如在枪的前面)。在您的情况下,这可能在玩家手中。为了防止与某些物体发生碰撞,您可以使用各种东西,例如图层或标签。并且可以使用
OnCollisionEnter等函数检测碰撞。 -
对于方向,我建议像
transform.position.forward这样transform 指的是播放器。轮换应该是相应的球员轮换。 -
Gunnar 已经解释了一切。不要忘记游戏中最常见的事情之一是,当您生成某些东西时,您会“尝试几次”直到找到一个空点。请注意,像这样的一般问题是针对 gamedev.com 的,这个网站是针对代码问题的
-
没有代码你怎么能做到这一点? @JoeBlow