【问题标题】:Unity Raycast2D only shoots like 1 unitUnity Raycast2D 只拍摄 1 个单位
【发布时间】:2017-08-26 10:39:40
【问题描述】:

我有一个带枪的 2D 角色,我想在他的射击与其他物体发生碰撞时实例化一个爆炸。

我认为最好的方法是 JavaScript 中的 Raycast2D。

var hit: RaycastHit2D = Physics2D.Raycast(transform.position, Vector2.right);
if (hit.collider != null){
    boomClone2 = Instantiate(boom, new Vector3(hit.point.x, hit.point.y, transform.position.z - 1), Quaternion.identity);
}

现在问题是我开火了,爆炸总是像我的角色前面的一个单位一样实例化,即使那里什么都没有。我不知道为什么。

【问题讨论】:

  • “nstantiates 总是像我的角色前面的一个单位一样,即使那里什么都没有。” 你能解释一下吗?也许你在说什么的截图......
  • 它看起来像这样:字符_______________ _______________ 敌人
  • 它不会实例化敌人,它只会实例化角色前面的几个单位
  • 您是否尝试过在 Instantiate 方法调用中更改vector3?您所说的转换是哪个? (角色、敌人还是爆炸?)
  • 您是否尝试过简单地打印出您正在碰撞的对象的名称?这将有助于您调试它。从那里您可以添加条件来验证预制件仅在遇到您想要的东西时才实例化。

标签: javascript unity3d unity5 raycasting unity2d


【解决方案1】:

最大的问题是你没有在实例化任何东西之前甚至检查光线投射击中的对象。这是错误的。光线投射可以击中它前面的任何东西。任何带有 Collider 2D 的东西。它甚至可以击中角色本身。

创建一个“敌人”标签将你的敌人放在那个标签中。当光线投射不是null 时,请确保在实例化任何东西之前确实击中了敌人。

if (hit.collider != null)
{
    if (hit.collider.CompareTag("Enemy"))
    {
        boomClone2 = Instantiate(boom, new Vector3(hit.point.x, hit.point.y, transform.position.z - 1), Quaternion.identity);
    }
}

就像我说的,光线投射甚至可以击中自身,尤其是在 2D 光线投射完成时。如果这是问题,请参阅 this 帖子了解如何解决此问题。

【讨论】:

    【解决方案2】:

    您应该更改 raycast 的来源。或者您可以为播放器创建新图层。并在光线投射时排除该层。

    RaycastHit2D hit = Physics2D.Raycast (transform.position, Vector2.right, ~(LayerMask.GetMask ("player")));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多