【问题标题】:Unity 3D: Instantiating a Prefab OnTriggerEnterUnity 3D:实例化 Prefab OnTriggerEnter
【发布时间】:2014-01-02 21:49:19
【问题描述】:

首先,这是我正在使用的脚本:

var object: GameObject;
private var obj: GameObject;

function OnTriggerEnter(other: Collider)
{
if (other.tag == "Player"){                             
        obj = Instantiate(object, Vector3(0, 0, 0), transform.rotation);    
                          }
}

现在,使用这个脚本,当我进入触发器时,预制件正在我的初始预制件前面被实例化,就像我想要的那样......但是当我移动到实例化的预制件时,当我进入触发器时,预制件没有被克隆在前面,而是在与最后一个相同的位置。

我的游戏是一个无止境的跑步者,因此我需要生成的预制件始终与上一个预制件相距一格。我该怎么做?!

Here's a sketch of the situation, if I'm not being quite clear with you guys

【问题讨论】:

    标签: unity3d instantiation


    【解决方案1】:
    var spawnDistInFrontOfPlayer : float = 2f;
    //change this to your axis direction (direction the character will run)
    var spawnAxis : Vector3 = Vector3.right;
    
    obj = Instantiate(object, other.transform.position + (spawnAxis * spawnDistInFrontOfPlayer), transform.rotation);
    

    【讨论】:

      【解决方案2】:

      您发布的代码始终在位置 (0,0,0) 实例化预制件。您可以简单地将该向量替换为要生成预制件的实际世界空间位置。比如前面几个单位的玩家:

      spawnDistInFrontOfPlayer = 2f;
      obj = Instantiate(object, other.transform.position + other.transform.forward * spawnDistInFrontOfPlayer, transform.rotation);    
      

      【讨论】:

      • 您好 Heisenbug,感谢您的回答。该脚本并没有完全解决我的问题,因为实例化的预制件被克隆到不同的轴上。例如,一个在 x 上被实例化两个单元,另一个在 z 上被实例化,另一个在 y 上被实例化。这是发生的事情的图片:imgur.com/Nw8IIub
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      相关资源
      最近更新 更多