Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取无休止对象生成的异常_C#_Unity3d - Fatal编程技术网

C# 获取无休止对象生成的异常

C# 获取无休止对象生成的异常,c#,unity3d,C#,Unity3d,我创造了一个无止境的跑步者,并为我的游戏随机制造障碍。发生的是我得到了以下例外,但这并不会影响到玩游戏那么多,如果我在android平台上实现它,最终会是一个问题吗 例外情况: ArgumentException:只能从主 线 加载场景时,将从加载线程执行构造函数和字段初始值设定项。 不要在构造函数或字段初始值设定项中使用此函数,而是将初始化代码移到Awake或Start函数中。 UnityEngine.Random.Range(Int32 min,Int32 max)(在C:/buildsla

我创造了一个无止境的跑步者,并为我的游戏随机制造障碍。发生的是我得到了以下例外,但这并不会影响到玩游戏那么多,如果我在android平台上实现它,最终会是一个问题吗

例外情况:

ArgumentException:只能从主 线 加载场景时,将从加载线程执行构造函数和字段初始值设定项。 不要在构造函数或字段初始值设定项中使用此函数,而是将初始化代码移到Awake或Start函数中。 UnityEngine.Random.Range(Int32 min,Int32 max)(在C:/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineRandomBindings.gen.cs:30) 墙()

代码:

使用UnityEngine;
使用系统集合;
公共类墙:单一行为{
公共矢量点;
私人改造营地;
private int ranXpos=Random.Range(-5,6);
//用于初始化
void Start(){
transform.position=newvector3(ranXpos,spawnPoint.y,spawnPoint.z);
camPos=GameObject.Find(“主摄像机”).GetComponent();
}
//每帧调用一次更新
无效更新(){
transform.position+=Vector3.back;
if(transform.position.z
如何摆脱此异常?

  • 首先,如果您遇到异常,您不能再进一步,尽管它工作正常
  • 其次,不能将
    Random.Range
    用作静态变量的初始值设定项 变量添加
    Awake
    Start
    方法并初始化 看你的代码,你能做的就是拆分你的代码
    Random.Range
    声明如下

        public class wall : MonoBehaviour {
        public Vector3 spawnPoint;
        private Transform camPos;
        private int ranXpos ;   //MODIFICATION
            // Use this for initialization
            void Start () {
             ranXpos = Random.Range(-5,6);  //MODIFICATION  
              transform.position= new Vector3(ranXpos,spawnPoint.y,spawnPoint.z);   
              camPos = GameObject.Find("Main Camera").GetComponent<Transform>();
            }   
            // Update is called once per frame
            void Update () {
              transform.position += Vector3.back;
              if(transform.position.z< camPos.position.z)
              {
                  Destroy(gameObject);
              }
            }
        }
    
    公共类墙:单一行为{
    公共矢量点;
    私人改造营地;
    私有int ranXpos;//修改
    //用于初始化
    无效开始(){
    ranXpos=Random.Range(-5,6);//修改
    transform.position=newvector3(ranXpos,spawnPoint.y,spawnPoint.z);
    camPos=GameObject.Find(“主摄像机”).GetComponent();
    }   
    //每帧调用一次更新
    无效更新(){
    transform.position+=Vector3.back;
    if(transform.position.z
      • 首先,如果您遇到异常,您不能再进一步,尽管它工作正常
      • 其次,不能将
        Random.Range
        用作静态变量的初始值设定项 变量添加
        Awake
        Start
        方法并初始化 看你的代码,你能做的就是拆分你的代码
        Random.Range
        声明如下

            public class wall : MonoBehaviour {
            public Vector3 spawnPoint;
            private Transform camPos;
            private int ranXpos ;   //MODIFICATION
                // Use this for initialization
                void Start () {
                 ranXpos = Random.Range(-5,6);  //MODIFICATION  
                  transform.position= new Vector3(ranXpos,spawnPoint.y,spawnPoint.z);   
                  camPos = GameObject.Find("Main Camera").GetComponent<Transform>();
                }   
                // Update is called once per frame
                void Update () {
                  transform.position += Vector3.back;
                  if(transform.position.z< camPos.position.z)
                  {
                      Destroy(gameObject);
                  }
                }
            }
        
        公共类墙:单一行为{
        公共矢量点;
        私人改造营地;
        私有int ranXpos;//修改
        //用于初始化
        无效开始(){
        ranXpos=Random.Range(-5,6);//修改
        transform.position=newvector3(ranXpos,spawnPoint.y,spawnPoint.z);
        camPos=GameObject.Find(“主摄像机”).GetComponent();
        }   
        //每帧调用一次更新
        无效更新(){
        transform.position+=Vector3.back;
        if(transform.position.z
        • 尝试使用

          private int ranXpos = Random.Range(-5, 6); 
          
          内部
          start()
          尝试使用

          private int ranXpos = Random.Range(-5, 6); 
          

          start()

          内部,您应该使用UnityEngine.Random.Range(int max,int min)函数。您应该使用UnityEngine.Random.Range(int max,int min)函数。感谢您的回答和解释。实际上,“ranXpos”成员不是静态的。使用引擎调用结果初始化它仍然有问题,因为引擎调用只允许在Unity主线程中进行。然而,Unity可能会将资产加载分派到后台线程中,资产加载还必须实例化MonoBehavior,然后调用引擎。这就是为什么会有Awake()和Start()方法。它们保证在Unity主线程中被调用,允许您使用Random和其他引擎api安全地初始化您的成员。感谢您的回答和解释。实际上,成员“ranXpos”不是静态的。使用引擎调用结果初始化它仍然有问题,因为引擎调用只允许在Unity主线程中进行。然而,Unity可能会将资产加载分派到后台线程中,资产加载还必须实例化MonoBehavior,然后调用引擎。这就是为什么会有Awake()和Start()方法。它们保证在Unity主线程中被调用,允许您使用Random和其他引擎api安全地初始化您的成员