2015-03-01 15:42:53 book_longssl 阅读数 1680
  • C# For Unity系列之中级篇

    课程总体目标:     本中级篇面向的学员不再是完全的编程“小白”,而是具备一定C#编程经验,需要进一步查漏补缺、或者需要进一步全面完善自己C#编程知识体系的广大Unity学员。相信通过本中级篇的学习,可以使得Unity初中级开发人员对于编程语言的掌握更进一步;对于开发中大型游戏项目,在编程语言这一层级进一步打下坚实的语言基础。 “中级篇”课程讲解特点:       本中级篇面向初中级游戏研发人员,以及Unity中高级学习者。为了更加深入的刨析各个语法的本质,我们采用反编译解读IL中间语言的方式,来解构语法难点,使得学员最短时间掌握语法本质。 本课程讲解内容:       "C#(for Unity)中级篇" 在“C#入门”、“基础篇”的基础之上,从以下四个方面着重研究我们游戏开发(包含软件开发)过程中,C#最重要、最实用的技能模块,使得广大游戏研发人员,对于C#这门Unity脚本有进一步更加完善的认识。 一:.Net 框架讲解。     A) .Net 发展历史。     B)  IL  中间语言。 CLR  公共语言运行时。     C) 多维数据(常用二维数组)与交错数组。     D) 可变参数 Params     E) 进一步解释“实参”,“形参”。     F) 类的实例化内存分配机制。 二:深入学习对象类型     A)  里氏替换原则(LSP)     B)  类的属性极其本质特性     C)  IS ,AS 关键字     D)  深入学习字符串理论         1] 字符串的“驻留性” 原理。         2] 字符串==与Equals() 的本质区别         3] 更多字符串常用方法学习。     E)  枚举类型以及适用场合。 三:深入学习集合特性     A)  什么是索引器,以及索引器的适用范围。     B)  学习自定义集合类,以及深入了解Foreach 语句的原理。     C)  深入学习 ArrayList,了解内部存储机制以及原理。     D)  深入学习 HashTable,了解内部存储机制以及原理。     E)  为什么学习泛型集合?     F)  泛型集合与普通集合的性能测试对比实验。     G)  学习“泛型约束”,以及“泛型约束”的适用条件。 四:委托与事件         A)  什么是委托,先从讲故事学习起:“老板来啦”!     B)  反编译掌握委托的本质。     C)  委托的四大开发步骤。     D)  什么是事件,以及委托与事件的区别。     E)  事件的常用使用方式。 温馨提示:       本C# for Unity 使用Virtual Studio2012,进行开发与讲解。(学员使用更高版本,对学习没有任何影响) 一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    1839 人正在学习 去看看 刘国柱

    



  介绍
  JSON是一个简单的,但功能强大的序列化数据格式。它定义了简单的类型,如布尔,数(int和float)和字符串,和几个数据结构:list和dictionnary。可以在http://JSON.org了解关于JSON的更多信息。
  litjson是用C #编写的,它的目的是要小,快速,易用。它使用了Mono框架。
  安装LitJSON
  将LitJSON编译好的dll文件通过Import New Asset的方式导入到项目中,再使用Using LitJSON即可使用JSONMapper类中的简便方法。dll的下载地址在这里.
  将JSON转化为Object并可逆向转化
  为了在.Net程序中使用JSON格式的数据。一个自然的方法是使用JSON文本生成一个特定的类的一个新实例;为了匹配类的格式,一般存储的JSON字符串是一个字典。
  另一方面,为了将对象序列化为JSON字符串,一个简单的导出操作,听起来是个好主意。
  为了这个目的,LitJSON包引入了JsonMapper类,它提供了两个用于做到 JSON转化为object 和 object转化为JSON 的主要方法。这两个方法是jsonmapper.toobject和jsonmapper.tojson。
  将object转化为字符串之后,我们就可以将这个字符串很方便地在文件中读取和写入了。
  一个简单的JsonMapper的例子
  在下面的例子中,ToObject方法有一个泛型参数,来指定返回的某种特定的数据类型:即JsonMapper.ToObjectT。
  
