我试图找出使用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 回答
解释
发生这种情况是因为
Transform.position
是Vector3
类型的属性,它是一个结构 . C#中的结构是值类型 . 这里发生了什么:由于结构是值类型
collisionObject.transform.position
返回一些Vector3
的副本通过执行
.x = xPos
,您正在尝试修改某些Vector3
结构的副本的x
成员 . 该副本将立即被丢弃 . 因此,你的任务毫无用处 . 这就是编译器给你一个错误的原因 .解决方案
如果要为
Transform.position
分配新值,则需要按如下方式执行:或者,您可以使用Daniel指出的
Transform.Translate
方法 .而不是尝试设置位置的
.x
或.y
部分,使用Transform.translate
. 我相信这会将爆炸相对于它已经移动的位置移动(它会将它移动X,而不是跳转到X)但是如果你将对象实例化为0,0,它应该是相同的 .