实例化对象不实例化其他对象

Instantiated Object doesn't instantiate other object

我想让玩家创建一个 "canon base" 来自动射击一些 "canon ball"s 但是(在用一些 Debug.Log 尝试之后)我可以说之前只有代码实例化 "canon ball" 被执行:(

据说是多人游戏。

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 
  }
 }
}

添加:

with Debug.Log() 我发现 for 循环中的代码被执行了,但是 canonBall-Instantiation-code 后面的所有代码都没有执行。

canonBall 与 BulletScript 链接,因此它可以移动(这应该没问题,因为它也适用于其他对象)。

“...SpawnPoint”是禁用了 Mesh Renderer 和 Box Collider 的立方体,并附加到实例化其他对象所需的 GameObject(Player --> canonBase;canonBase -->佳能球)

编辑:目前我认为它不起作用,因为 for 循环左右? (因为让 Player 直接创建一个 canonBall(没有计时器和 for 循环部分)就可以了)

你可以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 秒延迟后创建一个炮弹。