using LitJson;
  using System;
  public class Person
  {
  // C# 3.0 auto-implemented properties
  public string   Name     { get; set; }
  public int      Age      { get; set; }
  public DateTime Birthday { get; set; }
  }
  public class JsonSample
  {
  public static void Main()
  {
  PersonToJson();
  JsonToPerson();
  }
  public static void PersonToJson()
  {
  Person bill = new Person();
  bill.Name = "William Shakespeare";
  bill.Age  = 51;
  bill.Birthday = new DateTime(1564, 4, 26);
  string json_bill = JsonMapper.ToJson(bill);
  Console.WriteLine(json_bill);
  }
  public static void JsonToPerson()
  {
  string json = @"
  {
  ""Name""     : ""Thomas More"",
  ""Age""      : 57,
  ""Birthday"" : ""02/07/1478 00:00:00""
  }";
  Person thomas = JsonMapper.ToObjectPerson(json);
  Console.WriteLine("Thomas' age: {0}", thomas.Age);
  }
  }


  上文的输出:
  {"Name":"William Shakespeare","Age":51,"Birthday":"04/26/1564 00:00:00"}
  Thomas' age: 57
  使用非泛型的JsonMapper.ToObject
  当不存在特定的JSON数据类时,它将返回一个JSONData实例。JSONData是一种通用型可以保存任何数据类型支持JSON,包括list和dictionary。
  声明:此篇文档时来自于【狗刨学习网】社区-unity极致学院,是网友自行发布的Unity3D学习文章,如果有什么内容侵犯了你的相关权益,请与官方沟通,我们会即时处理。
using LitJson;
  using System;
  public class JsonSample
  {
  public static void Main()
  {
  string json = @"
  {
  ""album"" : {
  ""name""   : ""The Dark Side of the Moon"",
  ""artist"" : ""Pink Floyd"",
  ""year""   : 1973,
  ""tracks"" : [
  ""Speak To Me"",
  ""Breathe"",
  ""On The Run""
  ]
  }
  }
  ";
  LoadAlbumData(json);
  }
  public static void LoadAlbumData(string json_text)
  {
  Console.WriteLine("Reading data from the following JSON string: {0}",
  json_text);
  JsonData data = JsonMapper.ToObject(json_text);
  // Dictionaries are accessed like a hash-table
  Console.WriteLine("Album's name: {0}", data["album"]["name"]);
  // Scalar elements stored in a JsonData instance can be cast to
  // their natural types
  string artist = (string) data["album"]["artist"];
  int    year   = (int) data["album"]["year"];
  Console.WriteLine("Recorded by {0} in {1}", artist, year);
  // Arrays are accessed like regular lists as well
  Console.WriteLine("First track: {0}", data["album"]["tracks"][0]);
  }
  }
  上面例子的输出:
  Reading data from the following JSON string:
  {
  "album" : {
  "name"   : "The Dark Side of the Moon",
  "artist" : "Pink Floyd",
  "year"   : 1973,
  "tracks" : [
  "Speak To Me",
  "Breathe",
  "On The Run"
  ]
  }
  }
  Album's name: The Dark Side of the Moon
  Recorded by Pink Floyd in 1973
  First track: Speak To Me
  Reader和Writer
  一些人喜欢使用stream的方式处理JSON数据,对于他们, 我们提供的接口是jsonreader和jsonwriter。
  JSONMapper实际上是建立在以上两个类的基础上的,所以你可以把这两个类当成是litJSON的底层接口。
  使用JsonReader
  using LitJson;
  using System;
  public class DataReader
  {
  public static void Main()
  {
  string sample = @"{
  ""name""  : ""Bill"",
  ""age""   : 32,
  ""awake"" : true,
  ""n""     : 1994.0226,
  ""note""  : [ ""life"", ""is"", ""but"", ""a"", ""dream"" ]
  }";
  PrintJson(sample);
  }
  public static void PrintJson(string json)
  {
  JsonReader reader = new JsonReader(json);
  Console.WriteLine ("{0,14} {1,10} {2,16}", "Token", "Value", "Type");
  Console.WriteLine (new String ('-', 42));
  // The Read() method returns false when there's nothing else to read
  while (reader.Read()) {
  string type = reader.Value != null ?
  reader.Value.GetType().ToString() : "";
  Console.WriteLine("{0,14} {1,10} {2,16}",
  reader.Token, reader.Value, type);
  }
  }
  }


  输出如下:
  
