【问题标题】:Unity 3D Spell castingUnity 3D 施法
【发布时间】: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,当我将碰撞属性设置为不与此特定标签碰撞时,没有任何变化,它仍然会在播放器内部爆炸。

我的问题的简短摘要:

  1. 如何正确实例化一个法术?
  2. 如何旋转并将其发送到屏幕上的十字准线?
  3. 如何防止与特定物体发生碰撞?
  4. 发生碰撞时如何检查?

【问题讨论】:

  • 如果你使用玩家作为起始位置,那么法术可能从底部开始是合乎逻辑的。这取决于玩家对象的来源。通常你使用一个空的游戏对象作为起始位置并且定位正确(例如在枪的前面)。在您的情况下,这可能在玩家手中。为了防止与某些物体发生碰撞,您可以使用各种东西,例如图层或标签。并且可以使用OnCollisionEnter等函数检测碰撞。
  • 对于方向,我建议像transform.position.forward 这样transform 指的是播放器。轮换应该是相应的球员轮换。
  • Gunnar 已经解释了一切。不要忘记游戏中最常见的事情之一是,当您生成某些东西时,您会“尝试几次”直到找到一个空点。请注意,像这样的一般问题是针对 gamedev.com 的,这个网站是针对代码问题的
  • 没有代码你怎么能做到这一点? @JoeBlow

标签: c# unity3d system


【解决方案1】:

由于您的大部分问题已在 cmets 中得到解答,因此我将仅针对 nr. 2:

要使 GameObject 以特定点为目标,您可以使用 transform.LookAt() 函数。

为了确定所述目标点,最好的选择是从你的相机/十字准线到你的场景中做一个raycast。然后可以将射线击中的第一个点用作您的法术的目标点。 (请注意您的相机和角色之间的墙壁或物体......)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 1970-01-01
    相关资源
    最近更新 更多