初级UnityDemo全纪录(二):代码篇②

原创 2016年08月28日 19:26:04

Manager

GlobaManager

GlobaManager属于一个单例,我们要知道当前场景中模型的数量以及当前场景中模型的面数。
加上一个FPS的参数,就可以大摇大摆的装逼了。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class GlobaManager : UnityAllSceneSingleton<GlobaManager>
{

    public Text _Text;

    //刷新频率
    public float f_Updateinteral = 0.5f;
    //上一帧的刷新频率
    private float f_LastInterval;
    //总帧数
    private int i_Frames = 0;
    //平均帧数
    private float f_FPS;
    //当前定点数+
    public static int verts;
    //当前面数
    public static int tris;


    void Awake()
    {
        Application.targetFrameRate = 45;
    }

    void Start()
    {
        UIManager.Init();
        f_LastInterval = Time.realtimeSinceStartup;
        i_Frames = 0;
        //Debug.Log(ResourceManager.Instances.LoadModelObj("Cube"));
        //GameObject.Instantiate(ResourceManager.Instances.LoadModelObj("Cube"));
        //_Text.text = ResourceManager.Instances.LoadTxt ("Air compressor").text;    

    }

    void GetObegectStates()
    {
        verts = 0;
        tris = 0;
        GameObject[] ob = FindObjectsOfType(typeof(GameObject)) as GameObject[];
        foreach (GameObject obj in ob)
        {
            GetObjectStates(obj);
        }
    }

    void GetObjectStates(GameObject obj)
    {
        Component[] filters;
        filters = obj.GetComponentsInChildren<MeshFilter>();

        foreach (MeshFilter f in filters)
        {
            tris += f.sharedMesh.triangles.Length / 3;//一个三角形有三个顶点,除以三是获取到一个面
            verts += f.sharedMesh.vertexCount;
        }
    }

    void OnGUI()
    {
        GUI.skin.label.normal.textColor = new Color(255, 255, 255, 1.0f);
        GUI.Label(new Rect(0, 10, 200, 200), "FPS:" + (f_FPS.ToString("f2")));
        string vertsisplay = verts.ToString("#,##0 verts");
        GUILayout.Label(vertsisplay);
        string trisDisPlay = tris.ToString("#,##0 tris");
        GUILayout.Label(trisDisPlay);
    }

    void Update()
    {
        ++i_Frames;
        if (Time.realtimeSinceStartup > f_LastInterval + f_Updateinteral)
        {
            f_FPS = i_Frames / (Time.realtimeSinceStartup - f_LastInterval);
            i_Frames = 0;
            f_LastInterval = Time.realtimeSinceStartup;
            GetObegectStates();
        }
    }
}

GameManager

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

public class GameManager : UnityAllSceneSingleton<GameManager>,IMessageObject
{
    public enum Status
    {
        _NONE =1,
        _LOAD_SCENE,
        _START_GAME,
        _END_GAME,
    }

    public enum Tool
    {
        _NONE = 1,
    }

    public Status CurStatus = Status._NONE;

    public Tool CurTool = Tool._NONE;

    public GameObject Factory;

    public List<GameObject> ToolList;

    public GameObject Player;

    public Vector3 PlaySetPos;

    public GameObject CurToolGameObject;

    public bool CurAnimIsPlaying = false;
    public override void Awake()
    {
        base.Awake();
    }

    void Start()
    {
        GameObject.Instantiate<GameObject>(Factory);

        //foreach (GameObject item in ToolList)
        //{
        //    GameObject.Instantiate<GameObject>(item);

        //}
        CurTool = Tool._NONE;

        GameObject.Instantiate<GameObject>(Player);

        Player.transform.localPosition = new Vector3(0, 0, 0);

        CurToolGameObject = null;
    }
    private void LoadScene()
    {

    }
}

每一个程序中都需要有一个GameManager。用来控制整体的程序流程

写一个枚举类,保存当前程序状态

UIManager

因为程序中有一个简单的UI,所以还是写了一个UIManager来管理自己的UI。

本次这个初级的demo使用的UI是NGUI。
(再次说明,所有的Manager都是继承AllSenceSingleton的。都是单例~)

NGUI有什么好处呢,我也不知道,现在没有一个很好的习惯去用哪个,就是觉得这个现在顺手就用了,看客你们想用什么就用什么。

本次的UI根据模型要实现的功能总分为3个界面,

进度条—–这个就不解释了。
开始界面:在开始界面的时候,会有讲解啊什么的,在开始界面的时候,选择场景之后,去异步加载模型,中加入一个进度条场景,尽量的将场景的加载做到平滑。

功能界面。
一共是6个按钮。
自动播放,播放下一步,自动拆解,自动组装,讲解,重新播放。

每次到进入的模型的房间里边,加载模型,并加载功能界面的UI。然后绑定各个按钮的事件。

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

public class UIManager : UnityAllSceneSingleton<UIManager>, IMessageObject
{
    public UIRoot UIRoot;

    public List<GameObject> UIButtonList;

    public ToolSetButton ToolSetButton;

