c# - 实例化对象不实例化其他对象
问题描述
我想让玩家创建一个“canon base”,它会自动拍摄一些“canon ball”,但是(在使用一些 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
}
}
}
添加:
使用 Debug.Log() 我发现 for 循环中的代码被执行,但 canonBall-Instantiation-code 后面的所有内容都没有。
canonBall 与 BulletScript 链接,因此它被移动(这应该没问题,因为它也适用于其他对象)。
“...SpawnPoint”s 是禁用 Mesh Renderer 和 Box Collider 的立方体,并附加到实例化另一个对象所需的 GameObject (Player --> canonBase; canonBase --> canonBall)
编辑:现在我认为由于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 秒延迟后创建炮弹。
推荐阅读
- javascript - CodePen 中使用“导入”的 NPM 包会导致问题
- javascript - React Hook useEffect 收到了一个依赖未知的函数。改为传递内联函数
- ionic-framework - Vue 3 获取代理的值
- java - 从另一个构造函数调用默认构造函数
- django - 如何使用 django-filter 构建过滤器类,允许通过一个模型字段的多个值进行查询
- c# - C# 根据多个(26+3) 类别以特定顺序对对象列表进行排序(LINQ,if else,switch case)
- python - 递归霍夫曼解码
- vnc - 默认启用“将特殊密钥直接传递给 VNC 服务器”
- javascript - JavaScript 导入 - 突然出现“unexpected token {”错误
- javascript - 在现有方法中用jQuery添加slideUp动画