Token      Value             Type
  ------------------------------------------
  ObjectStart                           
  PropertyName       name    System.String
  String       Bill    System.String
  PropertyName        age    System.String
  Int         32     System.Int32
  PropertyName      awake    System.String
  Boolean       True   System.Boolean
  PropertyName          n    System.String
  Double  1994.0226    System.Double
  PropertyName       note    System.String
  ArrayStart                           
  String       life    System.String
  String         is    System.String
  String        but    System.String
  String          a    System.String
  String      dream    System.String
  ArrayEnd                           
  ObjectEnd





2017-06-28 18:49:39 JeterPong 阅读数 2523
  • C# For Unity系列之中级篇

    课程总体目标:     本中级篇面向的学员不再是完全的编程“小白”,而是具备一定C#编程经验,需要进一步查漏补缺、或者需要进一步全面完善自己C#编程知识体系的广大Unity学员。相信通过本中级篇的学习,可以使得Unity初中级开发人员对于编程语言的掌握更进一步;对于开发中大型游戏项目,在编程语言这一层级进一步打下坚实的语言基础。 “中级篇”课程讲解特点:       本中级篇面向初中级游戏研发人员,以及Unity中高级学习者。为了更加深入的刨析各个语法的本质,我们采用反编译解读IL中间语言的方式,来解构语法难点,使得学员最短时间掌握语法本质。 本课程讲解内容:       "C#(for Unity)中级篇" 在“C#入门”、“基础篇”的基础之上,从以下四个方面着重研究我们游戏开发(包含软件开发)过程中,C#最重要、最实用的技能模块,使得广大游戏研发人员,对于C#这门Unity脚本有进一步更加完善的认识。 一:.Net 框架讲解。     A) .Net 发展历史。     B)  IL  中间语言。 CLR  公共语言运行时。     C) 多维数据(常用二维数组)与交错数组。     D) 可变参数 Params     E) 进一步解释“实参”,“形参”。     F) 类的实例化内存分配机制。 二:深入学习对象类型     A)  里氏替换原则(LSP)     B)  类的属性极其本质特性     C)  IS ,AS 关键字     D)  深入学习字符串理论         1] 字符串的“驻留性” 原理。         2] 字符串==与Equals() 的本质区别         3] 更多字符串常用方法学习。     E)  枚举类型以及适用场合。 三:深入学习集合特性     A)  什么是索引器,以及索引器的适用范围。     B)  学习自定义集合类,以及深入了解Foreach 语句的原理。     C)  深入学习 ArrayList,了解内部存储机制以及原理。     D)  深入学习 HashTable,了解内部存储机制以及原理。     E)  为什么学习泛型集合?     F)  泛型集合与普通集合的性能测试对比实验。     G)  学习“泛型约束”,以及“泛型约束”的适用条件。 四:委托与事件         A)  什么是委托,先从讲故事学习起:“老板来啦”!     B)  反编译掌握委托的本质。     C)  委托的四大开发步骤。     D)  什么是事件,以及委托与事件的区别。     E)  事件的常用使用方式。 温馨提示:       本C# for Unity 使用Virtual Studio2012,进行开发与讲解。(学员使用更高版本,对学习没有任何影响) 一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    1839 人正在学习 去看看 刘国柱

前言:
Unity3D 自制类似 android Toast 提示框消息 显示。