    private static UIManager ins;

    public static void Init()
    {
        ins = UIManager.Instances;
    }


    void Start()
    {
        ToolSetButton = new ToolSetButton() { Tool = GameManager.Tool._NONE };
        foreach (var item in UIButtonList)
        {
            item.AddComponent<UIEventListener>();
        }       
    }
    void Update()
    {
        //SetButton();
    }






    public void GetCurStatus()
    {
        Debug.Log(GameManager.Instances.CurStatus);
    }

    public void SetButtonListener()
    {

    }
    public void GetCurTool()
    {
        Debug.Log(GameManager.Instances.CurTool);
    }

    public void SetButton()
    {

        if (ToolSetButton.Tool == GameManager.Tool._NONE)
        {
            Debug.Log("ToolSetButton is Closed");
            foreach (var item in UIButtonList)
            {
                item.SetActive(false);
            }
        }
       else
        {
            GameManager.Instances.CurToolGameObject.AddComponent<AnimtionManager>();
            foreach (var item in UIButtonList)
            {
                UIEventListener.Get(item).onClick = AnimtionManager.Instance.ClickTest;
                item.SetActive(true);
            }
            //UIButtonList[0].SetActive(ToolSetButton.SetAssemble);
            //UIButtonList[1].SetActive(ToolSetButton.SetAutoPlay);
            //UIButtonList[2].SetActive(ToolSetButton.SetDecompose);
            //UIButtonList[3].SetActive(ToolSetButton.SetPlayNext);
            //UIButtonList[4].SetActive(ToolSetButton.SetRestart);
            //UIButtonList[5].SetActive(ToolSetButton.SetStop);

            Debug.Log("ToolSetButton is SETED");
        }
    }
}

未完待续。。。这个其中有很多要去优化的地方,还有代码篇①,单例模型的管理类也没有加上,如果之后有时间,也有人感兴趣的话,我会加上单例的管理类。(进行所有单例的销毁,初始化,单例创建以及销毁的时候通知所有对象)
PS:关于单例的管理类有什么好的想法~可以一起讨论一下啊~(づ ̄ 3 ̄)づ

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

安卓逆向学习笔记 -- 七少月团队:35天的收获

七月六号到今天八月十九号,我跟七少月团队学习35天了(大部分时间都是研究自己渴望有的东西),今晚就抽出玩游戏的时间,写一篇文章分享一下加入七少月团队35天的经历以及收获。...

unity3D游戏开发实战原创视频讲座系列10之《保卫战:异形入侵》游戏开发第一季

讲解目录 《保卫战:异形入侵》游戏开发     1 第一讲   游戏演示和资源的介绍     1 第二讲  “异形”怪物的实现     1 第三讲  “异形”怪物生命值的体现     9 第四讲  ...

初级UnityDemo全纪录(二):代码篇①

直接上。思路和代码~~~-## Tool(工具类) ## - UnityAllSceneSingleton类 - 思路 因为在这些简单的项目里边,单例模式还是用的比较多的,所以,首先去创建...

初级UnityDemo全纪录(二):代码篇②

ManagerGlobaManagerGlobaManager属于一个单例,我们要知道当前场景中模型的数量以及当前场景中模型的面数。 加上一个FPS的参数,就可以大摇大摆的装逼了。public cl...

智能小车制作过程全纪录: 二、软件平台--- Arduino底盘驱动

主控板主要提供智能数据分析,根据分析的结果通过串口发送控制命令给小车驱动板,小车驱动板根据控制命令控制小车的动作,主控板采用Java平台,集成相关领域的开源解决方案,软件系统主要包括如下: 底盘驱动:...
  • mwlwlm
  • mwlwlm
  • 2016年09月28日 15:09
  • 1646

S3C6410开发全纪录(二)《如何计算内存大小,并在UBOOT中调整内存大小》

转自:http://blog.csdn.net/turui/article/details/6634778 前章我们已经可以制作出用来启动的SD卡了,并将自己编译的UBOOT烧录到了SD...

S3C6410开发全纪录(二)《如何计算内存大小,并在UBOOT中调整内存大小》

前章我们已经可以制作出用来启动的SD卡了,并将自己编译的UBOOT烧录到了SD卡中这份UBOOT代码中的内存配置肯定和手头的开发板不一致,这里我们将搞清楚如何修改内存大小,并说清楚内存大小到底是如何计...
  • turui
  • turui
  • 2011年07月26日 14:44
  • 9881

S3C6410开发全纪录(二)《如何计算内存大小,并在UBOOT中调整内存大小》 .

转载:http://blog.csdn.net/turui/article/details/6634778 前章我们已经可以制作出用来启动的SD卡了,并将自己编译的UBOOT烧录到了SD卡中 这份...

系统分析师论文全纪录[2]

  • 2010年03月30日 21:18
  • 13.15MB
  • 下载

QT移植过程全纪录

  • 2012年07月24日 11:27
  • 77KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:初级UnityDemo全纪录(二):代码篇②
举报原因:
原因补充:

(最多只允许输入30个字)