CR开发笔记-3GUI界面制作

今天是第三篇

今天主要是做UI界面,非常容易,我也不用NGUI直接上好了!

直接上代码!

using UnityEngine;
using System.Collections;

public class Startmenu : MonoBehaviour
{

    float fullWidth;
    float fullHeight;
    Rect rtFullscreen;
    Rect rtBeginBtn;
    //窗口定义
    //这个玩意的效果就是只让一个窗口存在
    bool WindowsExist;
    //关于窗口
    Rect rtInfoBtn;
    Rect rtInfoWin;
    bool stInfoWin;
    Rect rtInfoWinBtn;
    //设置窗口
    Rect rtSetupBtn;
    Rect rtSetupWin;
    bool stSetupWin;
    Rect rtSetupWinBtn;
    //关卡窗口
    Rect rtLevelBtn;
    Rect rtLevelWin;
    bool stLevelWin;
    Rect rtLevelWinBtn;

    // Use this for initialization
    void Start () {
        WindowsExist = false;
        fullWidth=Screen.width;
        fullHeight=Screen.height;
        rtFullscreen = new Rect(0, 0, fullWidth, fullHeight);
        rtBeginBtn = new Rect(fullWidth/2, (float)(fullHeight*0.382), (float)(fullWidth * 0.309), (float)(fullHeight * 0.2));
        rtLevelBtn = new Rect(fullWidth / 2, (float)(fullHeight * 0.25), (float)(fullWidth * 0.2), (float)(fullHeight * 0.132));
        rtSetupBtn = new Rect(fullWidth/2,(float)(fullHeight*0.582),(float)(fullWidth*0.2),(float)(fullHeight*0.118));
        rtInfoBtn = new Rect (fullWidth/2,(float)(fullHeight*0.7),(float)(fullWidth*0.15),(float)(fullHeight*0.1));
        //米娜桑,为什么要在这里这么干呢,明明可以在下面直接用new的,这是为了提高运作效率
        //但是这是有缺点的,就是你不能在游戏中拉伸画面,因为这个代码只运行一遍,也就是一开始就订好了宽长
        //关于窗口
        rtInfoWin = new Rect(fullWidth / 4, fullHeight / 4, fullWidth / 2, fullHeight / 2);
        stInfoWin = false;
        rtInfoWinBtn = new Rect(0, (float)(rtInfoWin.height * 0.75), rtInfoWin.width, (float)(rtInfoWin.height * 0.25));
        //设置窗口
        rtSetupWin = new Rect(fullWidth / 4, fullHeight / 4, fullWidth / 2, fullHeight / 2);
        stSetupWin = false;
        rtSetupWinBtn = new Rect(0, (float)(rtSetupWin.height * 0.75), rtSetupWin.width, (float)(rtSetupWin.height * 0.25));
        //关卡窗口
        rtLevelWin = new Rect(0, 0, fullWidth, fullHeight);
        stLevelWin = false;
        rtLevelWinBtn = new Rect(0, (float)(rtLevelWin.height*0.85), rtLevelWin.width, (float)(rtLevelWin.height * 0.15));
    }

    // Update is called once per frame
    void Update () {

    }
    void OnGUI()
    {
        GUI.Box(rtFullscreen, "hehe");
        if(GUI.Button(rtBeginBtn, "try"))
        {
            Application.LoadLevel("startscene");
        }
        //关卡窗口
        if (GUI.Button(rtLevelBtn, "Level"))
        {
            if (WindowsExist == false)
            {
                stLevelWin = true;
                WindowsExist = true;
            }
        }
        if (stLevelWin)
        {
            GUI.Window(2, rtLevelWin, doWindow,"gege");
        }
        //设置窗口
        if (GUI.Button(rtSetupBtn, "setup"))
        {
            if (WindowsExist == false)
            {
                stSetupWin = true;
                WindowsExist = true;
            }
        }
        if (stSetupWin)
        {
            GUI.Window(3, rtSetupWin, doWindow, "hehe");
        }
        //关于窗口
        if (GUI.Button(rtInfoBtn, "hehe"))
        {
            if (WindowsExist == false)
            {
                stInfoWin = true;
                WindowsExist = true;
            }
        }
        if (stInfoWin)
        {
            GUI.Window(4, rtInfoWin, doWindow, "hehe");
        }

    }
    //窗口事件
    void doWindow(int winID)
    {
        if (winID == 4)
        {
            if (GUI.Button(rtInfoWinBtn, "hehe"))
            {
                stInfoWin = false;
                WindowsExist = false;
            }
        }
        if (winID == 3)
        {
            if (GUI.Button(rtSetupWinBtn, "hehe"))
            {
                stSetupWin = false;
                WindowsExist = false;
            }
        }
        if (winID == 2)
        {
            if (GUI.Button(rtLevelWinBtn,"gege"))
            {
                stLevelWin = false;
                WindowsExist = false;
            }
        }
    }
}

效果图

这些我们暂且不提了

除了上面的一大堆东西,我也就不解释什么了。。。明天画画还要交作业。(我的七个姐姐和八个妹妹问我为什么跪倒在数位板面前)

有几个需要注意一下的地方

1、基本上任何数字*0.几几都会自动转化为double,但是double效率非常慢,一般要转为float,这点需要注意。(括号很重要)

2、也不知道什么原因,可能是图层的问题,于是很多情况下,虽然有弹出窗口,但是在窗口下面点击之后就会弹出另外一个弹出窗口。。。这时候需要一个开关,使得只存在一个弹出窗口。

3、切换关卡问题 Application.LoadLevel("startscene"); 需要在file—buildset里进行设置才可以使用并且加载,这里可以探讨一下unity的运行机制,其实可以使用异步加载,以后再说。

