新宝娱乐城棋牌: 云枫 一些杂乱的代码知识(一)

48
回复
5926
查看
打印 上一主题 下一主题
[ 复制链接 ]
排名
5576
昨日变化

新宝娱乐城博彩打不开 www.sl6cl.com.cn 13

主题

89

帖子

749

积分

Rank: 9Rank: 9Rank: 9

UID
215257
好友
6
蛮牛币
1821
威望
0
注册时间
2017-3-29
在线时间
356 小时
最后登录
2019-5-24

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册帐号

x
本帖最后由 m2675 于 2018-7-3 09:22 编辑

没事记点知识点吧,满五个就写第二篇,欢迎各位评论补充一些东西。

一些杂乱的代码知识(二)

一.Shader
最近想学点Shader,这玩意已经是第三次开始学了,以前都用的VS里的插件,敲起代码来感觉很奇怪。
不知道大家是不是这样,不显示行号,并且很多高亮都没有。


这次准备好好学了,然后问了群里大神用Sublime Text2这个IDE,网上百度就OK了。
然后跟着教程走,到这一步,我就懵逼了。


根本没有UnityShader的选项啊,然后我又百度了好久,找到了一个奇怪的插件安装进去,总算是能用了。
但是当我打算写这篇文章的时候,发现原来在文本框输入ShaderLanguages就好了,内容和那个插件一样,嗯,这要么是我太傻,要么这是一个历史遗留问题吧,反正我是搜不到UnityShader的。

然后问题就来了,Unity里默认用VS打开Shader,所以我总是要在资源管理器里选择.shader文件的打开方式,还好我记得曾经在雨松大神的帖子里看过怎么打开指定后缀文件的办法。

二.如何打开指定后缀文件

