public static void InitBall(string prefabName) { RigidBuildInfo info = new RigidBuildInfo { category = StageObjectCategory.Ball, id = StageManager.instance.GetMaxID(StageObjectCategory.Ball) + 1, prefabName = prefabName, collisionMode = CollisionDetectionMode.Continuous, drag = 0.5f, //空气阻力,用起来很赞 //position 需要初始位置 }; GameManager.instance.SpawnStageObject(info, BuildType.Server); //ServerSend.StageObjectSpawned(info); }
public override void Enter() { base.Enter(); //playerPos = cubePlayer.transform.position; //Vector3 InitPos = playerPos + new Vector3(1, 0, 1); RigidBuildInfo info = new RigidBuildInfo { category = StageObjectCategory.Dynamic, id = StageManager.instance.GetMaxID(StageObjectCategory.Dynamic) + 1, mass = 50, useGravity = false, drag = 0f, angularDrag = 0f, prefabName = "RoadBlock", constraints = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationZ, sendFlags = SendFlag.Position | SendFlag.Rotation | SendFlag.LocalScale, //position = InitPos, //rotation = Quaternion.identity, //initForce = Vector3.zero, }; Vector3 playerPos = cubePlayer.transform.position; List <BaseStageObject> objList = new List <BaseStageObject>(); for (int i = 0; i < 8; i++) { RigidBuildInfo newInfo = (RigidBuildInfo)info.Clone(); newInfo.position = playerPos + initPosList[i]; newInfo.initForce = initPosList[i] * 5; newInfo.initForceMode = ForceMode.VelocityChange; newInfo.id += i; BaseStageObject obj = GameManager.instance.SpawnStageObject(newInfo, BuildType.Server); Player.AddPlayerPrefix(obj.gameObject, cubePlayer); //只有服务端名字会改掉,用于标识这是player的所有物 //obj.transform.parent = cubePlayer.transform; //不能设为player的子物体,不然player转的时候会一起转 //obj.transform.forward = initPosList[i].normalized; objList.Add(obj); ServerSend.StageObjectSpawned(newInfo); } //Rigidbody rig = obj.GetComponent<Rigidbody>(); GameManager.instance.StartCoroutine(BlockMove(playerPos, objList)); //不这么写的话关掉游戏携程跑不完,那些块块就不会销毁,所以得挂在一个场景中不会被销毁的东西上 Exit(); }