首先,需要自定义一个 文本UI 对象 预制体,再在需要的时候,加载显示 (0^◇^0)/
根据字符串 参数传递,显示提示消息

     // 提示 消息
        public void onTips(string tips_str)
        {
            GameObject toast = Resources.Load("XXX") as GameObject; // 加载预制体
            GameObject m_toast = Instantiate(toast, null, true);    // 对象初始化
            m_toast.transform.parent = home.transform;              // 附加到父节点(需要显示的UI下)
            m_toast.transform.localScale = Vector3.one;
            m_toast.transform.localPosition = Vector3.zero;
            Text tips = m_toast.transform.FindChild("lab_toast").GetComponent<Text>();
            tips.text = tips_str;
            Destroy(m_toast, 2); // 2秒后 销毁
        }

更新 (2017/9/22):

根据 字符串长度 自适配窗体大小,绑定当前UI父节点:

        // arg0: 提示信息
        // arg1: 提示框体父节点
        public void ShowToastUI(string str, Transform trans)
        {
            GameObject toast = Resources.Load("XXX") as GameObject; // 加载预制体
            GameObject m_toast = Instantiate(toast, null, true);    // 对象初始化
            m_toast.transform.parent = trans;
            m_toast.transform.localScale = Vector3.one;
            m_toast.transform.localPosition = Vector3.zero;
            RectTransform transform = m_toast.transform.GetComponent<RectTransform>();
            Text tips = m_toast.transform.FindChild("lab_toast").GetComponent<Text>();
            tips.text = str; 
            // 根据字符长度,适配窗体大小
            // arg0: 字符串长度*文本字体大小,再加上边距为提示窗体的宽度
            // arg1: 提示窗体高度 45 (可根据自己需求做适当修改)
            transform.sizeDelta = new Vector2(str.Length * tips.fontSize + 35, 45);

            GameObject.Destroy(m_toast, 2);
        }

嗯,先介绍到这里,希望对你有帮助(~ ̄▽ ̄)~

2013-05-03 21:38:10 iteye_20251 阅读数 239
  • C# For Unity系列之中级篇

    课程总体目标:     本中级篇面向的学员不再是完全的编程“小白”,而是具备一定C#编程经验,需要进一步查漏补缺、或者需要进一步全面完善自己C#编程知识体系的广大Unity学员。相信通过本中级篇的学习,可以使得Unity初中级开发人员对于编程语言的掌握更进一步;对于开发中大型游戏项目,在编程语言这一层级进一步打下坚实的语言基础。 “中级篇”课程讲解特点:       本中级篇面向初中级游戏研发人员,以及Unity中高级学习者。为了更加深入的刨析各个语法的本质,我们采用反编译解读IL中间语言的方式,来解构语法难点,使得学员最短时间掌握语法本质。 本课程讲解内容:       "C#(for Unity)中级篇" 在“C#入门”、“基础篇”的基础之上,从以下四个方面着重研究我们游戏开发(包含软件开发)过程中,C#最重要、最实用的技能模块,使得广大游戏研发人员,对于C#这门Unity脚本有进一步更加完善的认识。 一:.Net 框架讲解。     A) .Net 发展历史。     B)  IL  中间语言。 CLR  公共语言运行时。     C) 多维数据(常用二维数组)与交错数组。     D) 可变参数 Params     E) 进一步解释“实参”,“形参”。     F) 类的实例化内存分配机制。 二:深入学习对象类型     A)  里氏替换原则(LSP)     B)  类的属性极其本质特性     C)  IS ,AS 关键字     D)  深入学习字符串理论         1] 字符串的“驻留性” 原理。         2] 字符串==与Equals() 的本质区别         3] 更多字符串常用方法学习。     E)  枚举类型以及适用场合。 三:深入学习集合特性     A)  什么是索引器,以及索引器的适用范围。     B)  学习自定义集合类,以及深入了解Foreach 语句的原理。     C)  深入学习 ArrayList,了解内部存储机制以及原理。     D)  深入学习 HashTable,了解内部存储机制以及原理。     E)  为什么学习泛型集合?     F)  泛型集合与普通集合的性能测试对比实验。     G)  学习“泛型约束”,以及“泛型约束”的适用条件。 四:委托与事件         A)  什么是委托,先从讲故事学习起:“老板来啦”!     B)  反编译掌握委托的本质。     C)  委托的四大开发步骤。     D)  什么是事件,以及委托与事件的区别。     E)  事件的常用使用方式。 温馨提示:       本C# for Unity 使用Virtual Studio2012,进行开发与讲解。(学员使用更高版本,对学习没有任何影响) 一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    1839 人正在学习 去看看 刘国柱

    Label控件是Unity 3D GUI高级控件中的标签控件,可以在游戏界面中以文本的形式展示出一段字符串信息,还可以展示贴图。

 

    下边是实例代码如下:

