精华内容
下载资源
问答
  • 主要为大家详细介绍了Unity工具类之生成文本验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • UnityPointCloudViewer:点云查看器和Unity工具
  • 工具 个人使用Unity工具的Dll
  • Unity 工具类 之 简单一键 UnityPackage 导出 ExportUnityPackage 实现 目录 Unity 工具类 之 简单一键 UnityPackage 导出 ExportUnityPackage 实现 一、简单介绍 二、实现方法 三、效果预览 四、实现步骤 ...

    Unity 工具类 之 简单一键 UnityPackage 导出 ExportUnityPackage 实现

     

    目录

    Unity 工具类 之 简单一键 UnityPackage 导出 ExportUnityPackage 实现

    一、简单介绍

    二、实现方法

    三、效果预览

    四、实现步骤

    五、关键代码


     

     

    一、简单介绍

    Unity 工具类,自己整理的一些游戏开发可能用到的模块,单独独立使用,方便游戏开发。

    ExportUnityPackage 快捷键,一键命名包名并导出UnityPackage资源,在版本管理的时候或许会有些用。

     

    二、实现方法

    1、GenerateUnityPackageName() 函数生成预置的包名;

    2、 AssetDatabase.ExportPackage() 打包指定的资源;

    3、Application.OpenURL() 打开指定路径文件夹查看资源导出;

    4、注意事项:根据自己需要设置包名和资源路径;

     

    三、效果预览

    四、实现步骤

    1、打开Unity,新建一个工程,如下图

     

    2、在工程中新建脚本,ExportUnityPackage 一键导出资源,如下图

     

    3、点击菜单栏或者快捷键 Ctrl + E 一键打包导出成 UnityPackage 资源,如下图

     

    4、导出如下图

     

    5、打包 UnityPackage 资源包的内容,如下图

     

    五、关键代码

    using System;
    using System.IO;
    #if UNITY_EDITOR
    using UnityEditor;
    #endif
    using UnityEngine;
    
    /// <summary>
    /// 快速导出UnityPackage包名
    /// Ctrl + e 快速导出
    /// </summary>
    public partial class ExportUnityPackage
    {
    #if UNITY_EDITOR
        [MenuItem("Tool/导出 UnityPackage %e", false, 1)]
        private static void MenuClicked()
        {
            // 获取包名
            var generatePackageName = ExportUnityPackage.GenerateUnityPackageName();
    
            // 生成 UnityPackage 资源
            ExportPackage("Assets/ExportUnityPackage", generatePackageName + ".unitypackage");
    
            // 打开生成 UnityPackage 资源的路径查看
            OpenInFolder(Path.Combine(Application.dataPath, "../"));
        }
    #endif
    
        /// <summary>
        /// 获取包名
        /// </summary>
        /// <returns>返回指定的包名</returns>
        public static string GenerateUnityPackageName()
        {
            return "ExportUnityPackage_" + DateTime.Now.ToString("yyyyMMdd_hh");
        }
    
        /// <summary>
        /// 打开指定文件夹
        /// </summary>
        /// <param name="folderPath">文件夹路径</param>
        public static void OpenInFolder(string folderPath)
        {
            Application.OpenURL("file:///" + folderPath);
        }
    
        /// <summary>
        /// 导出资源
        /// </summary>
        /// <param name="assetPathName">资源路径</param>
        /// <param name="fileName">资源包名</param>
        public static void ExportPackage(string assetPathName, string fileName)
        {
            AssetDatabase.ExportPackage(assetPathName, fileName, ExportPackageOptions.Recurse);
        }
    }
    
    

     

     

     

     

    展开全文
  • Unity 工具 之 CurvedUI (曲面UI)
  • 主要为大家详细介绍了Unity工具类ScrollView实现拖拽滑动翻页,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Unity 工具 之 VText 简单快速实现 文字 3D 效果,VText 的导入设置和简单使用 版本:VText 1.37.unitypackage使用说明,可参考CSDN博文: https://blog.csdn.net/u014361280/article/details/114295520
  • 微软近日发布了用于Unity引擎的Visual Studio工具2.0版的第二预览版(Visual Studio Tools for Unity 2.0 Preview 2)... 其重新命名为Visual Studio Unity工具集(VSTU),该插件支持从VS2010专业版往后所有的付费版V
  • Unity 工具类 之 简单网络下载管理类 UnityWebRequestManager 实现 1、单例类,保证整个场景中只有一个类管理场景加载; 2、UnityWebRequest 实现网络或者本地资源下载; 3、UnityWebRequestManager.Instance....
  • Unity 工具之 YUV(YUV420 :I420,YV12,NV12,NV21)使用 shader 转为 RGB 显示 封装 YUV420ToRGBWrapper 1、首先根据 YUV 对应格式的 YUV 的排列方式,拆分 YUV; 2、然后,在通过 YUV 与 RGB 转换对应公式,进行...
  • Unity 工具类 之 简单的本地化多语言管理类 LanguageManager 实现 1、单例类,保证整个场景中只有一个类管理本地化多语言数据; 2、文本管理各个国家的语言信息; 3、Resources.Load 把对应的语言信息加载到字典...
  • Unity 工具类 之 BlendShape 捏脸的实现

    千次阅读 2020-01-10 22:46:03
    Unity 工具类 之 BlendShape 捏脸的实现 目录 Unity 工具类 之 BlendShape 捏脸的实现 一、简单介绍 二、实现原理 三、注意事项 四、效果预览 五、实现步骤 六、代码 七、参考工程 一、简单介绍 ...

    Unity 工具类 之 BlendShape 捏脸的实现

     

    目录

    Unity 工具类 之 BlendShape 捏脸的实现

    一、简单介绍

    二、实现原理

    三、注意事项

    四、效果预览

    五、实现步骤

    六、代码

    七、参考工程


     

     

    一、简单介绍

    Blender 是一款开源的跨平台全能三维动画制作软件,提供从建模、动画、材质、渲染、到音频处理、视频剪辑等一系列动画短片制作解决方案。

    在Unity程序开发中,使用 Blender 制作的模型,进行 BlendShap 捏脸的实现;

     

    二、实现原理

    1、通过控制改变 Skinned Mesh Renderer 的 BlendShapes 下的参数数值,来实现捏脸的效果

     

    三、注意事项

    1、Blender 中编辑模式下设置的值是实现好的捏脸效果的关键;

     

    四、效果预览

     

    五、实现步骤

    1、打开Unity,新建一个工程,并且导入模型,添加到场景中,如下图

    2、在场景中,添加几个Slider UI 组件,控制捏脸的数值,如下图

    3、编写脚本,控制BlendShapes 对应数值的变化,把对应脚本挂载到对应组件上,如下图

    4、运行场景,效果如下

     

    六、代码

    1、Singleton

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Singleton<T> : MonoBehaviour
    where T:MonoBehaviour
    {
        private static T m_Instance;
    
        public static T Instance
        {
            get
            {
                return m_Instance;
            }
    
        }
    
        protected virtual void Awake()
        {
            m_Instance = this as T;
        }
    
    }
    

    2、BlendShape

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    
    /// <summary>
    /// 存储索引
    /// </summary>
    public class BlendShape
    {
    
        public int postiveIndex { get; set; }
        public int negativeIndex { get; set; }
    
        public BlendShape(int postiveIndex,int negativeIndex)
        {
            this.postiveIndex = postiveIndex;
            this.negativeIndex = negativeIndex;
        }
    }
    

    3、CharacterCustomization

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using System.Linq;
    
    public class CharacterCustomization : Singleton<CharacterCustomization>{
    
        public string suffixMin = "Min";
        public string suffixMax = "Max";
        public SkinnedMeshRenderer target;
        SkinnedMeshRenderer skm;
        Mesh mesh;
        Dictionary<string, BlendShape> BlendShapeDatabase = new Dictionary<string, BlendShape>();
    
        private void Start()
        {
            Initialize();
        }
    
       public  void Initialize()
        {
            skm = target;
            mesh = skm.sharedMesh;
            SaveBlendShapeDatabase();
        }
    
        #region 存储数据
        
        void SaveBlendShapeDatabase()
        {
            List<string> BlendShapeNames = Enumerable.Range(0, mesh.blendShapeCount).Select(x => mesh.GetBlendShapeName(x)).ToList();
            for(int i = 0; BlendShapeNames.Count > 0;)
            {
                string noSuffix, altSuffix;
                noSuffix = BlendShapeNames[i].TrimEnd(suffixMax.ToCharArray()).TrimEnd(suffixMin.ToCharArray()).Trim();
                string positiveName = string.Empty;
                string negativeName = string.Empty;
                int postiveIndex = -1;
                int negativeIndex = -1;
                bool exist = false;
    
                //后缀是max
                if (BlendShapeNames[i].EndsWith(suffixMax))
                {
                    positiveName = BlendShapeNames[i];
                    altSuffix = noSuffix + " " + suffixMin;
                    
                    if (BlendShapeNames.Contains(altSuffix))
                        exist = true;
    
                    postiveIndex = mesh.GetBlendShapeIndex(positiveName);
    
                    if (exist)
                    {
                        negativeName = altSuffix;
                        negativeIndex = mesh.GetBlendShapeIndex(negativeName);
                    }
                       
    
                    //后缀是min结尾
                }else if (BlendShapeNames[i].EndsWith(suffixMin))
                    {
                        negativeName = BlendShapeNames[i];
                        altSuffix = noSuffix + " " + suffixMax;
                        
                        if (BlendShapeNames.Contains(altSuffix))
                            exist = true;
    
                        negativeIndex = mesh.GetBlendShapeIndex(negativeName);
    
                        if (exist)
                        {
                            positiveName = altSuffix;
                            postiveIndex = mesh.GetBlendShapeIndex(positiveName);
                        }
    
    
                }
    
                if (BlendShapeDatabase.ContainsKey(noSuffix))
                    Debug.LogError(noSuffix +"已经存在");
    
                BlendShapeDatabase.Add(noSuffix, new BlendShape(postiveIndex, negativeIndex));
    
                //移除操作
                if (positiveName != string.Empty)
                    BlendShapeNames.Remove(positiveName);
                if (negativeName != string.Empty)
                    BlendShapeNames.Remove(negativeName);
            }
    
        }
    
        #endregion
    
        public void ChangeBlendShapeValue(string blendShapeName,float value)
        {
            if (!BlendShapeDatabase.ContainsKey(blendShapeName))
            {
                Debug.LogError(blendShapeName + "不存在");
                return;
            }
    
            BlendShape blendshape = BlendShapeDatabase[blendShapeName];
            value = Mathf.Clamp(value, -100, 100);
            if (value > 0)
            {
                if (blendshape.postiveIndex == -1)
                    return;
                skm.SetBlendShapeWeight(blendshape.postiveIndex, value);
                if (blendshape.negativeIndex == -1)
                    return;
                skm.SetBlendShapeWeight(blendshape.negativeIndex, 0);
            }
            else
            {
                if (blendshape.negativeIndex == -1)
                    return;
                skm.SetBlendShapeWeight(blendshape.negativeIndex, -value);
                if (blendshape.postiveIndex == -1)
                    return;
                skm.SetBlendShapeWeight(blendshape.postiveIndex, 0);
      
           
            }
    
    
    
        }
    
    
        public bool DoesTargetMatchSkm()
        {
            return (target == skm) ? true : false;
        }
    
        public void ClearDatabase()
        {
            BlendShapeDatabase.Clear();
        }
    
        public string[] GetBlendshapeNames()
        {
            return BlendShapeDatabase.Keys.ToArray();
        }
    
        public int GetNumber()
        {
            return BlendShapeDatabase.Count;
        }
    
        public BlendShape GetBlendShape(string name)
        {
            return BlendShapeDatabase[name];
        }
    }
    
    
    

    4、BlendShape

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class BlendShapeSlider : MonoBehaviour {
    
        Slider slider;
        [Header("别加后缀!!!")]
        public string BlendShapeName;
    
        private void Start()
        {
            slider = GetComponent<Slider>();
            slider.onValueChanged.AddListener(value => CharacterCustomization.Instance.ChangeBlendShapeValue(BlendShapeName, value));
        }
    }
    

    5、CharacterCustomizationEditor

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEditor;
    using UnityEngine.UI;
    
    [CustomEditor(typeof(CharacterCustomization))]
    public class CharacterCustomizationEditor : Editor
    {
        int selectIndex;
        Canvas canvas;
    
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();
            EditorGUILayout.Space();
    
            var characterCustomization = (CharacterCustomization)target;
    
            if(characterCustomization.target == null)
            {
                EditorGUILayout.LabelField("请给target赋值!");
                return;
            }
    
            //是否换了新的skm
            if (!characterCustomization.DoesTargetMatchSkm())   
            {
                characterCustomization.ClearDatabase();
            }
    
            if(characterCustomization.GetNumber() <= 0)
            {
                characterCustomization.Initialize();
            }
            
            string[] blendshapeNames = characterCustomization.GetBlendshapeNames();
    
            if(blendshapeNames.Length <= 0)
            {
                EditorGUILayout.LabelField("taget没有blendshape");
                characterCustomization.ClearDatabase(); 
                return;
            }
    
            EditorGUILayout.LabelField("请创建一个滑动条~", EditorStyles.boldLabel);
    
            selectIndex = EditorGUILayout.Popup("blendShapeName", selectIndex, blendshapeNames);
    
            if (GUILayout.Button("创建滑动条"))
            {
                if(canvas == null)
                {
                    canvas = GameObject.FindObjectOfType<Canvas>();
                }
    
                if(canvas == null)
                {
                    throw new System.Exception("场景中没有canvas ,请创建!");
                    
                }
    
                GameObject sliderGo = Instantiate(Resources.Load("slider", typeof(GameObject))) as GameObject;
    
                var BShapeSlider = sliderGo.GetComponent<BlendShapeSlider>();
                //改名字
                //改父物体
                //大小
                BShapeSlider.BlendShapeName = blendshapeNames[selectIndex];
                BShapeSlider.name = blendshapeNames[selectIndex];
                BShapeSlider.transform.parent = canvas.transform;
                BShapeSlider.GetComponent<RectTransform>().sizeDelta = new Vector2(140f, 25f);
                BShapeSlider.GetComponentInChildren<Text>().text = blendshapeNames[selectIndex];
    
                //获取BlendShape
                BlendShape blendShape = characterCustomization.GetBlendShape(blendshapeNames[selectIndex]);
    
                //获取slider
                Slider slider = sliderGo.GetComponent<Slider>();
    
                if (blendShape.negativeIndex == -1)
                    slider.minValue = 0;
    
                if (blendShape.postiveIndex == -1)
                    slider.maxValue = 0;
    
                slider.value = 0;
    
                Debug.Log(blendshapeNames[selectIndex] + "slider 创建完成!");
            }
    
        }
    
    }
    

     

    七、参考工程

    参考工程,点击下载

    展开全文
  • Unity工具,允许在播放模式中所做的更改在返回到编辑模式时恢复。 用法 将SavePlayModeChanges组件添加到您要保存的所有层次结构的根目录中。 而已! 方法 与其他工具(例如PlayModePersist)不同,这近似于将游戏...
  • Unity 工具类 之 AR/VR Gaze 凝视/按键/鼠标 点击 UI/游戏物体 的交互方式实现 实现原理 1、参照 Unity 交互的方法,写一个凝视/按键/鼠标交互方式的类 2、继承 Unity的 PointerInputModule 类,重写和添加方法控制...
  • Unity 工具类 之 简单的异步场景加载(包含加载进度和同步加载方法)类 LoadSceneManager 实现 1、单例类,保证整个场景中只有一个类管理场景加载; 2、LoadSceneManager.Instance.LoadSceneAsync 即可异步加载...
  • Unity工具类 之 简单快速 获取当前所在位置,所在城市,经纬度等 目录 Unity工具类 之 简单快速 获取当前所在位置,所在城市,经纬度等 一、方法提要: 二、使用注意: 三、json 数据: 四、使用截图: 五...

    Unity  工具类 之 简单快速 获取当前所在位置,所在城市,经纬度等

     

    目录

    Unity  工具类 之 简单快速 获取当前所在位置,所在城市,经纬度等

    一、方法提要:

    二、使用注意:

    三、json 数据:

    四、使用截图:

    五、Unity代码:


     

     

    一、方法提要:

    通过 string url = "http://api.map.baidu.com/location/ip?ak=bretF4dm6W5gqjQAXuvP0NXW6FeesRXb&coor=bd09ll";

    快速得到当前所在位置的信息,由于返回的是 Json 数据,所以使用 litjson 进行解析数据

    二、使用注意:

    在使用Litjson解析的时候,由于用到自定义的数据结构,所以注意添加 [SerializeField]

    三、json 数据:

    {"address":"CN|\u5317\u4eac|\u5317\u4eac|None|CHINANET|0|0","content":{"address":"\u5317\u4eac\u5e02","address_detail":{"city":"\u5317\u4eac\u5e02","city_code":131,"district":"","province":"\u5317\u4eac\u5e02","street":"","street_number":""},"point":{"x":"116.40387397","y":"39.91488908"}},"status":0}

    四、使用截图:

     

    五、Unity代码:

    using LitJson;
    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Text;
    using UnityEngine;
    
    public class GetLocationData : MonoBehaviour {
    
        public static string TheCurrentCity = "unknown";
        public Action OnGetLocationDataOKEvent;
    
        string url = "http://api.map.baidu.com/location/ip?ak=bretF4dm6W5gqjQAXuvP0NXW6FeesRXb&coor=bd09ll";
    
        private void Awake()
        {
            StartCoroutine(Request());
        }
    
        void Start()
        {
    
        }
    
        public void ToGetLocationData() {
            StartCoroutine(Request());
        }
    
        IEnumerator Request()
        {
            // 判断是否有网络 更具需要处理是否连续判断是否有网
            while (Application.internetReachability == NetworkReachability.NotReachable) {
                Debug.Log(ArrowBLEDebugHelper.DEBUGMARK + "正在连接网络");
               yield return new WaitForSeconds(1.0f);
            }
    
            WWW www = new WWW(url);
            yield return www;
    
            if (www.error != null)
            {
                Debug.Log(ArrowBLEDebugHelper.DEBUGMARK + " 网络错误!!请检查网络 ");
    
            }
            else
            {
    
                Debug.Log(ArrowBLEDebugHelper.DEBUGMARK + www.text);
    
                if (www.text.ToLower().Contains("Error".ToLower()) == false)
                {
    
                    ResponseBody req = JsonMapper.ToObject<ResponseBody>(www.text);
                    //Debug.Log(ArrowBLEDebugHelper.DEBUGMARK + StringUnicodeHelper.UnicodeToString(req.content.address_detail.city) +" X: "+ req.content.point.x +" Y: "+ req.content.point.x);
                    Debug.Log(ArrowBLEDebugHelper.DEBUGMARK + req.content.address_detail.city + " X: " + req.content.point.x + " Y: " + req.content.point.x);
                    TheCurrentCity = req.content.address_detail.city;
    
                }
                else
                {
                    Debug.Log(ArrowBLEDebugHelper.DEBUGMARK + " 局域网,或者虚假连接网络");
                }
    
            }
    
            // 获取到位置信息的事件
            if (OnGetLocationDataOKEvent != null) {
                OnGetLocationDataOKEvent.Invoke();
            }
    
            
        }
    }
    
    
    public class ResponseBody
    {
    
        public string address;
        public Content content;
        public int status;
    
    }
    [SerializeField]
    public class Content
    {
        public string address;
        public Address_Detail address_detail;
        public Point point;
    }
    [SerializeField]
    public class Address_Detail
    {
    
        public string city;
        public int city_code;
        public string district;
        public string province;
        public string street;
        public string street_number;
        public Address_Detail() { }
        public Address_Detail(string city, int city_code, string district, string province, string street, string street_number)
        {
            this.city = city;
            this.city_code = city_code;
            this.district = district;
            this.province = province;
            this.street = street;
            this.street_number = street_number;
        }
    }
    [SerializeField]
    public class Point
    {
        public string x;
        public string y;
        public Point() { }
        public Point(string x, string y)
        {
            this.x = x;
            this.y = y;
        }
    }
    
    public class StringUnicodeHelper{
        /// <summary>
        /// 字符串转Unicode码
        /// </summary>
        /// <returns>The to unicode.</returns>
        /// <param name="value">Value.</param>
        public static string StringToUnicode(string value)
        {
            byte[] bytes = Encoding.Unicode.GetBytes(value);
            StringBuilder stringBuilder = new StringBuilder();
            for (int i = 0; i < bytes.Length; i += 2)
            {
                // 取两个字符,每个字符都是右对齐。
                stringBuilder.AppendFormat("u{0}{1}", bytes[i + 1].ToString("x").PadLeft(2, '0'), bytes[i].ToString("x").PadLeft(2, '0'));
            }
            return stringBuilder.ToString();
        }
    
        /// <summary>
        /// Unicode转字符串
        /// </summary>
        /// <returns>The to string.</returns>
        /// <param name="unicode">Unicode.</param>
        public static string UnicodeToString(string unicode)
        {
            string resultStr = "";
            string[] strList = unicode.Split('u');
            for (int i = 1; i < strList.Length; i++)
            {
                resultStr += (char)int.Parse(strList[i], System.Globalization.NumberStyles.HexNumber);
            }
            return resultStr;
        }
    
        
    }
    

     

    展开全文
  • 我的Unity工具类---协程等待几秒后执行方法
        /// <summary>
        /// 等待几秒后执行Action的协程
        /// </summary>
        /// <param name="second">等几秒</param>
        /// <param name="action">可选的Action</param>
        /// <returns></returns>
        public static IEnumerator Wait(float second, Action action = null)
        {
            if (second < 0)
            {
                yield break;
            }
            yield return new WaitForSeconds(second);
            if (action != null)
            {
                action();
            }
        }
    
    展开全文
  • 编写Unity工具

    千次阅读 2017-11-11 15:04:17
    Unity编辑器工具类,提升开发效率,减少不必要的人工操作!
  • Unity 工具之 UniWebView 内嵌网页/浏览器到应用中,并且根据UGUI大小放置(简单适配UGUI) 注意:UniWebView 使用版本为 UniWebView 3.7.0 UniWebView 包含一组 C# 的高层级 API,它对 iOS 和 Android 平台的本机 ...
  • Unity 工具之 获取当前所在城市的天气数据的封装(自动定位当前所在城市,天气数据可以获得多天天数据) 实现原理 1、首先根据联网 IP 获得当前所在城市 2、然后根据城市名称得到天气所需要的城市ID; 3、根据城市ID...
  • Unity 工具类 之 Blender 的下载和使用(为捏脸做准备) 目录 Unity 工具类 之 Blender 的下载和使用 一、简单介绍 二、下载地址 三、安装 四、简单使用 1、设置成中文界面 2、快捷操作 3、物体模式...
  • unity工具IGamesTools之批量生成帧动画

    千次阅读 2016-03-24 15:17:15
    unity工具IGames批量生成帧动画,可批量的将指定文件夹下的帧动画图片自动生成对应的资源文件(Animation,AnimationController,Prefabs)
  • Unity 工具 之 插件实现录频、拍照jpg、生成Gif动图功能(适用移动端) 目录 Unity 工具 之 插件实现录频、拍照jpg、生成Gif动图功能(适用移动端) 一、简单介绍 二、插件导入使用 三、几个 Demo 演示效果 ...
  • Blender 导出的,Unity 上 BlendShape 实现的捏脸工程。 Unity 打开工程即可使用。
  • unity散图合成图集 图集切割散图
  • Unity 工具 之 CurvedUI(曲面UI) 简单使用介绍和CUSTOM_RAY 射线交互时注意事项整理 目录 Unity 工具 之 CurvedUI(曲面UI) 简单使用介绍和CUSTOM_RAY 射线交互时注意事项整理 一、简单介绍 二、下载方式 ...
  • unity工具IGamesTools批量生成帧动画

    热门讨论 2016-03-24 15:09:15
    可批量的将指定文件夹下的帧动画图片自动生成对应的资源文件(Animation,AnimationController,Prefabs) 详细介绍地址: http://blog.csdn.net/dingkun520wy/article/details/50971544
  • Unity的Litjson类库解析Json数据,LitJSON是一个使用C#编写的.NET库,我们可以通过它来处理JSON数据
  • Unity 工具类ScrollView拖拽滑动翻页

    千次阅读 2018-03-21 13:24:35
    简介:在进行UI设计的时候,经常会使用Unity中UI提供的ScrollView,类似Android中的ScrollView,在进行图片预览,多个翻页的时候,能实现很好的效果。该类中根据Unity的EventSystems中拖拽事件,实现对页码的滑动...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,028
精华内容 18,011
关键字:

unity工具