基本就是这些。

下一次将会带来一些美工性质的工作,建飞机模型或者是UI什么的,插一个进度,要不太没意思了。估计要写到30章去啊!

CR开发笔记-3GUI界面制作

时间: 2024-10-13 22:42:49

CR开发笔记-3GUI界面制作的相关文章

CR开发笔记-5主界面GUI的进一步代码完善

新增代码 if (winID == 2) { GUILayout.BeginVertical("box"); GUILayout.Box("日记",GUILayout.Height(fullHeight/8)); GUILayout.BeginHorizontal("box"); if (GUILayout.Button("蓝光隧道I", GUILayout.Height(fullHeight / 5))) { Applica

CR开发笔记-1工作前的准备

任何一个游戏的开发都要在之前好好想一想 首先这个游戏怎么制作,是一个什么游戏? across是一个探索向逃生宇宙逃生游戏.考虑到我的美工能力,我不敢做什么rpg之类的,估计也就...做个飞船,做个星球,做几个奇葩的地形. 暂时不提. 游戏背景基于V-ver大背景,starlight号的故事,这个故事是这样的,starlight号困在某某空间中,需要与宇宙那边的星团共和国联络,于是派出了..... (说好的开发呢) 咳咳! 好的,下面是正题. 首先我们需要把资源想一下,我需要什么资源. GUI,毋

CR开发笔记-2基础飞机的搭建以及测试代码

好吧!今天没有建模,主要是美术细胞死了. 处于一种劳累的状态. 快速说一下今天的进度 啊,这就是一个逗比飞机的基本骨架. 没有什么好解释的. 这里开始坑人了,上面的红色箭头指的是是否利用重力,这里由于是飞船么,宇宙中暂时没有重力,所以去掉. 下面是的红红的是是否符合经典物理动力学. (说白了就是是否可以支持Force,今天我以为他是是否失重,然后调了半天代码%>_<%) 然后贴代码. public class levelRun : MonoBehaviour { // Use this for

CR开发笔记-6用户数据存储

仍然是贴代码 using UnityEngine; using System.Collections; public class DateControl : MonoBehaviour { public static string Name; public static int Num; bool JBstart; float fullWidth; float fullHeight; Rect fullScreen; //窗口 Rect NameText; Rect GoBtn; Rect po

CR开发笔记-4模型。。我的审美去哪里了

我的审美去哪里了. 呃 好吧,今天基本上没什么代码. maya建模就弄出来了这个鬼东西 审美不见惹 世界的恶意,没有游戏原画的悲哀. 今天针对这个逗比的模型说一说吧. 美观什么的,美感君已经死了. 真的死了. 和谐君也死了. 强调3点 1.maya里渲染出来的效果,你不要相信,unity不支持辉光,只支持光晕.到unity里你的东西一般是非常屌丝的 2.输出文件为fbx,为啥是fbx,fbx,3dmax可以用 maya可以用 都可以用,容量小,相对的,很多材质不支持,但是利大于弊. 输出fbx需

《ArcGIS Runtime SDK for Android开发笔记》——数据制作篇:紧凑型切片制作(Server缓存切片)

1.前言 在ArcGIS 10中出现了一种新的切片缓存文件格式:紧凑型存储(Compact).与之前的松散型存储(Exploded)相比,它有迁移方便.创建更快.减少存储空间等诸多优点,已经成为了现在创建切片缓存的默认格式. 紧凑型切片存储最主要的两种文件是bundle和bundlx文件,其中bundle文件用以存储切片数据,bundlx是bundle文件中切片数据的索引文件. 一个bundle文件中最多可以存储128×128(16384)个切片,但是创建切片缓存并不是一张张切片单独生成,而是以

《ArcGIS Runtime SDK for Android开发笔记》——数据制作篇:发布具有同步能力的FeatureService服务

1.前言 从ArcGIS 10.2.1开始推出离在线一体化技术之后,数据的离在线一体化编辑一直是大家所关注的一个热点.数据存储在企业级地理数据库中,通过ArcGIS桌面软件加载后配图处理,并发布到ArcGIS for Server中,供移动端设备离线编辑使用,并可以同步回传版本化存档.这其中涉及多项配置操作,本篇文章主要针对FeatureService服务的发布流程做一个简单的介绍.以备查阅. 转载请注明出处:http://www.cnblogs.com/gis-luq/p/5857188.ht

《ArcGIS Runtime SDK for Android开发笔记》——数据制作篇:.geodatabase创建,创建时内容缺失问题总结

1.前言 利用ArcGIS桌面提供的share as -> ArcGIS Runtiem Content工具在导出.geodatabase文件时经常会发生数据缺失问题,比如数据表中数据有4w多条,但是导出成Geodatabase时,有时候就会发现数据只有1w多条,数据丢失,那这个数据去哪了呢?为啥会有丢失?之前也是没有深究过这样一个问题,也不是很清楚确切的问题点在哪里,就是简单的知道将当前可视区域覆盖全部地图,就可以将数据全部导出了,大概猜测是可视区域的问题.今天针对这块仔细研究了下,做个简单的

《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:概述

1.前言 数据生产和数据展示是常见的两大专业级移动GIS应用场景,这里我们针对数据生产环节的ArcGIS的离在线一体化技术给大家做一个基本的介绍和梳理. 使用ArcGIS离在线一体化技术首先需要以下基础环境: ArcGIS for Desktop 10.2.1以上版本 ArcGIS for Server 10.2.1以上版本 使用PostgreSQL.Microsoft SQL Server.或 Oracle 设置企业级地理数据库ArcSDE. 再次在使用同步功能是必须给要素添加GlobleID