【问题标题】:Unity 2D transform particle systemunity 2D 变换粒子系统
【发布时间】:2014-07-03 06:40:06
【问题描述】:

我试图弄清楚使用 Unity 粒子系统创建爆炸的位置。爆炸应该发生在炸弹与盒子对撞机相撞的地方。我对 C# 脚本不太满意。任何建议表示赞赏。下面列出了代码 sn-p。 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;

【问题讨论】:

    标签: unity3d position system particles


    【解决方案1】:

    说明

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

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

    解决方案

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

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

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

    【讨论】:

    • 效果很好。谢谢。我会把这个放在我的笔记里。
    【解决方案2】:

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

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

    【讨论】:

    • 感谢您的建议。稍作改动,我就可以使用它了:explosionContainer.transform.Translate(new Vector2(xPos, yPos));
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多