[C#] 纯文本查看 复制代码
//====================================
//描 述 :使用SubLime打开后缀为Shader的文件
//作 者 :  momo
//创建时间 :2018/05/15 15:57:46#  
//版 本 :  1.0
// ===============================================
using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;

public class MyAssetHandler
{

    [OnOpenAssetAttribute(1)]
    public static bool Step1(int instanceID, int line)
    {

        //string name = EditorUtility.InstanceIDToObject(instanceID).name;
        // Debug.Log("Open Asset step: 1 (" + name + ")");
        return false; // we did not handle the open
    }

    // step2 has an attribute with index 2, so will be called after step1
    [OnOpenAssetAttribute(2)]
    public static bool Step2(int instanceID, int line)
    {
   
        string path = AssetDatabase.GetAssetPath(EditorUtility.InstanceIDToObject(instanceID));
        string name = Application.dataPath + "/" + path.Replace("Assets/", "");


        if (name.EndsWith(".shader"))
        {
            System.Diagnostics.Process process = new System.Diagnostics.Process();
            System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
            startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            startInfo.FileName = "C:/Program Files/Sublime Text 2/sublime_text.exe";
            startInfo.Arguments = name;
            process.StartInfo = startInfo;
            process.Start();
            return true;
        }
        // Debug.Log("Open Asset step: 2 (" + name + ")");
        return false; // we did not handle the open
    }
}



有兴趣的可以研究代码的意思吧,这个类也不需要放在Editor里面,随便找个地方扔就好了。
关键的是[OnOpenAsset]这玩意,我F12点开看了一下,后面的参数是执行顺序。

噢,还有一点,创建代码时给代码添加注释,就是上面的
//====================================
//描 述 :使用SubLime打开后缀为Shader的文件
//作 者 :  momo
//创建时间 :2018/05/15 15:57:46#  
//版 本 :  1.0
// ===============================================

三.创建代码时给代码添加注释
直接贴代码好了
[C#] 纯文本查看 复制代码
using System.IO;
using UnityEngine;




//本类还有众多回调方法
public class Test : UnityEditor.AssetModificationProcessor
{
    private static string annotationStr =
       "//====================================\r\n"
        + "//描 述 : \r\n"
        + "//作 者 :  \r\n"
        + "//创建时间 :#CreatTime#  \r\n"
        + "//版 本 :  \r\n"
        + "// ===============================================\r\n";

    private static void OnWillCreateAsset(string path)
    {      //方法必须为static
           //排除“.meta”的文件
        path = path.Replace(".meta", "");

        //如果是cs脚本,则进行添加注释处理
        if (path.EndsWith(".cs"))
        {
            //读取cs脚本的内容并太监到annotationStr后面
            annotationStr += File.ReadAllText(path);
            //把#CreateTime#替换成具体创建的时间
            annotationStr = annotationStr.Replace("#CreatTime#",
                System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
            //把内容重新写入脚本
            File.WriteAllText(path, annotationStr);
        }
        Debug.Log(path);
    }
}




找到这个类的时候,有很多回调方法,有兴趣的可以自己研究,比如用到的这个方法叫做OnWillCreateAsset(string path)
字面意思就是将要创建资源的时候调用,这里是通过判断后缀名来执行的,完全可以用于其他用途的对吧。
另外还可以读取PlayerSetting里面的项目名公司名等,但是那些信息在哪个类里面我找不到了,知道的可以留言嗯。

四.通过快捷键创建Prefab。

自从用Unity开始就知道Prefab这个玩意是个宝贝,一直以来创建它的方式也是直接把GameObject从Hierarchy拖到Project里面去。
直到我发现了它。
[C#] 纯文本查看 复制代码
using UnityEngine;
using System.Collections;
using UnityEditor;
using System.Text;
using System.IO;
using UnityEditor.SceneManagement;

public class TestFolder
{

    [MenuItem("try/makePrefab %w")]
    public static void Make()
    {

        GameObject obj = Selection.activeGameObject;
        string path = "Assets/test/testDir" + "/" + obj.name + ".prefab";
        // obj.transform.position = Vector3.forward;

        MakePrefab(path, obj);
    }

    public static void MakePrefab(string path, GameObject obj)
    {
        MakeParentDirExist(path);
        Object prefab = PrefabUtility.CreateEmptyPrefab(path);
        PrefabUtility.ReplacePrefab(obj, prefab, ReplacePrefabOptions.ConnectToPrefab);
    }

    public static string GetParentPath(string path, char splitFlag = '/')
    {
        string[] dirs = path.Split(splitFlag);
        StringBuilder str = new StringBuilder();
        for (int i = 0; i < dirs.Length - 1; ++i)
        {
            str.Append(dirs[i]).Append(splitFlag);
        }
        //cut down the last splitFlag
        string result = str.ToString();
        if (result.EndsWith(splitFlag.ToString()))
        {
            result = result.Substring(0, result.Length - 1);
        }
        return result;
    }

    public static string GetParentName(string path, char splitFlag = '/')
    {
        string[] dirs = path.Split(splitFlag);
        if (dirs.Length < 2)
        {
            return "";
        }
        else
        {
            return dirs[dirs.Length - 2];
        }
    }

    public static void MakeParentDirExist(string path)
    {
        string pDir = GetParentPath(path);

        if (!AssetDatabase.IsValidFolder(pDir))
        {
            MakeParentDirExist(pDir);
            AssetDatabase.CreateFolder(GetParentPath(pDir), GetParentName(path));
            AssetDatabase.Refresh();
        }
        else
        {
            return;
        }
    }


}


代码不难,因为每个方法的作用都很直观,递归也很好理解。
说点别的,[MenuItem("try/makePrefab %w")]这个方法很多地方都能用到。

%代表Ctrl &代表ALT #代表Shift 这是快捷键的用法,注意与标题隔开一个字符
[C#] 纯文本查看 复制代码
    //true   如果有同名方法的话,优先使用这个方法
    [MenuItem("GameObject/my delete", true, 11)]
    static bool MyDeleteValidate()
    {
        if (Selection.objects.Length > 0)
            return true;
        else
        {
           
            return false;
        }
    }

    [MenuItem("GameObject/my delete", false, 11)]
    static void Mydelete()
    {
        foreach (Object o in Selection.objects)
        {
            //GameObject.DestroyImmediate(o);
            Undo.DestroyObjectImmediate(o);//利用Undo进行的删除操作 是可以撤销的
        }
        //需要把删除操作注册到 操作记录里面
    }




这里面的注释也写得比较清楚了,当未选中物体时,菜单栏选项不可点击(my delete)。


当选中物体时,变为可点击。
后面的参数大家可以一个调为1000,一个调为1,看看效果,太难截图了。

里面还有一个Undo类,这玩意跟栈的道理大概差不多,我们写代码可以CTR + Z撤销,但是这里就不能,于是我们通过这个类创建的东西,或者删除东西,还有一些其他的操作可以F12看看,是可以通过CTR + Z来撤销的,具体我现在没有刚需,没深入研究。


五.类的本地化
这是我空闲下来之后准备研究的一个点,忘记从什么地方看到这东西了,当时兴致勃勃地浏览了一遍相关知识,趁着没忘光赶快记下来。


大致就是继承了这个ScirptableObject类之后就可以使用这个属性了,使用这个属性就可以在Project面板右键创建这么个玩意了。
暂时没研究,只是知道这东西用处大概跟json还有XML差不多,并且因为保存在本地了,数据不会丢失。
想要修改它可以通过常规的Resources类等 GlobleData globleData = Resources.Load<GlobleData>("Globle Data");


当初我还写了个SetDirty是干嘛的,大致就是通知Unity你修改数据,因为Unity默认会保存你修改的数据,但是在某两个地方不能(对,我忘记是哪里了),所以需要通知一下它。


参与人数 7鲜花 +14 收起 理由
crazycloud + 2 赞一个!
suiyuechangfeng + 2 神马都是浮云
kckbkckb2 + 2 很给力!
xanta + 2 很给力!
就比你帅一点 + 2 赞一个!
hsGuy929 + 2 很给力!
RyeCat + 2 很给力!

查看全部评分总评分 : 鲜花 +14

排名
5576
昨日变化

13

主题

89

帖子

749

积分

Rank: 9Rank: 9Rank: 9

UID
215257
好友
6
蛮牛币
1821
威望
0
注册时间
2017-3-29
在线时间
356 小时
最后登录
2019-5-24
沙发
楼主 2018-5-15 18:04:27 只看该作者
好像图都没加载出来,先下班回家再说
5熟悉之中
708/1000
排名
4639
昨日变化

5

主题

164

帖子

708

积分

Rank: 5Rank: 5

UID
252889
好友
2
蛮牛币
2381
威望
0
注册时间
2017-11-6
在线时间
223 小时
最后登录
2019-5-24
QQ
板凳
2018-5-16 08:46:36 只看该作者
3偶尔光临
215/300
排名
9775
昨日变化

0

主题

14

帖子

215

积分

Rank: 3Rank: 3Rank: 3

UID
28256
好友
0
蛮牛币
271
威望
0
注册时间
2014-6-5
在线时间
87 小时
最后登录
2018-9-4
地板
2018-5-16 09:32:01 只看该作者
这贴很有用,学习学习!感谢楼主分享
7日久生情
1584/5000
排名
1677
昨日变化

13

主题

213

帖子

1584

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
191997
好友
2
蛮牛币
184
威望
0
注册时间
2017-2-22
在线时间
594 小时
最后登录
2019-3-20
5#
2018-5-16 10:41:54 只看该作者
很强势,
5熟悉之中
615/1000
排名
5173
昨日变化

22

主题

151

帖子

615

积分

Rank: 5Rank: 5

UID
45756
好友
0
蛮牛币
525
威望
0
注册时间
2014-9-19
在线时间
164 小时
最后登录
2019-4-24
6#
2018-5-16 14:43:25 只看该作者
{:104:}{:104:}{:104:}{:104:}非常实用的代码知识
7日久生情
2049/5000
排名
1995
昨日变化

8

主题

791

帖子

2049

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
83438
好友
3
蛮牛币
17924
威望
0
注册时间
2015-3-23
在线时间
567 小时
最后登录
2019-5-21
7#
2018-5-16 17:33:01 只看该作者
学习 学习
7日久生情
2516/5000
排名
781
昨日变化

1

主题

710

帖子

2516

积分

Rank: 7Rank: 7Rank: 7Rank: 7

UID
56496
好友
0
蛮牛币
7781
威望
0
注册时间
2014-11-19
在线时间
587 小时
最后登录
2019-5-23
8#
2018-5-17 09:14:19 只看该作者
营养丰富啊,只是排版很乱!
5熟悉之中
621/1000
排名
4031
昨日变化

1

主题

54

帖子

621

积分

Rank: 5Rank: 5

UID
245487
好友
0
蛮牛币
1371
威望
0
注册时间
2017-9-22
在线时间
200 小时
最后登录
2018-8-21
9#
2018-5-17 10:28:23 只看该作者
收获颇丰,感谢感谢
6蛮牛粉丝
1188/1500
排名
2332
昨日变化

1

主题

165

帖子

1188

积分

Rank: 6Rank: 6Rank: 6

UID
236305
好友
1
蛮牛币
1684
威望
0
注册时间
2017-8-7
在线时间
414 小时
最后登录
2019-5-24
10#
2018-5-17 10:40:02 只看该作者
强势 前来学习一下心得
5熟悉之中
651/1000
排名
9199
昨日变化

0

主题

424

帖子

651

积分

Rank: 5Rank: 5

UID
250036
好友
0
蛮牛币
1483
威望
0
注册时间
2017-10-21
在线时间
101 小时
最后登录
2019-4-22
11#
2018-5-17 10:46:44 只看该作者
emmmm,unity工具能实现的操作用代码来实现的目的是?新手不太清楚
排名
5576
昨日变化

13

主题

89

帖子

749

积分

Rank: 9Rank: 9Rank: 9

UID
215257
好友
6
蛮牛币
1821
威望
0
注册时间
2017-3-29
在线时间
356 小时
最后登录
2019-5-24
12#
楼主 2018-5-17 11:59:01 只看该作者
hello33 发表于 2018-5-17 10:46
emmmm,unity工具能实现的操作用代码来实现的目的是?新手不太清楚

请问你说的Unity工具是啥...指的Unity编辑器还是Unity插件,操作又是什么
排名
5576
昨日变化

13

主题

89

帖子

749

积分

Rank: 9Rank: 9Rank: 9

UID
215257
好友
6
蛮牛币
1821
威望
0
注册时间
2017-3-29
在线时间
356 小时
最后登录
2019-5-24
13#
楼主 2018-5-17 11:59:09 只看该作者
hello33 发表于 2018-5-17 10:46
emmmm,unity工具能实现的操作用代码来实现的目的是?新手不太清楚

请问你说的Unity工具是啥...指的Unity编辑器还是Unity插件,操作又是什么
排名
5576
昨日变化

13

主题

89

帖子

749

积分

Rank: 9Rank: 9Rank: 9

UID
215257
好友
6
蛮牛币
1821
威望
0
注册时间
2017-3-29
在线时间
356 小时
最后登录
2019-5-24
14#
楼主 2018-5-17 11:59:47 只看该作者
hsGuy929 发表于 2018-5-17 09:14
营养丰富啊,只是排版很乱!

谢谢,要下班了,所以写得很乱
5熟悉之中
875/1000
排名
5640
昨日变化

0

主题

448

帖子

875

积分

Rank: 5Rank: 5

UID
146677
好友
9
蛮牛币
2777
威望
0
注册时间
2016-4-25
在线时间
177 小时
最后登录
2019-5-17
QQ
15#
2018-5-17 18:57:01 只看该作者
Unity IDE使用过做好的觉得还是JetBrains Rider
您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则

  • 赵孟頫:书法大师是怎么炼成的? 2019-05-26
  • 环境保护腰杆硬起来(在习近平新时代中国特色社会主义思想指引下——新时代新作为新篇章) 2019-05-26
  • 阳泉市旅发委对全市挂牌督办建设项目进行督导 2019-05-25
  • 苹果-热门标签-华商生活 2019-05-25
  • 图片故事:人民日报编辑部的一天 2019-05-24
  • 人民日报评论员:共创中华民族伟大复兴的美好未来 2019-05-24
  • 女性之声——全国妇联 2019-05-23
  • 中国智能手机在东南亚受追捧 2019-05-22
  • 一语惊坛(5月10日):半岛和平,是中朝两国的共同愿望。 2019-05-22
  • 董卿白岩松朱广权 看看央视主持人大学就读啥院系 2019-05-21
  • 邓超陈冠希焦恩俊,刷新娱乐圈女儿奴新高度 2019-05-21
  • 紫光阁中共中央国家机关工作委员会 2019-05-20
  • 四个跌停后 金洲慈航不惜食言也要选择如此停牌自救 2019-05-19
  • 无论是否想怀孕 这串数字女性要知道 2019-05-18
  • 机遇与挑战并存 中国企业“走出去”行稳致远 2019-05-17
  • 59| 734| 843| 462| 382| 898| 506| 602| 283| 988|