博客

  • win10文件拖动修复

    Windows Registry Editor Version 5.00

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]

    “EnableLUA”=dword:00000000

     

    保存为 *.reg 文件,修复win10有时无法拖动问题,可能需要重启

  • 呆呆酱的人设

    呆呆酱的人设

    角色名字:呆呆酱

    角色性格:q群词库人设为毒舌腹黑有点污、官方小说人设为一个智商偏低的机器人

    人物外形:

    CPU悬浮于头顶

    数据线位于手臂位置

    电池板为悬浮装置,不同的电池插入会产生不同的特色(用于小说战斗)

    机械之心能量体,位于胸口位置。

     

    根据不同的”皮肤”,具体的展现形式有所改变

  • 2020.11.22 虚度&画画

    昨晚睡太晚,中午起床,刷视频不知不觉到下午快晚上,勉强继续之前的洛天依画画,途中依旧感到画画的一些愉悦,虽然不断地修改略有崩溃但还是挡不住想看到成品的激动。大佬还是大佬,群里很快看出问题,并且帮忙引导了透视和头发线条。llu的画风此时也打算计划尝试学习。

    艾琳引导,问题分析:为自拍姿势,头太正,腰小问题,个人觉得头比例和透视基本问题,脸型掌握基础还需要长期经验,腰部没注意到体型和位置,头发过于蓬松并且与头型不符,线条过于犹豫不稳重:

    最后半成品

    TID原画

    旧稿,头部后擦除大部分重新修画

    其他的一些感想:因为刷短视频而虚度整个下午,除了新闻几乎没什么收货。因此,短视频或可被认为现代信息毒品,列入个人忌讳项,吸烟喝酒同样短时间不会对人体造成太大伤害,但有强烈的成瘾性、侵蚀与欲望放纵的诱导性,其本身也没有多少营养能长期自然的对人体和精神有正面或有益的影响,只因现代与上世代的人大众普遍性尚无法克制此类欲望和辨识的自然基因,且长期食用的情况下,将会导致心灵产生空虚、依赖感、孤独感、抑郁等精神病状,更会扰乱日常生活、时间管理、企划进度、社交维持等工作效率,故因断定可能只是当代无法逻辑理性的辨识和更好抵消欲望的情况下对此类次时代信息的不良运用规划或意识思维与自律性无法达到的前提下尚不适合的如“儿童不宜”的信息病毒或“成人食品”,即使当前的成年人也尚可能远远不及该产物的“儿童以上”标准,需控制合理用量并要求很强的自律性测试,否则不适应接触或必须遵循时间管理等方式强调自律。

  • 2020.11.21 学习&测试&画画

     

    下午不上班,从零看视频学了下c#基础,发现一点细节并已笔记发布至本博客

    研究了下u3d和l2d,还是不知模型如何才能正确导入,随便瞎玩了下demo里的预制件。如果能导入模型,则会自动生成预制件.prefab文件

     

     

     

     

  • 2020.11.21 C#基础笔记

    https://www.bilibili.com/video/BV1w4411D78z?p=15

     

    定义变量:

    {

    int hp;

    }

    int 数据格式/数据类型。

    hp 变量名。

     

    float 浮点型/小数:

    {

    float pi;

    pi = 3.14f;//加f标识浮点数常量,小数加f,无小数可不加,否则程序可能识别为double类型

    }

     

    连续定义多个变量:

    {

    string oldName,newName;//连续赋值变量、驼峰命名方式

    }

     

    随机数:

    {

    Random rnd = new Random();

    rnd.Next(3);//产生小于3的随机数

    }

     

    数据类型转换到int型:

    {

    string shp;

    //<<= int.parse(shp);

    }

    shp为有效类型,如整数字符串,将字符变量shp转换到整数型

     

    for循环解析:

    for(int i = 1;i <= 10;i++)

    {

    }

    int i = 1 定义及初始值,初始循环执行一次

    i <= 10 循环条件,执行11次,第11次不满足该条件跳出

    i++ 循环后做的事情,执行10次

     

    C#特性:花括号内外不能用同名变量

    如:

    {

    int i;

    for(int i;i<=10;i++) { }//此时i会提示存在同名

    }

     

    可直接使用花括号隔离,无需任何定义:

    {

    int i;

    {//单独括号

    for(int i;i<=10;i++) { }//此时i会提示存在同名

    }//单独括号

    }

     

  • Unity Live2D的接入和使用(转载)

    https://blog.csdn.net/weixin_38813436/article/details/106472110

    预制件原来自动生成的啊。。

     

    下载地址

    Live2D下载地址

    Live2D的使用

    Live2D导入Unity后文件结构如下,并且官方也提供了多个演示场景以供大家学习使用。

    在这里插入图片描述
    基本功能和使用。
    导入前的Live2D文件结构如下:在这里插入图片描述
    分别为表情的Json配置文件,动作的Json配置文件,贴图以及物理Json配置文件等。
    将此导入Unity后Live2D会自动处理配置文件,并在Runtime文件夹下生成Liv2D的预制体,expressionList表情列表和fadeMotionList动作列表,列表的引用关系Live2D已自动处理。
    在这里插入图片描述
    在这里插入图片描述
    Live2D预制体所挂脚本:
    在这里插入图片描述
    可选功能脚本:
    LookController与LookTarget配合使用,控制Live2D的鼠标追踪效果。
    Mouth,EyeBlink控制Live2D自动眨眼功能和嘴巴张闭。
    Expression表情管理。
    Fade 动作淡入淡出管理。
    同时自动眨眼还有鼠标追踪等功能,需要在相应可动部位添加相应功能脚本。
    如自动眨眼:
    在这里插入图片描述
    嘴巴:
    在这里插入图片描述
    鼠标追踪:
    在这里插入图片描述
    这些都是Live2D提供的基本功能,只需要挂载相应脚本便可实现功能。

    动作和表情的播放

    示例脚本:

    using Live2D.Cubism.Core;
    using Live2D.Cubism.Framework;
    using Live2D.Cubism.Framework.Expression;
    using Live2D.Cubism.Framework.Motion;
    using Live2D.Cubism.Framework.Raycasting;
    using System;
    using System.Collections.Generic;
    using UnityEngine;
    
    namespace Live2D.Cubism.Samples.OriginalWorkflow.Demo
    {
        [RequireComponent(typeof(CubismMotionController))]
        [RequireComponent(typeof(CubismRaycaster))]
        public class CubismSampleController : MonoBehaviour
        {
            /// <summary>
            /// MotionController to be operated.
            /// </summary>
            private CubismMotionController _motionController;
    
            /// <summary>
            /// ExpressionController to be operated.
            /// </summary>
            private CubismExpressionController _expressionController;
    
            /// <summary>
            /// Operation animation clip from the inspector.
            /// </summary>
            [SerializeField]
            private AnimationClip _bodyAnimation;
    
            /// <summary>
            /// Array of motion set in tapbody.
            /// </summary>
            [SerializeField]
            private AnimationClip[] _tapBodyMotions;
    
            /// <summary>
            /// Motion set in roop motion.
            /// </summary>
            private AnimationClip _roopMotion;
    
            /// <summary>
            /// List of Drawables info.
            /// </summary>
            private List<HitDrawableInfomation> _hasHitDrawables;
    
            /// <summary>
            /// Component that performs ray judgment on Drawables of model.
            /// </summary>
            private CubismRaycaster _raycaster;
    
            /// <summary>
            /// Raycast Hit Results.
            /// </summary>
            private CubismRaycastHit[] _raycastResults;
    
            /// <summary>
            /// Enumeration type for hit area discrimination.
            /// </summary>
            private enum HitArea
            {
                Head,
                Body
            }
    
            /// <summary>
            /// Structure that stores Drawable information for which hit area is specified.
            /// </summary>
            private struct HitDrawableInfomation
            {
                /// <summary>
                /// Drawable with component set.
                /// </summary>
                public CubismDrawable drawable;
    
                /// <summary>
                /// HitArea.
                /// </summary>
                public HitArea hitArea;
            }
    
    
            /// <summary>
            /// Load model.
            /// </summary>
            private void Start()
            {
                var model = this.FindCubismModel();
    
                // Get components.
                _motionController = model.GetComponent<CubismMotionController>();
                _expressionController = model.GetComponent<CubismExpressionController>();
                _raycaster = model.GetComponent<CubismRaycaster>();
    
    
                // Set behavior at the end of animation.
                _motionController.AnimationEndHandler = AnimationEnded;
    
    
                // Get up to 4 results of collision detection.
                _raycastResults = new CubismRaycastHit[4];
    
    
                // Cache the drawable in which the component is set.
                {
                    _hasHitDrawables = new List<HitDrawableInfomation>();
    
                    var hitAreas = Enum.GetValues(typeof(HitArea));
                    var drawables = model.Drawables;
    
    
                    for (var i = 0; i < hitAreas.Length; i++)
                    {
                        for (var j = 0; j < drawables.Length; j++)
                        {
                            var cubismHitDrawable = drawables[j].GetComponent<CubismHitDrawable>();
    
                            if (cubismHitDrawable)
                            {
                                if (cubismHitDrawable.Name == hitAreas.GetValue(i).ToString())
                                {
                                    var hitDrawable = new HitDrawableInfomation();
                                    hitDrawable.drawable = drawables[j];
                                    hitDrawable.hitArea = (HitArea)i;
    
                                    _hasHitDrawables.Add(hitDrawable);
                                    break;
                                }
                            }
                        }
                    }
                }
            }
    
    
            /// <summary>
            /// Update.
            /// </summary>
            private void Update()
            {
                // Play if animation is specified.
                SpecifiedAnimationCheck();
    
    
                if(!Input.GetMouseButtonDown(0))
                {
                    return;
                }
    
    
                // Cast ray from pointer position.
                var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                var hitCount = _raycaster.Raycast(ray, _raycastResults);
    
    
                // Motion playback according to the hit location.
                for (var i = 0; i < hitCount; i++)
                {
                    var hitDrawable = _raycastResults[i].Drawable;
    
                    for (var j = 0; j < _hasHitDrawables.Count; j++)
                    {
                        if (hitDrawable == _hasHitDrawables[j].drawable)
                        {
                            var hitArea = _hasHitDrawables[j].hitArea;
    
    
                            // Tap body.
                            if (hitArea == HitArea.Body)
                            {
                                // Decide motion to play at random.
                                var motionIndex = UnityEngine.Random.Range(0, _tapBodyMotions.Length - 1);
    
                                Debug.Log("Tap body : Play : " + _tapBodyMotions[motionIndex].name);
    
                                _motionController.PlayAnimation(_tapBodyMotions[motionIndex], isLoop: false, priority:CubismMotionPriority.PriorityNormal);
                            }
                            // Tap head.
                            else if (hitArea == HitArea.Head)
                            {
                                // Decide expression motion to play at random.
                                var expressionNum = _expressionController.ExpressionsList.CubismExpressionObjects.Length;
                                var expressionIndex = UnityEngine.Random.Range(0, expressionNum - 1);
    
                                _expressionController.CurrentExpressionIndex = expressionIndex;
    
                                Debug.Log("Tap head : Play : " + _expressionController.ExpressionsList.CubismExpressionObjects[expressionIndex].name);
                            }
    
                            break;
                        }
                    }
                }
            }
    
    
            /// <summary>
            /// Check the specified animation and play it.
            /// </summary>
            private void SpecifiedAnimationCheck()
            {
                if(_bodyAnimation != _roopMotion)
                {
                    _roopMotion = _bodyAnimation;
    
                    Debug.Log("Body animation : Play : " + _roopMotion.name);
    
                    _motionController.PlayAnimation(_roopMotion, priority:CubismMotionPriority.PriorityIdle);
                }
            }
    
    
            /// <summary>
            /// Called at the end of the animation.
            /// </summary>
            /// <param name="instanceId"></param>
            private void AnimationEnded(float instanceId)
            {
                // Play roop motion.
                _motionController.PlayAnimation(_roopMotion, priority:CubismMotionPriority.PriorityIdle);
    
                Debug.Log("Body animation : Play : " + _roopMotion.name);
            }
        }
    }
    

    注意,可交互部位要挂载相应功能脚本,点击才会生效。如要点击身体部位,可在预制体的Drawables下将相关区域挂载CubismHitDrawable与CubismRaycastable脚本。如:
    在这里插入图片描述
    如此,射线检测到点击的相应区域,便可播放相应的动作或者表情了。

     

  • Unity开发之如何创建Prefab(预制件)(转载)

    https://jingyan.baidu.com/article/e5c39bf5aa02f639d76033f8.html

     

    发现l2d官方demo的l2d模型model文件内都有prefab文件,初步判断是已经拼好的模型,类如u3d中的moc

     

    在Unity官方文档中在介绍GameObjects时提到一个概念Prefab,翻译成中文就是预制件。

    那什么是Prefab呢?

    在我们制作的场景中,如战斗中的子弹,森林里的树木,此类游戏对象会在同一个场景重复使用。为了方便同时修改这些对象,就可以使用Prefab这些对象,而只需要修改Prefab就可以将修改作用到所有由该Prefab生成的对象上。

    工具/原料

    • Unity3D
    • Macbook

    方法/步骤

    1. 在“Project”界面上,右键点击“Assets”打开右键菜单,依次选择“Create”->“Prefab”,这样创建一个Prefab资源,此处命令为test

      Unity开发之如何创建Prefab(预制件)
    2. 选中场景后,在场景的“Hierachy”界面中打开右键菜单,依次选择“3D Object”->“Cube”

      Unity开发之如何创建Prefab(预制件)
    3. 将Cube对象拖动到第一步中创建的Prefab资源上

      Unity开发之如何创建Prefab(预制件)
    4. 完成第三步后,可以发现Prefab资源的样式发生了变化,这说明该Prefab资源成功创建

      Unity开发之如何创建Prefab(预制件)
    5. 你可以将Prefab资源直接拖动场景中就可以使用该Prefab 了

      Unity开发之如何创建Prefab(预制件)

     

  • 2020.11.20 大整理本站开始尝试更新日常

    所谓调研工作一直无法确认具体需求和样本,人老是不在,好歹也是国企这么慵懒的吧

    整理一天的电脑收藏和本站,未彻底整理完,此后以此博客当做日志

    11.17 在3L万维找李总谈工作分配,在次日上班。未谈及薪资合同等。(11.29补)

  • 将CentOS 7系统从命令行模式启动转到图形界面模式(转载)

    https://ywnz.com/linuxjc/3198.html

     

    通过本文可以顺利的将CentOS 7系统的命令行模式转到图形界面模式中,跟着下面步骤进行就行,重要地方以图解的方式解析,易懂易操作。

     

    背景

    在VMware虚拟机中安装成功CentOS 7系统,若没有提前配置安装过GUI图形界面的程序包,则系统安装成功后初次启动系统会默认进入命令行模式的界面,如下图:

    将CentOS 7系统从命令行模式启动转到图形界面模式

    从操作习惯和便利性角度,如果是新手这种界面完全无法上手,所以要从从命令行模式转换为图形界面模式启动系统,需要下载CentOS 7系统所需的GUI模式的程序包进行安装和配置。本文的具体步骤如下:

    一、安装并开启CentOS 7系统,登录root管理用户

    二、配置网络网卡,实现与外网保持联通

    三、获取并且安装图形界面GNOME的程序包

    四、修改CentOS 7默认启动模式为图形化模式

    五、重启CentOS 7系统,检验GUI界面效果

     

    一、安装并开启CentOS 7系统,登录root管理用户

    如上图所示,相关登录信息在安装CentOS 7系统时就已经配置完成,localhost login和Password分别为:

    超级管理员:root——root

    普通用户:test001——123456

     

    二、配置网络网卡,实现与外网保持联通

    执行命令cd /etc/sysconfig/network-scripts/进入到network-scripts目录中,找到文件ifcfg-ens33(具体名字可能因系统不同而各异,如eth0、eth33等等),然后对该文件进行配置网卡信息:

    将CentOS 7系统从命令行模式启动转到图形界面模式

    执行命令vi ifcfg-ens33打开网络配置文件,【INS】键进入编辑输入模式,在文件末尾加上下面三行:

    # 指定DNS服务器的IP地址,使其可正常解析域名,从而访问外网

    DNS1=8.8.8.8

    DNS2=4.2.2.2

    并配置以下参数:

    # 启动网络时,启动该设备

    ONBOOT=yes

    这部分操作的图示如下:

    将CentOS 7系统从命令行模式启动转到图形界面模式

    【ESC】键退出编辑模式,然后以命令:wq保存并退出该网络配置文件。

    重新加载网络配置文件,使得刚才的配置生效:

    操作命令:service network restart

    将CentOS 7系统从命令行模式启动转到图形界面模式

    Ping一下,检查是否联通外网,下图显示已经与外网联通:

    将CentOS 7系统从命令行模式启动转到图形界面模式

     

    三、获取并且安装图形界面GNOME的程序包

    执行命令yum检查yum是否可正常使用:

    将CentOS 7系统从命令行模式启动转到图形界面模式

    执行命令yum groupinstall “GNOME Desktop” “Graphical Administration Tools”获取并安装CentOS 7默认的图形界面GNOME程序包。

    过程中,会有提示类似”… is ok?(Y/N)”,直接选择Y,回车。然后就是Waiting,一直到提示”Completed!”,表示已经安装GNOME程序包完成:

    将CentOS 7系统从命令行模式启动转到图形界面模式

     

    四、修改CentOS 7默认启动模式为图形化模式

    执行命令systemctl get-default可查看当前默认的模式为multi-user.target,即命令行模式:

    将CentOS 7系统从命令行模式启动转到图形界面模式

    需要执行命令systemctl set-default graphical.target修改为图形界面模式。

    注:修改模式命令有下面两种:

    systemctl set-default graphical.target  # 将默认模式修改为图形界面模式(本次命令)

    systemctl set-default multi-user.target # 将默认模式修改为命令行模式

    将CentOS 7系统从命令行模式启动转到图形界面模式

    再次执行命令systemctl get-default就可以查看当前修改后的默认模式为graphical.target,即图形界面模式:

    将CentOS 7系统从命令行模式启动转到图形界面模式

     

    五、重启CentOS 7系统,检验GUI界面效果

    上面的步骤完成后执行reboot命令重新启动CentOS 7系统,上面步骤做好后就可以切换进入到GUI图形界面模式,如下图所示:

    将CentOS 7系统从命令行模式启动转到图形界面模式

    点击登录用户头像区域,输入安装时设置的密码,即可进行登录CentOS 7桌面:

    将CentOS 7系统从命令行模式启动转到图形界面模式

    如下图所示,已经成功进入到CentOS 7图形桌面中,这是我们希望看到的成果:

    将CentOS 7系统从命令行模式启动转到图形界面模式

     

  • windows与linux换行规则(转载)

    https://www.cnblogs.com/hwli/p/9638871.html

     

    在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。

    于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做”回车”(Carriage Return),告诉打字机把打印头定位在左边界;另一个叫做”换行”(Linefeed),告诉打字机把纸向下移一行。

    这就是”换行”和”回车”的来历,从它们的英语名字上也可以看出一二。

    后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。

    Unix系统里,每行结尾只有”<换行>”,即”\n”;Windows系统里面,每行结尾是”<回车><换行>”,即”\r\n”;Mac系统里,每行结尾是”<回车>”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。在这,只比较windows和unix,不比较Mac。

    例:在windows上新建文件,查看ASCII值

    this
    is
    a
    test

    用UltraEdit打开查看ASCII码,可见换行有两个字符’0D”0A’,查ASCII表得知‘0D’=CR(也就是回车(Ctrl/M)),‘0A’=LF(也就是换行(Ctrl/J))。在文本中显示不出来,所以就显示’..’。但是最后一行test后面却什么都没有。如下图。

    在linux中显示

    vbird@Ubuntu1604:~$ cat -An win.txt    //^M就是回车符 $就是换行符
         1  this^M$
         2  is^M$
         3  a^M$
         4  testvbird@Ubuntu1604:~$    //由于windows新建文本,最后一行不会自动添加回车符或换行符,所以"test"与"vbird@Ubuntu1604:~$"显示在同一行中。

    例:在linux上新建文件,查看ASCII值

    用UltraEdit打开查看ASCII码,可见换行只有1个字符’0A’,查ASCII表得知‘0A’=LF(也就是换行(Ctrl/J))。在文本中显示不出来,所以就显示’.’。最后一行与windows不同,windows新建的文本,最后一行没有换行或回车,linux新建的文件,最后一行还会添加1个换行符。如下图。

    vbird@Ubuntu1604:~$ cat -An unix.txt   //$就是换行符
         1  this$
         2  is$
         3  a$
         4  test$        //由于linux新建文本,最后一行会自动添加换行符,所以"test"与"vbird@Ubuntu1604:~$"显示在不同行中。
    vbird@Ubuntu1604:~$