实例化对象不实例化其他对象
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 秒延迟后创建一个炮弹。
我想让玩家创建一个 "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 秒延迟后创建一个炮弹。