2015-02-11 18:37:02 Qst_Baron 阅读数 13711
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4712 人正在学习 去看看 张刚

       首先制作背景图片,在ngui中插入一个texture,把选好的背景图片放入texture中,在texture组件上添加一个uistretch脚本(自适应屏幕大小),把其属性中的style调成both,如图所示 

 

 

       如果感觉画面失真了,点击你Unity的图片,把其属性中的texture type调成advanced,然后把generate mip map选项后面的勾去了就好了,文章出处【狗刨学习网】。

  

 

       然后用ngui自带的组件,拖上去两个input(输入框)组件,再拖进去两个label组件,最后再拖入两个button组件,可以根据自己的喜欢,再加一个label当做游戏的标题,把所有添加的组件放入panel中,这样比较好操作,效果如图所示

 

 

 

下面把注册时的界面搭建好,原理都是一样了,最后的效果如图

 

 

      下面要写代码来控制所有要触发的事件了,在我们uiroot中的摄像机上创建一gameSence,然后我先口述一下大概流程,随后就贴上代码(其实很简单的几句)

       

       在登录界面上需要有交互功能的就两个按钮,一个注册一个进入游戏,进入游戏先不管,因为这个涉及到与服务器连接的一些知识,本人小白,还没涉及到,等涉及到的时候一定会跟大家分享一下,言归正传,还一个按钮就是注册,当点击注册的时候,就会弹到注册的界面中,也就是把当前的登录界面隐藏掉,显示出咱们得注册界面,在咱们得注册界面中,涉及到交互的按钮也是两个,一个提交,一个返回,提交按钮涉及到用户填写的账号要提交的数据库中,并且提交成功后要返回登录界面,咱们只做返回登录界面的这个功能。

 

       其实跟登录界面跳转到注册界面是一个概念,还有一个返回按钮,也是跳转到登录页面。因为以后肯定要跟服务器有一个交互的过程,所以在用户点击进入游戏按钮也好,还是注册页面中的提交按钮也好,在与服务器通讯的过程中,要防止用户再次操作,所以要另见一个panel,里面放入一个sprite和一个label,把sprite的透明度调成1(!!!注意,一定不要调成0,调成0unity就不会渲染,那咱的层级设定就没有意义了,这也算unity的一个小bug吧),这样就用户就点击不了任何组件了。当通讯完成的时候,再取消这个panel,用户就可以再次操作了。

 

       大概思路就是这样,废话不多说,贴上我的代码,供大家参考,也希望大神挑出我的毛病,哦对了,在说一点,在建父物体的时候,我都是用的panel,我觉得应该用gameobject,因为用panel会增大draw call,对优化有一定的帮助。

 

using UnityEngine;

 

using System.Collections;

 

public class gameSence : MonoBehaviour {

 

   //登录场景

 

   public GameObject sence1;

 

   //注册场景

 

   public GameObject sence2;

 

   //Loading场景

 

   public GameObject sence3;

 

   //注册场景中账号的输入

 

   public UIInput r_name;

 

   //注册场景中第一次密码的输入

 

   public UIInput r_pwd;

 

   //注册场景中第二次密码的输入

 

   public UIInput r_pwdok;

 

         //Use this for initialization

 

         voidStart () {

 

       //显示场景1

 

       sence1.SetActive(true);

 

       //不显示场景2

 

       sence2.SetActive(false);

 

       //不显示Loading场景

 

       sence3.SetActive(false);

 

         }

 

         //Update is called once per frame

 

         voidUpdate () {

 

         }

 

   //登录场景切换到注册场景

 

   public void change() {

 

       //不显示场景1

 

       sence1.SetActive(false);

 

       //显示场景2

 

       sence2.SetActive(true);

 

    }

 

   //注册场景切换到登录场景

 

   public void toChange() {

 

        //显示场景1

 

       sence1.SetActive(true);

 

       //不显示场景2

 

       sence2.SetActive(false);

 

    }

 

   //当点击运行(go)按钮的时候触发的事件

 

   public void sendToServer() {

 

       //Loading场景,防止用户误操作

 

       sence3.SetActive(true);

 

       //向服务器发送数据

 

    }

 

