直接甩关键部分代码:(有看过siki学院的打砖块(免费的)就懂什么意思)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CubeSpawner : MonoBehaviour
{
public GameObject cubePrefab;
private GameObject[,] cubeList = new GameObject[10, 10];//10*10 砖块cube
private void Start()
{
CreateWall();
}
void CreateWall()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
GameObject go = GameObject.CreatePrimitive(PrimitiveType.Cube);
go.transform.position = new Vector3(j, i + 0.5f, 0);
Rigidbody rigidbody = go.AddComponent<Rigidbody>();
rigidbody.mass = 1000;
rigidbody.drag = 1000;
rigidbody.angularDrag = 1000;
cubeList[i, j] = go;
}
}
Invoke("InitCubeWall", 1f);
}
private void InitCubeWall()
{
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
Rigidbody rigidbody = cubeList[i, j].GetComponent<Rigidbody>();
rigidbody.mass = 10;
rigidbody.drag = 1;
rigidbody.angularDrag = 0.5f;
}
}
}
}
可看到,上面实例化 出来后直接加了一个刚体,因为砖块需要物理计算,而正因为加了刚体,导致问题的发生,而不是什么贴太近,碰撞器 重叠之类的导致的,所以我弄刚体上的质量、阻力、角阻力都为1000(很大的数),这样实例化出来的墙体的位置就是正确的,没有乱。之后再执行InitCubeWall方法,重新设置理想的质量、阻力、角阻力即可。(可以试试不用Invoke调用这个方法)亲测成功。完毕!!