我正在试图弄清楚使用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;
答案 0 :(得分:1)
这是因为Transform.position
是Vector3
类型的属性,它是一个结构。 C#中的结构是值类型。这里发生了什么:
collisionObject.transform.position
,因此会返回一些Vector3
.x = xPos
,您尝试修改某个x
结构的此副本的Vector3
成员。该副本将立即被丢弃。因此,你的任务毫无用处。这就是编译器给你一个错误的原因。如果要为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));