2018-08-20 15:39:06 wang_huizhang 阅读数 198
  • Unity3D入门到精通-(3)Unity资源管理精讲

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

    4707 人正在学习 去看看 张刚

UGUI

using UnityEngine.UI;

Text控件
Text text;
text = GameObject.Find("ATestText").GetComponent<Text>() ;
text.text="需要显示的的字符串";


Image控件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;
using System;
public class UGUIImageControl : MonoBehaviour {

    // Use this for initialization
    Texture2D texture2D;
    public Image image;
    string ImagePath = "Assets/Cinema Suite/About/Resources/MocapKeyImage.png";
    string ImagePath2 = "sprites/tempIMG";//overrideSprite方法必须用Resources文件夹里的资源
    int a = 1;
    void Start () {

        image= GameObject.Find("Image_A").GetComponent<Image>();
        LoadByIO();
        
    }
    
    private void LoadByIO()
    { 
        /*
         * 读取图片文件
         */
        FileStream fileStream = new FileStream(ImagePath, FileMode.Open, FileAccess.Read);
        fileStream.Seek(0, SeekOrigin.Begin);
        byte[] bytes = new byte[fileStream.Length];
        fileStream.Read(bytes, 0, (int)fileStream.Length);
        fileStream.Close();
        fileStream.Dispose();
        fileStream = null;

        /*
         * 创建Textture
         */
        int width = 300;
        int height = 372;
        Texture2D texture2D = new Texture2D(width,height);
        texture2D.LoadImage(bytes);
        
        /*
         * 创建精灵。
         */
        Sprite sprite = Sprite.Create(texture2D, new Rect(0, 0, texture2D.width, texture2D.height), new Vector2(0.5f, 0.5f));

        image.sprite = sprite;
    }
    // Update is called once per frame
    void Update () {
        a++;
        if(a>300)
        {
            print(a);
            image.overrideSprite= Resources.Load<Sprite>(ImagePath2) as Sprite;
            //overrideSprite方法必须用Resources文件夹里的资源
        }
    }
}


Button控件
1. 在onClick选项里操作。
2. Button.onClick.AddListener(f);//f为编写好的函数。
3. EventTrigger添加:(也可以用层级试图操作)
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine;

public class AddTrigger : MonoBehaviour {

    // Use this for initialization
    void Start() {
        UnityAction<BaseEventData> click = new UnityAction<BaseEventData>(MyClick);
        EventTrigger.Entry myClick = new EventTrigger.Entry();
        myClick.eventID = EventTriggerType.PointerClick;
        myClick.callback.AddListener(click);

        EventTrigger trigger = gameObject.AddComponent<EventTrigger>();
        trigger.triggers.Add(myClick);
    }

    public void MyClick(BaseEventData data)
    {
        Debug.Log("自己写的evnt trigger");
    }
}

 

Toggle 控件
监听Toggle。
public Toggle toggle;
toggle.onValueChanged.AddListener((bool value)=>OnToggleClick(toggle,value));


public void OnToggleClick(Toggle  toggle,bool value)
    {
        Debug.Log("toggle change"+(value?"On":"Off"));
    }


slider滑动条
scrollbar滚动条

 

NGUI

面板滚动:

父物体Clipping加ScrollView脚本,子物体加 DragScrollView脚本,脚本参数为父物体。(注意锚点,锚点挂住无法滑动)

添加Button的方式:

新建gameObject,然后添加Button脚本 或者在

Toogle和开关

添加Toogle脚本和BoxCollider2D,3D的不行。

Grid 整齐排列

Table 表格排列,多出的列放到新的一行

聊天窗口的制作(box Collider 要换成 2D 的)

聊天窗口的制作

PopupList 下拉列表

2017-10-23 14:16:39 qq_33994566 阅读数 2601
  • Unity3D入门到精通-(3)Unity资源管理精讲

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

    4707 人正在学习 去看看 张刚

unity3D项目中很多需要配置文件,对于一些简单的配置,我们可以用text文件来保存我们的配置数据。下面是我的解析代码:

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

public class LoadText
{
    public static string textPath = Application.streamingAssetsPath + "/Parama.txt";
 