#pragma strict

//定义公有的字符串变量,用来接收外部赋值字符串(默认是公有的)
var str:String;

//定义公有的贴图对象变量,用来接收外部赋值的贴图(默认是公有的)
var image:Texture;

//定义私有的贴图宽度变量
private var imageWidth:int;
//定义私有的贴图高度变量
private var imageHeight:int;

//定义私有的屏幕宽度变量
private var screenWidth:int;
//定义私有的屏幕高度变量
private var screenHeight:int;

function Start () {
	//通过Screen来获取屏幕的宽度和高度
	screenWidth = Screen.width;
	screenHeight = Screen.height;
	//通过image贴图对象来获取贴图的宽度和高度
	imageWidth = image.width;
	imageHeight = image.height;	
}

function OnGUI () {
	//将文字内容显示在屏幕中
	GUI.Label(Rect(10,10,200,30),str);
	GUI.Label(Rect(10,50,200,30),"当前屏幕的宽度:"+screenWidth);
	GUI.Label(Rect(10,90,200,30),"当前屏幕的高度:"+screenHeight);
	
	//将贴图显示在屏幕中
	GUI.Label(Rect(10,130,imageWidth,imageHeight),image);
}

 

 

上述的代码示例中,使用了两个方法:第一个是Start()方法,该方法只会执行一次,在程序运行的时候执行,所以需要将初始化的相关代码都放在Start()方法中;第二个是OnGUI()方法,它是界面绘制方法,所有GUI的绘制都需要在这个方法中实现。

 

所有的脚本只有绑定在游戏对象上时,才会执行脚本自身的生命周期。此处你可以将上述的脚本对象添加给任何一个游戏对象模型。将脚本添加给模型后,记得在Inspector

视图中为脚本中的公有变量赋值,如下图所示:

注意:只有公有的变量才能在编译器中以拖拽对象或输入的形式赋值。在声明变量时,在变量前方添加public关键字或未添加任何关键字表示该变量为公有变量,如:

public var str :String ;

var str:String ;

如果在变量前方添加private关键字的变量,则为私有变量。私有变量不会出现在编辑器中,只能在脚本中使用。

运行程序后的结果是如下所示:

 

 

<!--EndFragment-->

 

