不常用的API

一.工具类

[ContexMenu]

  [ContextMenu("ChangeStencil")]
    public void ChangeStencil() {
        ChangeMatStencil(transform);
    }
    
    void ChangeMatStencil(Transform tra)
    {
        if (tra.GetComponent<Renderer>() != null)
        {
            tra.GetComponent<Renderer>().material.SetFloat("_StencilComp", 0);
        }
        for (int i = 0; i < tra.childCount; i++)
        {
            ChangeMatStencil(tra.GetChild(i));
        }
    }
    

在物体上挂上此脚本,右键菜单就有此方法可用。此方法用于改变材质球某条属性。

[MenuItem]

这里直接上传一个打AB包的脚本好了。

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

public class AssetBundlesTool : EditorWindow {
    static string Abpath; //资源路径
    static string ext;//后缀名变量
    static string outPath;//输出路径
    static BuildTarget platform;//平台
    static PackageData data;
    
    
    [MenuItem("Plugins/资源包打包工具")]
	static void Init()
    {
        AssetBundlesTool abt = EditorWindow.GetWindow<AssetBundlesTool>();
        abt.Show();
    }

   

    private void OnGUI()
    {
        //UGUI 横向布局 纵向布局

        GUILayout.BeginVertical();//开始纵向布局

        
        GUILayout.Label("打包资源路径" + Abpath);//文本框
   
        if (GUILayout.Button("选择资源路径"))//按钮
        {
            Abpath = EditorUtility.OpenFolderPanel("选择要打包的资源路径", "", "");
        }
  
        GUILayout.Label("资源包放置路径" + outPath);//文本框
        if (GUILayout.Button("选择输出路径"))//按钮
        {
            outPath = EditorUtility.OpenFolderPanel("选择输出路径", "", "");
        }

        GUILayout.BeginHorizontal();
        GUILayout.Label("资源包后缀名");//文本框
        ext = GUILayout.TextField(ext);//输入框
        GUILayout.EndHorizontal();

        platform = (BuildTarget)EditorGUILayout.EnumPopup(platform); //针对枚举类型的下拉菜单

        GUILayout.BeginHorizontal();
        if (GUILayout.Button("资源包命名"))//按钮
        {
            SetABNames(Abpath);
        }
        if (GUILayout.Button("资源包打包 "))//按钮
        {
            CreateAB();
        }
        GUILayout.EndHorizontal();

        data = (PackageData)EditorGUILayout.ObjectField(data, typeof(PackageData));


        GUILayout.BeginHorizontal();
        if (GUILayout.Button("保存资源配置"))//按钮
        {
            Save();
        }
        if (GUILayout.Button("读取资源配置"))//按钮
        {
            Load();
        }
        GUILayout.EndHorizontal();
        if(GUILayout.Button("选择设置ab包名")){
           string[] strs = Selection.assetGUIDs;
           
           foreach(var pat in  strs){
               string pre = Application.dataPath.Replace("Assets",AssetDatabase.GUIDToAssetPath(pat));
              SelectSetAb(pre);
           }
        }
        

        GUILayout.EndVertical();
    }

