初级UnityDemo全纪录(二):代码篇②
来源:互联网 发布:9377端口烈焰手游官网 编辑:程序博客网 时间:2024/06/05 07:09
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 ̄)づ
0 0
- 初级UnityDemo全纪录(二):代码篇②
- 初级UnityDemo全纪录(二):代码篇②
- 初级UnityDemo全纪录(二):代码篇①
- 初级UnityDemo全纪录(二):代码篇①
- 初级UnityDemo全纪录(二):代码篇③
- 初级UnityDemo全纪录(一):需求篇
- 初级UnityDemo全纪录(一):需求篇
- UnityDemo(二)
- SHELL初级(二)
- Swift初级(二)
- 初级汇编程序(二)
- 代码解释(初级)
- cocos2d初级篇笔记二
- 二、Python课程【初级篇】
- Ibatis初级应用(二)
- 初级排序算法(二)
- 《python初级爬虫》(二)
- S3C6410开发全纪录(二)《如何计算内存大小,并在UBOOT中调整内存大小》
- python实现的链表
- linux guest机器如何挂载宿主机共享文件夹
- 阅读器(慕客学习)之HTML5介绍
- python中的数据结构
- Jquery李炎恢——51Ajax表单插件【17】
- 初级UnityDemo全纪录(二):代码篇②
- dynamicreports1
- jsp学习
- Gradle 运行慢的解决方法
- 我的第一个项目
- dynamicreport2
- 盒切在医学影像处理中的应用
- 【工具使用】:使用Idea创建Java程序
- |Vijos|动态规划|P1071 新年趣事之打牌