<!--EndFragment-->
2018-05-03 01:24:36 luoyikun 阅读数 546
  • C# For Unity系列之中级篇

    课程总体目标:     本中级篇面向的学员不再是完全的编程“小白”,而是具备一定C#编程经验,需要进一步查漏补缺、或者需要进一步全面完善自己C#编程知识体系的广大Unity学员。相信通过本中级篇的学习,可以使得Unity初中级开发人员对于编程语言的掌握更进一步;对于开发中大型游戏项目,在编程语言这一层级进一步打下坚实的语言基础。 “中级篇”课程讲解特点:       本中级篇面向初中级游戏研发人员,以及Unity中高级学习者。为了更加深入的刨析各个语法的本质,我们采用反编译解读IL中间语言的方式,来解构语法难点,使得学员最短时间掌握语法本质。 本课程讲解内容:       "C#(for Unity)中级篇" 在“C#入门”、“基础篇”的基础之上,从以下四个方面着重研究我们游戏开发(包含软件开发)过程中,C#最重要、最实用的技能模块,使得广大游戏研发人员,对于C#这门Unity脚本有进一步更加完善的认识。 一:.Net 框架讲解。     A) .Net 发展历史。     B)  IL  中间语言。 CLR  公共语言运行时。     C) 多维数据(常用二维数组)与交错数组。     D) 可变参数 Params     E) 进一步解释“实参”,“形参”。     F) 类的实例化内存分配机制。 二:深入学习对象类型     A)  里氏替换原则(LSP)     B)  类的属性极其本质特性     C)  IS ,AS 关键字     D)  深入学习字符串理论         1] 字符串的“驻留性” 原理。         2] 字符串==与Equals() 的本质区别         3] 更多字符串常用方法学习。     E)  枚举类型以及适用场合。 三:深入学习集合特性     A)  什么是索引器,以及索引器的适用范围。     B)  学习自定义集合类,以及深入了解Foreach 语句的原理。     C)  深入学习 ArrayList,了解内部存储机制以及原理。     D)  深入学习 HashTable,了解内部存储机制以及原理。     E)  为什么学习泛型集合?     F)  泛型集合与普通集合的性能测试对比实验。     G)  学习“泛型约束”,以及“泛型约束”的适用条件。 四:委托与事件         A)  什么是委托,先从讲故事学习起:“老板来啦”!     B)  反编译掌握委托的本质。     C)  委托的四大开发步骤。     D)  什么是事件,以及委托与事件的区别。     E)  事件的常用使用方式。 温馨提示:       本C# for Unity 使用Virtual Studio2012,进行开发与讲解。(学员使用更高版本,对学习没有任何影响) 一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    1839 人正在学习 去看看 刘国柱

在xLua加自定义loader是很简单的,只涉及到一个接口:
public delegate byte[] CustomLoader(ref string filepath);
public void LuaEnv.AddLoader(CustomLoader loader)
通过AddLoader可以注册个回调,该回调参数是字符串,lua代码里头调用require时,参数将会透传给回调,回调中就可以根据这个参数去加载指定文件,如果需要支持调试,需要把filepath修改为真实路径传出。该回调返回值是一个byte数组,如果为空表示该loader找不到,否则则为lua文件的内容。

private LuaEnv luaEnv;

    private void Awake()
    {
        luaEnv = new LuaEnv();
        luaEnv.AddLoader(MyLoader);
        luaEnv.DoString("require'fish'");
    }

    private byte[] MyLoader(ref string filePath)
    {
        string absPath = @Application.dataPath+"/xx/"+filePath+".lua.txt";
        return System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(absPath));
    }

    private void OnDestroy()
    {
        luaEnv.Dispose();
    }