    static void SetABNames(string path)
    {
        ///获取指定绝对路径下方的所有子文件夹路径
        string[] dirpaths = Directory.GetDirectories(path);
        
        foreach (var dirpath in dirpaths)
        {
            SetABNames(dirpath);//dirpath 当前文件夹路径下的所有文件夹路径 不停地递归直到没有文件夹可以查到
        }

        string[] files = Directory.GetFiles(path);//获取当前文件夹下的所有文件绝对路径

        foreach (var fileName in files)
        {
            if (fileName.Contains(".meta"))
                continue;

            ///对当前找到的文件进行资源包命名修改 修改规则基于自己错处的文件夹名 为ab包名 
            ///把资源路径传入AssetImporter对象,然后通过AssetImporter这个工具修改制定资源的资源名
            ///
            string temp = fileName.Replace(@"\", "/");//替换斜杠 规则一致
            temp = "Assets/" + temp.Replace(Application.dataPath + "/", "");
            AssetImporter asset = AssetImporter.GetAtPath(temp);//传入相对路径 以Assets文件夹为根节点
            string assetName = fileName.Replace(@"\", "/");
            assetName = assetName.Replace(Abpath + "/", "");//掐头

            assetName = assetName.Remove(assetName.LastIndexOf("/"));//去尾
            asset.assetBundleName = assetName + ext;//修改资源名 得到资源路径名 + 后缀名

        }
    }

    static void SelectSetAb(string path){
        
        ///获取指定绝对路径下方的所有子文件夹路径
        string[] dirpaths = Directory.GetDirectories(path);
        
        foreach (var dirpath in dirpaths)
        {
            SetABNames(dirpath);//dirpath 当前文件夹路径下的所有文件夹路径 不停地递归知道没有文件夹可以查到
        }

        string[] files = Directory.GetFiles(path);//获取当前文件夹下的所有文件绝对路径

        foreach (var fileName in files)
        {
            if (fileName.Contains(".meta"))
                continue;

            ///对当前找到的文件进行资源包命名修改 修改规则基于自己错处的文件夹名 为ab包名 
            ///把资源路径传入AssetImporter对象,然后通过AssetImporter这个工具修改制定资源的资源名
            ///
            string temp = fileName.Replace(@"\", "/");//替换斜杠 规则一致
            temp = "Assets/" + temp.Replace(Application.dataPath + "/", "");
            AssetImporter asset = AssetImporter.GetAtPath(temp);//传入相对路径 以Assets文件夹为根节点
            string assetName = fileName.Replace(@"\", "/");
            assetName = assetName.Replace(Abpath + "/", "");//掐头

            assetName = assetName.Remove(assetName.LastIndexOf("/"));//去尾
            asset.assetBundleName = assetName + ext;//修改资源名 得到资源路径名 + 后缀名

        }
    }
    static void CreateAB()
    {
        ///创建管线.打资源包
        ///outPath 打到哪
        ///
        BuildPipeline.BuildAssetBundles(outPath, BuildAssetBundleOptions.None, platform);
    }

    static void Save()
    {
        PackageData pd = CreateInstance<PackageData>();
        pd.Abpath = Abpath;
        pd.outPath = outPath;
        pd.ext = ext;
        pd.platform = platform;
        AssetDatabase.CreateAsset(pd,"Assets/save.asset");
    }

    static void Load() {

        Abpath = data.Abpath;
        outPath = data.outPath;
        ext = data.ext;
        platform = data.platform;
    }
}

二.File与FileInfo类

异同

区别:File是静态类,因此不需要实例化对象,对单个对象操作时效率较高,每次调用方法前进行安全检查,即使是同一个文件,因此对多个文件或者同一个文件多次操作建议使用FileInfo实例化一个对象来操作。
相似:都可对文件进行复制、移动、删除、打开、创建、重命名、追加等。

API

1、File.Create(@"D:\Test\Debug1\测试.txt")新建一个空白文本文件
2、File.Open(@"D:\Test\Debug1\测试.txt",FileMode.Append)打开文本文件
3、File.AppendAllText(@"D:\Test\Debug1\测试.txt","哈哈");在文件后追加一个字符串
4、 File.Copy(@"g:\vs2\223.txt", @"g:\网页设计\223.txt");将文件拷贝,拷贝到位置不可覆盖同名文件
5、 File.Move(@"g:\123.txt", @"g:\vs2\223.txt");移动文件
6、File.Delete(@"G:\456.txt");删除文件
7、File.WriteAllText(@"g:\text1.txt", "asfjksa");写入文件

FileInfo的API可实例化后查看,跟File类很像。

三.Directory和DirectoryInfo类

类似于File与FileInfo,对象是文件夹。

四.文件读写

FileStream对象表示在磁盘或网络路径上指向文件的流。这个类提供了在文件中读写字节的方法,但经常使用StreamReader或StreamWriter执行这些功能。这是因为FileStream类操作的是字节和字节数组,而Stream类操作的是字符数据。字符数据易于使用,但是有些操作,比如随机文件访问(访问文件中间某点的数据),就必须由FileStream对象执行。

五.动画控制(Animator)

实现动画的加速、缓速、正放、倒放
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值