代码控制用Cube创建一堵墙,如何避免运行的时候自动撞散?

PoorMonk丶 2018-03-28 03:44:28

public int width = 6;
public int height = 4;
public int zPos = 3;
private void CreateWall()
{
for (int x = -width / 2; x < width / 2; ++x)
{
for (int y = 0; y < height; ++y)
{
GameObject go = Instantiate(block, new Vector3(x, y, zPos), Quaternion.identity);
go.transform.SetParent(Wall);
}
}
}

block是一个Cube预制体,Transform.Position(0, 0.5, 0),添加了Rigidbody。

为什么手动把Block拖到Scene中不会有问题,用代码生成的墙就自动撞散了?
...全文
1274 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
PoorMonk丶 2018-04-10
  • 打赏
  • 举报
回复 1
引用 5 楼 QverOo 的回复:
Is Kinematic为true的时候,表示物体不受外力,也就是该物体会静止不动,但仍能改变其他物体的运动状态,比如人撞上去了。Freeze Position是可以冻结某一个轴的位置,如勾上Y,就表示该物体在Y轴上不会产生位移。
想要的效果就是block物体能被另外的物体打散,所以不能锁定。我把block预制体的Transform Position Reset后(之前是0, 0.5, 0),GameObject.Instantiate(block, new Vector3(i, j + 0.5f, 0), Quaternion.identity); 这样生成的就不会自动撞散了,不过会有轻微的摇晃
QverOo 2018-04-09
  • 打赏
  • 举报
回复
Is Kinematic为true的时候,表示物体不受外力,也就是该物体会静止不动,但仍能改变其他物体的运动状态,比如人撞上去了。Freeze Position是可以冻结某一个轴的位置,如勾上Y,就表示该物体在Y轴上不会产生位移。
QverOo 2018-04-09
  • 打赏
  • 举报
回复
勾上触发器
PoorMonk丶 2018-03-30
  • 打赏
  • 举报
回复
引用 2 楼 yuanyuanluoluo 的回复:
是这样么? public GameObject block; void Start() { for (int i = 0; i <= 5; i++) { for (int j = 0; j <= 5; j++) { GameObject.Instantiate(block, new Vector3(i, j, 0), Quaternion.identity);//创建好了一堵实用的墙 } } }
添加一个地面后,再把每个小块加上Rigidbody组件后就自动散了
yuanyuanluoluo 2018-03-29
  • 打赏
  • 举报
回复

是这样么?

public GameObject block;
void Start()
{
for (int i = 0; i <= 5; i++)
{
for (int j = 0; j <= 5; j++)
{
GameObject.Instantiate(block, new Vector3(i, j, 0), Quaternion.identity);//创建好了一堵实用的墙
}

}
}
PoorMonk丶 2018-03-28
  • 打赏
  • 举报
回复

2,535

社区成员

发帖
与我相关
我的任务
社区描述
Unity3D相关内容讨论专区
游戏unity 技术论坛(原bbs)
社区管理员
  • Unity3D
  • 芝麻粒儿
  • 「已注销」
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

Unity3D社区公告:

  1. 社区致力于解决各种Unity3D相关的“疑难杂症”。
  2. 社区不允许发布与Unity3D或相关技术无关内容。
  3. 社区版主邀请各位一道为打造优秀社区不懈努力。

试试用AI创作助手写篇文章吧