2016-03-26 10:50:18 linshuhe1 阅读数 5468
  • C# For Unity系列之中级篇

    课程总体目标:     本中级篇面向的学员不再是完全的编程“小白”,而是具备一定C#编程经验,需要进一步查漏补缺、或者需要进一步全面完善自己C#编程知识体系的广大Unity学员。相信通过本中级篇的学习,可以使得Unity初中级开发人员对于编程语言的掌握更进一步;对于开发中大型游戏项目,在编程语言这一层级进一步打下坚实的语言基础。 “中级篇”课程讲解特点:       本中级篇面向初中级游戏研发人员,以及Unity中高级学习者。为了更加深入的刨析各个语法的本质,我们采用反编译解读IL中间语言的方式,来解构语法难点,使得学员最短时间掌握语法本质。 本课程讲解内容:       "C#(for Unity)中级篇" 在“C#入门”、“基础篇”的基础之上,从以下四个方面着重研究我们游戏开发(包含软件开发)过程中,C#最重要、最实用的技能模块,使得广大游戏研发人员,对于C#这门Unity脚本有进一步更加完善的认识。 一:.Net 框架讲解。     A) .Net 发展历史。     B)  IL  中间语言。 CLR  公共语言运行时。     C) 多维数据(常用二维数组)与交错数组。     D) 可变参数 Params     E) 进一步解释“实参”,“形参”。     F) 类的实例化内存分配机制。 二:深入学习对象类型     A)  里氏替换原则(LSP)     B)  类的属性极其本质特性     C)  IS ,AS 关键字     D)  深入学习字符串理论         1] 字符串的“驻留性” 原理。         2] 字符串==与Equals() 的本质区别         3] 更多字符串常用方法学习。     E)  枚举类型以及适用场合。 三:深入学习集合特性     A)  什么是索引器,以及索引器的适用范围。     B)  学习自定义集合类,以及深入了解Foreach 语句的原理。     C)  深入学习 ArrayList,了解内部存储机制以及原理。     D)  深入学习 HashTable,了解内部存储机制以及原理。     E)  为什么学习泛型集合?     F)  泛型集合与普通集合的性能测试对比实验。     G)  学习“泛型约束”,以及“泛型约束”的适用条件。 四:委托与事件         A)  什么是委托,先从讲故事学习起:“老板来啦”!     B)  反编译掌握委托的本质。     C)  委托的四大开发步骤。     D)  什么是事件,以及委托与事件的区别。     E)  事件的常用使用方式。 温馨提示:       本C# for Unity 使用Virtual Studio2012,进行开发与讲解。(学员使用更高版本,对学习没有任何影响) 一、热更新系列(技术含量:中高级): A:《lua热更新技术中级篇》 https://edu.csdn.net/course/detail/27087 B:《热更新框架设计之Xlua基础视频课程》 https://edu.csdn.net/course/detail/27110 C:《热更新框架设计之热更流程与热补丁技术》 https://edu.csdn.net/course/detail/27118 D:《热更新框架设计之客户端热更框架(上)》 https://edu.csdn.net/course/detail/27132 E:《热更新框架设计之客户端热更框架(中)》 https://edu.csdn.net/course/detail/27135 F:《热更新框架设计之客户端热更框架(下)》 https://edu.csdn.net/course/detail/27136 二:框架设计系列(技术含量:中级):  A:《游戏UI界面框架设计系列视频课程》 https://edu.csdn.net/course/detail/27142 B:《Unity客户端框架设计PureMVC篇视频课程(上)》 https://edu.csdn.net/course/detail/27172 C:《Unity客户端框架设计PureMVC篇视频课程(下)》 https://edu.csdn.net/course/detail/27173 D:《AssetBundle框架设计_框架篇视频课程》 https://edu.csdn.net/course/detail/27169 三、Unity脚本从入门到精通(技术含量:初级) A:《C# For Unity系列之入门篇》 https://edu.csdn.net/course/detail/4560 B:《C# For Unity系列之基础篇》 https://edu.csdn.net/course/detail/4595 C: 《C# For Unity系列之中级篇》 https://edu.csdn.net/course/detail/24422 D:《C# For Unity系列之进阶篇》 https://edu.csdn.net/course/detail/24465 四、虚拟现实(VR)与增强现实(AR):(技术含量:初级) A:《虚拟现实之汽车仿真模拟系统 》 https://edu.csdn.net/course/detail/26618 五、Unity基础课程系列(技术含量:初级)  A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》   https://edu.csdn.net/course/detail/24643 B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》 https://edu.csdn.net/course/detail/24645  C:《Unity ECS(二) 小试牛刀》 https://edu.csdn.net/course/detail/27096 六、Unity ARPG课程(技术含量:初中级): A:《MMOARPG地下守护神_单机版实战视频课程(上部)》 https://edu.csdn.net/course/detail/24965 B:《MMOARPG地下守护神_单机版实战视频课程(中部)》 https://edu.csdn.net/course/detail/24968 C:《MMOARPG地下守护神_单机版实战视频课程(下部)》 https://edu.csdn.net/course/detail/24979

    1839 人正在学习 去看看 刘国柱

