Созданный объект не создает экземпляр другого объекта - PullRequest
0 голосов
/ 03 февраля 2019

Я хотел позволить игроку создать «базу канонов», которая автоматически стреляет по некоторым «каноническим шарам», но (после попытки сделать это с помощью некоторого Debug.Log) я могу сказать, что только код до создания экземпляра «канонического шара»выполняется: (

Это упоминается как многопользовательская игра.

using UnityEngine.Networking;

public class PlayerScript : NewtworkBehaviour
{
  public GameObject canonBase;
  public Transform canonBaseSpawnPoint;

 void Update()
 {
    if (Input.GetKeyDown(KeyCode.R))
    {
        CmdCreateCanon();
    }
 } 

 [Command] 
 void CmdCreateCanon()
 {
    GameObject _canonBase = Instantiate(canonBase.gameObject, 
    canonBaseSpawnPoint.transform.position, Quaternion.identity);
    _canonBase.transform.rotation = canonBaseSpawnPoint.transform.rotation;
    NetworkServer.SpawnWithClientAuthority(_canonBase, connectionToClient);

   }
}
//other script:

using System.Timers;
using UnityEngine.Networking;

public class CanonScript : NetworkBehaviour
{
  public GameObject canonBall;
  public Transform canonSpawnPoint;
  public int shootAmount;

void Start()
{
    shoot = new Timer(shootTime * 1000);
    shoot.Elapsed += Shoot_Elapsed;
    shoot.Start();
}

void Shoot_Elapsed(object sender, ElapsedEventArgs e)
  {
  for (int  i = 0; i < shootAmount; i++)
  {
    //Code written down here gets executed
    GameObject _canonBall = Instantiate(CanonBall.gameObject, canonSpawnPoint.transform.position, Quaternion.identity) as GameObject;
    _canonBall.transform.rotation = canonSpawnPoint.transform.rotation;
    //Code written down here doesn't get Instantiated 
  }
 }
}

Чтобы добавить:

с Debug.Log () я обнаружил, что код вцикл for выполняется, но все, что находится за кодом canonBall-Instantiation-code, не выполняется.

canonBall связан с BulletScript, поэтому он перемещается (это, вероятно, будет хорошо, потому что он также работает с другими объектами).

"... SpawnPoint" - это кубы с отключенными Mesh Renderer и Box Collider, которые были привязаны к GameObject, необходимому для создания экземпляра другого объекта ( Player -> canonBase; canonBase -> canonBall)

Редактировать: сейчас я думаю, что это не работает из-за цикла for или около того? (Потому что позволить игроку непосредственно создать canonBall (без таймера и для части цикла) простоотлично работает)

1 Ответ

0 голосов
/ 03 февраля 2019

Вы можете сделать Start сопрограммой, как это.

using System.Collections;
using UnityEngine;


public class Cannon : MonoBehaviour {

    [SerializeField] private GameObject _cannonballPrefab;


    private IEnumerator Start () {
        yield return new WaitForSeconds (2);
        Instantiate (_cannonballPrefab);
    }
}

Когда вы создаете пушку с этим приложенным сценарием, пушечное ядро ​​будет создано с задержкой в ​​2 секунды.

...