zoukankan      html  css  js  c++  java
  • 使用Start初始化变量时的一个坑

    函数调用顺序问题


    官方的建议是,一般初始化变量都要在Awake函数里面比较安全。
    可是有时候会忽略这个问题,觉得在Start和Awake函数里初始化都差不多,所以就可能出现了下面这个问题!!!

    public class Test1 : MonoBehaviour
    {
        void Start()
        {
    		//添加Test2脚本并直接调用Test方法
            gameObject.AddComponent<Test2>();
            gameObject.GetComponent<Test2>().Test();
        }
    }   
    
    public class Test2 : MonoBehaviour
    {
        private GameObject go;
    
        private void Awake()
        {
            Debug.Log("Awake");
        }
    
        void Start()
        {
            Debug.Log("Start");
        }
    
        public void Test()
        {
            Debug.Log("Test");
        }
    }
    


    会发现Test会在Start前面调用

    我们修改下Test2,让其在Start中初始化函数看看会怎么样。

    public class Test2 : MonoBehaviour
    {
        private GameObject cube;
    
        private void Awake()
        {
            Debug.Log("Awake");
        }
    
        void Start()
        {
            cube = GameObject.Find("Cube");
        }
    
        public void Test()
        {
            Debug.Log(cube.name);
        }
    }
    


    会发现程序报错,空指针。

    我之前就被这个坑给坑过,怎么也找不着空指针的问题,后来才知道是初始化位置的问题。

  • 相关阅读:
    创建HttpFilter与理解多个Filter代码的执行顺序
    Filter
    JSTL
    EL
    JavaBean
    HttpSession之表单的重复提交 & 验证码
    相对路径和绝对路径
    HttpSession之简易购物车
    HttpSession
    Cookie
  • 原文地址:https://www.cnblogs.com/Fflyqaq/p/11497630.html
Copyright © 2011-2022 走看看