   public void r_name_input() {

 

       //如果账户输入为空

 

       if (r_name.value == null || r_name.value == "") {

 

           print("请输入账号");

 

           return;

 

       }

 

       //如果两次密码输入的值不相同

 

       if (r_pwd.value != r_pwdok.value) {

 

           print("两次密码输入不相同");

 

           return;

 

       }

 

     }

 

}

 

2018-01-04 19:40:57 Quest_sec 阅读数 1329
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4712 人正在学习 去看看 张刚

1.上午先拷贝安装包 注册账号 登入主界面 1h
然后学习一个函数OnGUI,三个模块Label,Button,RepeatButton,
体会按钮用法,点击按钮出现一张图片,点击第二个按钮 图片消失
2.做一个计时器
3.下午丰富计时器,条件语句,循环语句,做一个登陆界面,老师强调美观,可以自己改变字体以及颜色
4.今天的课后题
简述基于unity3d开发游戏的优势,以及热门游戏?炉石传说,王者荣耀,新仙剑OL等..
5.干货:
如果报错一直在增加? 说明没有赋初值。。
你容易错的是判断等于 == 双!
如果下面if(按某个键),它上面几行就不用声明这个键GUI.Button(new Rect(70,100,50,30),”exit”);了

GUI Style 图形用户界面样式 - Unity圣典
http://www.ceeger.com/Components/class-GUIStyle.html

Unity开发基础——类型转换学习笔记
http://blog.csdn.net/sinat_35761779/article/details/52170536

int string 类型转换

        GUI.Label (new Rect (10, 50, 512, 225),frametime.ToString());

以下是未经测试的360问答
比如 public int num=0; num++;
e.gameObject.name=(我的物体名字想要为num);
随后我又要获取 e.gameObject.name的名字 再转为int型该如何实现?
e.gameObject.name=num.ToString();
num=int.Parse(e.gameObject.name);

任务一:体会按钮控制图片展现或者消失

public class NewBehaviourScript : MonoBehaviour {

    public Texture img;
    public Texture img0;
    public Texture img1;
    void OnGUI()// to show 
    {

        GUI.Label (new Rect(10,150,100,100),img0);
        if (GUI.Button(new Rect(10,30,200,50),"yes"))
            img0 = img;
        if (GUI.Button(new Rect(260,30,200,50),"no"))
            img0 = img1;

    }

任务二:最简单的计时器:在点击下增加/减

public class NewBehaviourScript : MonoBehaviour {

    private int frametime;
    void OnGUI()// to show 
    {

        GUI.Label (new Rect(10,100,100,100),"time is "+frametime);
        if (GUI.Button(new Rect(10,30,200,50),"计时"))
            frametime++;


    }


    void Start () 
    {
        frametime = 0;

    }

任务三:点击一下开始自己增加/减

//无非是加循环啦然而???为什么用while它会直接从0变成100,增加一个变量一个循环 就可以依次增加了???

public class NewBehaviourScript : MonoBehaviour {

    private int frametime;
    private bool start;
    void OnGUI()
    {

        GUI.Label (new Rect (10, 50, 512, 225),"time is "+frametime);
        if (GUI.RepeatButton (new Rect (10, 10, 100, 40), "计时"))
        {
            start = true;
        //这个位置
        }
        if(start) //这个循环如果放在上句位置,就是鼠标按住的时候一直增,放开则停。而现在位置是一开始点击依一次,就一直增了。
        {
            frametime++;
        }
    }

    void Start () 
    {
        start = false;
        frametime = 0;
    }

任务四:在任务三基础上实现点击“暂停”按钮;并且解决减少到0后继续负数的问题;当然还可以实现到达0(截止)时跳出来一张图片(仿游戏某步)


public class NewBehaviourScript : MonoBehaviour {

    private int frametime;
    private bool start;
    public Texture img;
    public Texture img0;
    void OnGUI()
    {

        GUI.Label (new Rect (10, 50, 512, 225),"time is "+frametime);
        GUI.Label (new Rect (10, 100, 512, 225),img0);
        if (GUI.RepeatButton (new Rect (10, 10, 100, 40), "倒计时"))
        {
            start = true;

        }
        if (GUI.RepeatButton (new Rect (180, 10, 100, 40), "暂停"))
        {
            start = false;
        }
        if(start && frametime >0)
        {
            frametime--;
            if (frametime == 0) //当然while也行。//当这个条件语句放在下面位置为什么就不会出现图片了?
            {
                img0 = img;
            }
        }
        //没错这个位置(也就是两个条件语句不再嵌套而是同级)噢。。好像也是可以的
    }