    public static string[] LoadText1()
    {
        byte[] dataBytes=new byte[100];
        string[] dataList=new string[19];
        try
        {
            FileStream file = new FileStream(textPath, FileMode.Open);
            file.Seek(0, SeekOrigin.Begin);
            file.Read(dataBytes, 0, 100);
            string s = Encoding.Default.GetString(dataBytes);
            dataList=s.Split(',');
            file.Close();
            return dataList;
        }
        catch (Exception)
        {
            throw;
        }
    }
}

c#的流形式用完一定要关闭。否则会报错。

还有一个做测试用的,我们把输出信息保存到文本里可以看到程序运行情况。上代码:

 public void Save(string information)
    {
        Debug.Log("Save");
        string path = Application.streamingAssetsPath + @"/TestText.txt";
        FileStream aFile;
        if (!File.Exists(path))
        {
            aFile = new FileStream(path, FileMode.OpenOrCreate);
        }
        else
        {
            aFile = new FileStream(path, FileMode.Append);
        }
        StreamWriter sw = new StreamWriter(aFile);
        sw.Write(information);
        sw.Close();
        sw.Dispose();
    }


2015-02-16 13:25:37 book_longssl 阅读数 1313
  • Unity3D入门到精通-(3)Unity资源管理精讲

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

    4707 人正在学习 去看看 张刚

  用 Sublime 已经有很长一段时间,很舒适,很贴心,根本停不下来。之前因为是开发页游,所以是用 AS3 开发,近段时间,新开了个手游项目,引擎方面选定了 ,老实说,之前没有太多的 3D 的概念,只是自己偶尔会下个 AS3 写的 3D 引擎玩一下,折腾折腾,并没有实际的工作中用到过相关的东西,如今项目需要用 ,有些兴奋,这可不是自己折腾的小打小闹了。

   支持的脚本有3种:C#, JS, Boo,我们这边是打算使用 C#,在使用语言的问题上并没有做太多的讨论,一个是效率上,另一个是别的团队的成功经验,所以一开始就选定了 C#。Unity 自带了一个 IDE 叫 MonoDevelop,整个非常小清新的感觉,但遗憾的是,我用了一小段时间,发现非常难以适应,快捷键、效率、主题,以及编辑器的各种特性都让我用得很不舒服,换一套已经熟悉的操作习惯成本太高,无奈之下,只好 Sublime 上场了。

  Google 了之后,发现使用 Sublime 来开发 Unity 的还是大有人大,经过一翻折腾,装上各种插件,写好各种配置后,大功告成。在写代码方面完全可以抛弃 MonoDevelop 了,当然断点调试还是需要它的,所以现在的工作台上这3个程序都得开着,Unity 负责场景编辑,Sublime 负责脚本编写,MonoDevelop 负责断点调试。

  另外提一下, Sublime 中修改插件非常方便,你打开相应插件的目录,然后打开里面的 py 文件,你改,你保存,你看效果。
  以下,就介绍一下我下载的各种插件以及配置。

  Sublime 中 C# 注释快捷键

  Sublime 注释的快捷键是 ctrl+/,对于不同的语言根据文件的扩展名会有不同的注释类型,不知道为什么这个快捷键在 C# 中似乎是失效了,也找到了解决方法,因为 C# 的注释和 JS 是一样的,所以把 JS 中关于注释那一块的 source 类型加上 cs 就好。具体的操作步骤如下:

  1、打开 Sublime 的包目录,Preference - Browse Packages ...
  2、打开 JavaScript,找到 Comments.tmPreferences 并编辑
  3、找到并编辑stringsource.js, source.json, source.cs/string

  C# 语法分析
  这个插件是重中之重,它会从 dll 文件中分析相关的类信息以及其他的元信息,然后你在编辑 cs 文件的时候,会在输入 . 的时候触发补全功能,根据不同的上下文,不同的变量,不同的类文件,会显示出相应的变量和方法提示列表,好用到暴!拉下来我们安装:
  1、安装插件:CompleteSharp
  2、编辑工程文件,工程文件是指扩展名为 *.sublime-project 的文件
  3、在工程文件中加入如下相关的 dll 信息
  

  

  {
  "folders":
  [
  {
  "path": "/D/Documents/Unity"
  }
  ],
  "settings":
  {
  "completesharp_assemblies": [
  "D:/Program Files (x86)/Unity/Editor/Data/Managed/UnityEngine.dll",
  "D:/Program Files (x86)/Unity/Editor/Data/Managed/UnityEditor.dll",
  "D:/Program Files (x86)/Unity/Editor/Data/Managed/nunit.framework.dll",
  "D:/Program Files (x86)/Unity/Editor/Data/Mono/lib/mono/unity/UnityScript.dll",
  "D:/Program Files (x86)/Unity/Editor/Data/Mono/lib/mono/unity/System.Core.dll",
  "D:/Program Files (x86)/Unity/Editor/Data/Mono/lib/mono/unity/System.dll",
  "D:/Documents/Unity/*/*/*/*/*.dll",
  "D:/Documents/Unity/*/*/*/*.dll"
  ]
  }
  }
  unity.sublime-project
  