<pre name="code" class="csharp">

        ScriptableObject:经常用于存储一些unity3d本身不能打包的对象(object),比如:字符串,一些类对象等。用这个类型的子类型,则可以用BuildPipeline打包成assetbundle包或者.assets文件供后续使用。

接下来我们通过一个简单的实例来展示如何使用ScriptableObject类:

步骤一:创建一个继承自ScriptableObject的类:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
[System.Serializable]
/// <summary>
/// 保存表格导出的序列号数据
/// </summary>
public class GameDataScriptable : ScriptableObject {
    /// <summary>
    /// 技能字典
    /// </summary>
    public List<SkillItem> _SkillDictionary = new List<SkillItem>();
    public List<SkillItem> SkillDictionary {
        get { return _SkillDictionary; }
        set { _SkillDictionary = value; }
    }
}

        这里我们希望存在ScriptableObject中的是一个技能字典对象,SkillItem的数据结构可以自行定义,也可以用string或者int等简单数据类型来取代

using UnityEngine;
using System.Collections;
using System;
[System.Serializable]
/// <summary>
/// 表格数据结构
/// </summary>
public class SkillItem
{
    public int _SkillId;
    public string _SkillName;
    public int SkillId
    {
        get { return _SkillId; }
        set { _SkillId = value; }
    }
    public string SkillName
    {
        get { return _SkillName; }
        set { _SkillName = value; }
    }
}

步骤二:创建一个在Unity引擎中使用的编辑器脚本,并且此脚本必须存放在Assets目录下面的Editor文件夹下面,在这样的脚本都继承于Editor类:

using UnityEngine;
using UnityEditor;
using System.Collections;
using System.Collections.Generic;
using System.IO;

public class ToolsMenu:Editor{
    [MenuItem("打包工具/部分资源打包/打包表格数据")]
    public static void BuildConfigData()
    {
        Caching.CleanCache();
	//通过ScriptableObject创建一个对象的实例
	GameDataScriptable gs = ScriptableObject.CreateInstance<GameDataScriptable>();
	//对对象的属性进行赋值
	for(int i=1;i<3;i++){
		SkillItem item = new SkillItem();
		item.SkillId = i;			    
		item.SkillName = "技能" + i;  
		gs.SkillDictionary.Add(item);
	}
	//创建资源文件(可以在编辑器下直接编辑数据)
	AssetDatabase.CreateAsset(gs, "Assets/GameDataConfig.asset");
	//将资源反序列化为一个对象
	 Object o = AssetDatabase.LoadAssetAtPath("Assets/GameDataConfig.asset", typeof(GameDataScriptable));
         string targetPath = "Assets/GameData.assetbundle";
         //assetbundle文件只能在运行时加载,并且只能通过WWW加载
	 BuildPipeline.BuildAssetBundle(o, null, targetPath);
         //删除临时的资源文件
	 AssetDatabase.DeleteAsset("Assets/GameDataConfig.asset");
    }
}

步骤三:运行时加载这个数据资源

using UnityEngine;
using System.Collections;
public class LoadFileTest:MonoBehaviour
{
    IEnumerator Start ()
    {
      WWW www = new WWW("file://" + Application.dataPath + "/../GameDataConfig.assetbundle");
      yield return www;
      //转换资源为Test,这个test对象将拥有原来在编辑器中设置的数据。
      GameDataScriptable test = www.assetBundle.mainAsset as GameDataScriptable;
      Debug.Log("技能1的Id:"+test.SkillDictionary[0].SkillId);
    }
}


补充:这其实是把整个对象实例打包,如果ScriptableObject属性中包括其他的类实例,则这些类需加上[Serializable]序列化。通过这种方法,可以将系统需要的数据(如导表出来的数据等等)打包,加载后直接转换为预定的类型,可以大大加快数据加载读取的速度,具有更高的效率。

unity 3d学习第二天

阅读数 227

Unity3D数组和遍历

阅读数 6713

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