首页 文章

Unity 2D变换粒子系统

提问于
浏览
0

我试图找出使用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

    解释

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

    • 由于结构是值类型 collisionObject.transform.position 返回一些 Vector3 的副本

    • 通过执行 .x = xPos ,您正在尝试修改某些 Vector3 结构的副本的 x 成员 . 该副本将立即被丢弃 . 因此,你的任务毫无用处 . 这就是编译器给你一个错误的原因 .

    解决方案

    如果要为 Transform.position 分配新值,则需要按如下方式执行:

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

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

  • 1

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

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

相关问题