配置文件图如下:
  

  
      增强版的 All AutoComplete
    

          基本上 All AutoComplete 可以算是必装的几个 Sublime 插件之一,不过我一直觉得 All AutoComplete 还是有点缺陷。按照插件的描述,All AutoComplete 会查询当前所有的标签页,并将分析其中的单词,然后在编辑的时候将合适的单词加入提示列表中。我说的缺陷在于,有一些单词对于我来说,是有必要每次都加入提示列表的,比如我自己有一个自己的代码库,里面就有很多自己写的类,类的例句也是我的风格,但如果要补全的话就需要打开相关的类文件,这是相当蛋疼的,所以一直有想改一下,改成 All AutoComplete 除了它自己分析的单词外,另外再加入我自定义的单词。
  

        其实,这也算不上它的缺陷,只是我个人的的需求,我这个需求还有另外一个方法解决,就是建立相应的代码片断,有多少自定义的单词,就需要建立多少代码片断的文件,太麻烦了。
 
      我试着改了一下 All AutoComplete,编辑 all_views_completions.py 文件,在其中 AllAutocomplete 中加入了一个 __init__ 方法,该方法会在插件初始化的时候去读取一个指定目录下的文件,指定目录下会有若干个文件,文件为一个以 '|' 为分隔符的单词的字符串,比如:Abs|AccelerationEvent,并将所有读取到的单词加入到 self.customs 中,然后在触发补全的方法中,将自定义的单词加入进去,大概效果效果如下(unity.txt 这份文件其实是从 Unity3D/UnityC#.tmLanguage 中扒过来的):



  def __init__(self):
  words = []
  for root, dirs, files in os.walk("D:/Program Files/Sublime Text 2/Conf/Packages/All Autocomplete/custom"):
  for name in files:
  with open(os.path.join(root, name), "r") as file:
  words += file.read().split('|')
  words = filter_words2(words)
  self.customs = without_duplicates(words)
  __init__
  


  


  


   脚本参考
  写代码的过程中,经常会需要查 API 文档,所以方便的查 API 文档是一个重要的功能。Sublime 本身并不提供类似的功能,但这难不倒各位程序员童鞋,我在网上找到一个插件:Unity3D Script Reference Search,这个插件的作用就是搜索 API,可以搜索当前光标上的单词,也可以输入指定的内容。这个插件干的事情非常简单,其实就是在插件中调用 webbrowser.open_new_tab(url) ,其中 url 就是拼成的一个查询链接。不过这个插件访问的 url 却是官网的在线 API,而实际上在本地是也有一份 API 文档的,通过 Unity 菜单 Help - Scripting Reference 可以访问。
  我试着改了一下插件,修改 Unity3DScriptReference.py 文件,将其中的 url 链接改成指向本地的文件,似乎并不生效,web 这一块我不熟悉,所以我干脆简单点,用 Python 开一个简单的 http 服务,我在使用Python创建简单的HTTP和FTP服务中有介绍,直接在 目录下面开一个 http 服务,最终的效果图如下:
  


  


  2014/5/23 修改:因为有先入为主的想法,以为只能用 webbrowser 来访问网页,实际上是不需要的,http 服务也是没必要开的,上面的代码只要改一下就可以,将 webbrowser.open_new_tab 改成 subprocess.call 就可以了,如下:

  browser = "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe "
  def SearchUnityScriptReferenceFor(text):
  # url = 'http://unity3d.com/support/documentation/ScriptReference/30_search.html?q=' + text.replace(' ','%20')
  url = 'file:///D:/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/Documentation/ScriptReference/30_search.html?q=' + text.replace(' ','%20')
  # webbrowser.open_new_tab(url)
  subprocess.call(browser+url)
  def OpenUnityFunctionReference(text):
  # url = 'http://unity3d.com/support/documentation/ScriptReference/' + text.replace(' ','%20')
  url = 'file:///D:/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/Documentation/ScriptReference/' + text.replace(' ','%20') + '.html'
  # webbrowser.open_new_tab(url)
  subprocess.call(browser+url)
  


接着,可以绑定快捷键,ctrl+shift+p - key bindings user,添加如下快捷键:
  { "keys": ["f4"], "command": "unity_reference_search_selection" }
  语法高亮以及代码片
  提供了一整套完善的游戏开发套件,在写代码的过程中,会遇到很多类是 Unity 自带的,有些类则是 C# 语言本身支持的,为此,网上有达人做了一份 Unity C# 语言高亮文件,里面会将 Unity 自带的类进行单独的高亮。不过我并不喜欢那个高亮的颜色,所以我自己并没有用,插件名称:Unity3D。
  

          同语法高亮类似,也有达人做了一份为  量身打造的代码片断插件,下载安装相应的插件即中:Unity3D Snippets and Completes。
  还有一个神奇的插件:Unity Completions,为什么说神奇呢,因为这个插件我安装就花了1个多小时,安装完后发现整个目录占用了200多M,文件大小20多M,光看这个要吓尿了,其他插件能有顶多有个几百K而已,再看看文件,大概有7W多个,怪不得占用这么大,但老实说这个插件我试了一下之后并不觉得好用,有兴趣的童鞋可以试试。



    


2017-05-25 19:52:31 honey199396 阅读数 3314
  • Unity3D入门到精通-(3)Unity资源管理精讲

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

    4707 人正在学习 去看看 张刚

Unity3D中使用3D Text(Text Mesh)时,如何让场景中的物体和3D Text有正确的遮挡关系。由于3D Text默认材质是(Font Material),他的shader是GUI/Text Shader,自然也就有了GUI的穿透特性,所以我们使用自定义材质就可以解决这个问题了。
1、新建材质,并将如下shader设置给它

Shader "Custom/3D Text Shader" {
    Properties {
        _MainTex ("Font Texture", 2D) = "white" {}
        _Color ("Text Color", Color) = (1,1,1,1)
    }

    SubShader {
        Tags{ "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
        Lighting Off Cull Off ZWrite On Fog { Mode Off }
        Blend SrcAlpha OneMinusSrcAlpha
        Pass {
            Color [_Color]
            SetTexture [_MainTex] {
                combine primary, texture * primary
            }
        }
    }
}

2、导入一个字体,并将Character设置为Unicode。并将生成的图片设置给Shader
这里写图片描述
这里写图片描述
3、将3D Text的材质替换成自定义的材质
这里写图片描述
注意:如果要调整字体颜色,3D Text中的Color属性已经失效,需要去调整那个自己建的材质球的Text Color;

2018-11-23 13:15:27 weixin_43778515 阅读数 4753
  • Unity3D入门到精通-(3)Unity资源管理精讲

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

    4707 人正在学习 去看看 张刚

Unity3D UGUI Text得分数字增加 代码

在这里插入图片描述
一、首先在Hierarchy中创建Text,并绑定脚本。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;				**//导入资源库**

public class Score : MonoBehaviour {
	public static Text txt;				**//定义静态变量名以用于其他脚本内的引用**
	public static float x = 0;
	void Start () 
	{
		txt = GameObject.Find ("Text").GetComponent<Text> ();	 
	}
}

二、在确定变量名指定的组建后,对得分时情况进行判断。这里进入判断绑定刚体是否碰撞的脚本。

using UnityEngine;
using System.Collections;

public class collision2 : MonoBehaviour {
	public GameObject bullet;	

	void OnCollisionEnter(Collision col)				**//当刚体碰撞开始时**
	{
		if (col.gameObject.name.Equals ("Bullet(Clone)")) 
		{
			Instantiate (bullet,col.transform.position,Quaternion.identity);
			Destroy(col.gameObject);  
			Score.x += 1;				**//刚体碰撞结束后得分加1**
			Score.txt.text = "Score : " + Score.x;				//在text文本中显示Score : x
		}
	}

总结:这里的代码示例是以制定刚体碰撞的开始时,进行得分判断。当Bullet(Clone)与脚本绑定的刚体碰撞,便得分数 X+1 ,并在Score脚本中的txt中加上转换成文本类型后的X。

unity3D Text 使用shader

阅读数 5395

Unity3D资源管理架构

阅读数 2853

unity3d 滚动字幕

阅读数 6425

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