Unity 2D变换粒子系统

时间:2014-07-02 18:53:55

标签: unity3d position system particles

我正在试图弄清楚使用Unity粒子系统创建爆炸的位置。爆炸应该发生在炸弹与箱式对撞机相撞的地方。我对C#脚本没有太多运气。任何建议表示赞赏。下面列出了代码段。 xPos和yPos被声明为浮点数。

   // This part works.
    xPos = collisionObject.transform.position.x;
    yPos = collisionObject.transform.position.y;

    // This part generates an error.
    explosionContainer.transform.position.x = xPos;
    explosionContainer.transform.position.y = ypos;

2 个答案:

答案 0 :(得分:1)

解释

这是因为Transform.positionVector3类型的属性,它是一个结构。 C#中的结构是值类型。这里发生了什么:

  1. 由于结构是值类型collisionObject.transform.position,因此会返回一些Vector3
  2. 的副本
  3. 通过执行.x = xPos,您尝试修改某个x结构的此副本的Vector3成员。该副本将立即被丢弃。因此,你的任务毫无用处。这就是编译器给你一个错误的原因。
  4. 解决方案

    如果要为Transform.position分配新值,则需要执行以下操作:

    Vector3 newPosition = new Vector3(xPos, yPos);
    explosionContainer.transform.position = newPosition;
    

    或者,您可以使用Daniel指出的Transform.Translate方法。

答案 1 :(得分:0)

而不是尝试设置该位置的.x.y部分,请使用Transform.translate。我相信这会将爆炸相对于它已经移动的位置移动(它会将它移动X,而不是跳转到X)但是如果你将对象实例化为0,0,它应该是相同的。

explosionContainer.Transform.translate(new Vector2D(xPos, yPos));