unity学习(39)——创建(create)角色脚本(panel)——静态(static)

文章介绍了Unity中利用console功能快速定位代码,以及静态类的特点(独享、不可实例化、全局)。开发者通过static变量解决create面板初始化问题,实现面板的动态显示。
摘要由CSDN通过智能技术生成

1.发现一个非常实用的功能,点击unity中console的输出项,可以直接跳转到vs的代码页!

2.static类(变量)有三个特点:

(1)独一份(2)无法实例化。(3)全局。类似于c语言中的全局变量。

3.应用:因为create的panel在初始化时是false的,无法通过select脚本来find,这个问题之前出过。这次在create初始化时,直接用static变量来记录panel的指针。再在create点击“创建角色”按钮时将其弹出

create部分的代码如下:

using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;

public class CreatePlayerPanel : MonoBehaviour
{
    //TMP_Text a = GameObject.FindWithTag("username").GetComponent<TMP_Text>();--不能写这里
    public static GameObject panel;//这是个全局变量--实例类
    private int job;//当前所选角色
    // Start is called before the first frame update
    void Start()
    {
        Debug.Log("CreatePlayerPanel获取object测试--这个在游戏加载的时候就执行了,最最最开始大的时候");
        panel = GameObject.FindWithTag("createPanel");//同一命名空间即可,canvas在最外边是有道理的
        panel.SetActive(false);
    }

    // Update is called once per frame
    void Update()
    {
        
    }
    public void finish()
    {
        panel.SetActive(false);//点击
    }
    public void selectJob(int job)//职业-我就纳闷昵称在哪里
    {
        //选择职业
    }
}

select部分的代码如下:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class SelectMenu : MonoBehaviour
{
    // Start is called before the first frame update
    //public GameObject c = GameObject.FindWithTag("selectMenuCanvas");
    public GameObject quan;//start中就保存好了
    public int flag = 0;
    void Start()
    {
        //gameObject.SetActive(false);
        //GameObject m = GameObject.FindWithTag("selectMenuCanvas");//现在我挂在camera上就可以这么用了
        this.quan = GameObject.FindWithTag("selectMenuCanvas");//同一命名空间即可,canvas在最外边是有道理的
        this.quan.SetActive(false);
        //gameObject.GetComponent<Renderer>.enabled = false;
    }

    // Update is called once per frame
    void Update()//角色的选择和创建我做在一起就可以了
    {
        //Debug.Log(GameInfo.GAME_STATE);//初始状态开始为0
        //Debug.Log(GameState.PLAYER_CREATE); //这个是4
        if (GameInfo.GAME_STATE == GameState.PLAYER_CREATE && this.flag == 0)
        {
            //Debug.Log(GameInfo.GAME_STATE);//初始状态开始为0
            //Debug.Log(GameState.PLAYER_CREATE);
            this.flag = 1;
            Debug.Log("这里计划是只执行一次");
            this.quan.SetActive(true);
        }
    }
    public void GoToCreate()//unity那边想要加载必须public
    {
        Debug.Log("我确实进入onclick函数了");
        //这种藏起来的找不着!第二次犯这个错误了
        //下面这两句再次说明了之前false的找不到
        //GameObject panel = GameObject.FindWithTag("createPanel");//同一命名空间即可,canvas在最外边是有道理的
        //panel.SetActive(true);
        Debug.Log(CreatePlayerPanel.panel);
        CreatePlayerPanel.panel.SetActive(true);//用的static实例类--这个卡住了
        Debug.Log("给我弹出创造页面");
    }
}

这东西难在对static的理解和应用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值