    void Start () 
    {
        start = false;
        frametime = 1000;
    }

任务五:最终计时器可以提交咯

任务六:登录界面(没有数据库的情况下,用户名密码匹配采取硬匹配,进一步:那么多组资料 怎么办?)”最笨的打完;switch;还有?”

//单个用户的情况
using UnityEngine;
using System.Collections;


public class NewBehaviourScript : MonoBehaviour {

    private string userName;
    private string passWord;
    private string info;
    void OnGUI()
    {


    //  GUI.Button(new Rect(70,100,50,30),"Log in");
    //  GUI.Button(new Rect(130,100,50,30),"Empty");
        GUI.Label(new Rect(10,10,150,25),"用户名 ");
        GUI.Label(new Rect(10,50,150,25),"密码 ");
        GUI.Label(new Rect(70,150,200,30),info);
        GUI.Label(new Rect(70,150,200,30),info);
        userName = GUI.TextField(new Rect(60,10,150,25), userName,20);
        passWord = GUI.PasswordField (new Rect(60,50,150,25),passWord,'*',15);
        if (GUI.Button(new Rect(70,100,50,30),"Log in"))
        {
            if (userName == "admin" && passWord == "123456")
                info = "登录成功!";
            else
                info = "登录失败!请重新登录!";
        }
        if (GUI.Button(new Rect(130,100,50,30),"Empty"))
        {
            userName = "";
            passWord = "";
            info = "";
        }
    }
    void Start () 
    {
        userName = "";
        passWord = "";
    }

    void Update () 
    {       
    }
}

任务七:怎么美观文字啥的?

        string aa = "我们都很好";
        GUIStyle bb=new GUIStyle();
        bb.normal.background = null;    //这是设置背景填充的
        bb.normal.textColor=new Color(1,0,0);   //设置字体颜色的
        bb.fontSize = 40;       //当然,这是字体颜色
        GUI.Label(new Rect(0, 0, 200, 200), aa,bb);
2014-12-30 20:55:46 ti1an123 阅读数 409
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4712 人正在学习 去看看 张刚
  今天我们学习了unity的GUI的登陆注册
          
       先是登录,用GUI的Box方法,把它的边框给显示出来,登录账号用TextField方法来显示,用字符串来接受,密码用PasswordField方法来显示,用字符串来接受。
       然后登录和取消用GUI的 Buttom方法来先显示。在点击登录时,可以跳转到游戏界面。点击取消时,字符串为“”;
      
       登录
string str = "请输入账号";
string str1 = "";
void OnGUI()
{
GUI.Box(new Rect(100, 20, 150, 30), "欢迎登录");
GUI.Box(new Rect(20, 60, 60, 30), "姓名");
GUI.Box(new Rect(20, 100, 60, 30), "密码");
str = GUI.TextField(new Rect(100, 60, 150, 30), str);
str1 = GUI.PasswordField(new Rect(100, 100, 150, 30), str1, '*');

if (GUI.Button(new Rect(80, 140, 60, 30), "登录"))
{
Application.LoadLevel(2);
}
if (GUI.Button(new Rect(160, 140, 60, 30), "取消"))
{
str = "";
str1 = "";
}
}

        然后是注册 和登录差不多。
        
        
        string str = "请输入账号";
        string str1 = "";
        string str2 = "请输入年龄";
        string str3 = "请输入简介";
        public Texture2D img;

       void OnGUI()
       {

      GUI.Box(new Rect(100, 20, 150, 30), "欢迎注册");
      GUI.Box(new Rect(20, 60, 60, 30), "姓名");
      GUI.Box(new Rect(20, 100, 60, 30), "密码");
      GUI.Box(new Rect(20, 140, 60, 30), "年龄");
      GUI.Box(new Rect(20, 180, 60, 30), "简介");
      GUI.Box(new Rect(20, 290, 60, 30), "头像");
      str = GUI.TextField(new Rect(100, 60, 150, 30), str);
      str1 = GUI.PasswordField(new Rect(100, 100, 150, 30), str1, '*');
      str2 = GUI.TextField(new Rect(100, 140, 150, 30), str2);
      str3 = GUI.TextArea(new Rect(100, 180, 150, 100), str3);
      GUI.Label(new Rect(100, 290, img.width, img.height), img);

      if (GUI.Button(new Rect(80, 450, 60, 30), "注册"))
      {
      Application.LoadLevel(2);
       }
      if (GUI.Button(new Rect(160, 450, 60, 30), "取消"))
      {
        str = "";
        str1 = "";
        str3 = "";
        str2 = "";
      }
      }
      
        Application.LoadLevel()是跳转用的方法,()可以直接跟字符串(你所要调用的项目的名称),也可以跟(Application.loadedLevelName),但是后者只能调用本身,不能调用其他的项目。

2015-01-12 22:15:42 jingjingcrystal 阅读数 14940
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4712 人正在学习 去看看 张刚

unity学习,希望我的博客能给喜欢unity的朋友带来帮助


准备了几天的项目今天开始做了,我今天主要的任务就是做登陆注册界面,登陆注册界面要想好看点就要有背景图片,在unity中添加背景图片有两种方法,一种是通过代码来完成,还有一种是手动添加,我们都来看看吧。

       通过代码完成

  1. //声明一张图片
  2. public Texture2D img;

  3. //通过OnGUI方法执行下面操作
  4. void OnGUI()
  5. {
  6.         string aa = "";
  7.         
  8.         //构造一个空的GUIStyle
  9.         GUIStyle bb = new GUIStyle();
  10.         
  11.         //设置bb正常显示时是背景图片
  12.         bb.normal.background = img;
  13.         GUI.Label(new Rect(0, 0, 1370, 780), aa, bb);
  14. }

       手动添加:

              1、先创建一个新的摄像机,命名为Background Camera;

              2、新建一个GUI Texture,命名为Background Image;

              3、Background ImageInspector面板中点击Layer下拉窗口,选择“Add Layer添加一个新的层名称为“Background Image”;

       4、选中Background Image,做如下操作:

                     


               5、GameObjectLayer值设置为之前你添加的Background Image;

               6、选中Background Camera,进行如下操作:

                      

                7、选中主摄像机,Clear Flags设置为“Depth Only”,设置Culling Mask,取消选择“Background Image

    这样就完成了背景图片的设置。

    更多精彩请关注:http://unity.gopedu.com/


2017-11-05 15:20:45 eazey_wj 阅读数 342
  • Unity3D入门到精通-(3)Unity资源管理精讲

    本次系列课程的目标是让Unity3D初学者掌握Unity3d的资源管理技术进行了全面介绍,特别对AssetBundle资源如何进行更新,以及加载(依赖资源加载)进行了系统的介绍。 适合对象:Unity初学开发者,Unity中级开发者,网络程序开发者,所有对游戏开发有兴趣的人员。 学习条件:有一定的Unity3D基础,了解C#的基本开发知识。

    4712 人正在学习 去看看 张刚

【前言】

最近在做毕设项目,目前正在自己写整个登陆注册逻辑,使用 UGUI 来开发用户界面。在做的过程中“账号”这一模块既出现在“注册”界面,又出现在“登陆”界面,而“账号”模块输入验证的某些逻辑在两个界面中是有重合(在我的功能需求设计中)的,而我将事件代码完全的耦合在相应界面的脚本中,这就导致相同的逻辑我要在两个脚本出现相同的情况。

【解决】

目前一可行解决的办法是,将事件函数公开,利用 UGUI 提供的事件系统手动为各个 UI 响应控件指定事件,减少代码的重复度。

【结论】

UGUI 系统公开的事件函数的目的不单单让整个事件挂载变得可视化,我个人理解更深一步的,是共同的事件逻辑封装成可视化工具提供给各个需要此事件逻辑不同的对象。

【分析】

第一,将少量的相同逻辑封装成一个脚本,在较大的项目中较为不可取,因为增加了脚本数量而脚本中的代码较少。第二,在共同逻辑代码较少时我个人还是倾向中大型项目不使用编辑器的方式来指定,不管是个人开发还是多人开发(当然如果架构清晰,每个人负责功能模块比较小使用也无妨),因为编辑器的方式在管理起来还是不够清晰,一个界面一个主要的管理脚本还是我个人比较推崇的。

unity学习之在续NGUI

阅读数 451

没有更多推荐了,返回首页