取消

Unity3D 入门:为 Unity 的 C# 项目添加 dll 引用或安装 NuGet 包

因为 Visual Studio 有强大的包管理器插件,所以即便是不熟悉 NuGet 命令的小伙伴也能轻松安装和管理 NuGet 包。不过,对 Unity C# 项目来说,你并不能直接引用 dll,也不能直接使用自带的 NuGet 包管理器完成 NuGet 包安装。 本文介绍原因和真正的引用方法。 背景 对于传统 .NET/C# 的开发者来说,在解决方案中管理 NuGet 包,...

Win32/C# 应用使用 PrintWindow 对窗口截图(PrintWindow)

相比于 Windows 2000 引入到 GDI+ 中的 BitBlt 方法截取窗口图片,Windows XP 时也引入了 PrintWindow 方法来专门截取窗口,截取的原理也不同。 微软 Office 系列里的截取窗口,用的就是 PrintWindow 方法。 开始截图 相比于使用 BitBlt 方法,使用 PrintWindow 截取窗口的代码少得多。 你需要引用如下...

Win32/C# 应用不依赖任何库使用纯 GDI+ 对窗口截图(BitBlt)

在 Windows 上有 GDI+ 来操作位图,不止能完成很多的位图操作,还提供了与 Win32 窗口的互操作,可以截到 Win32 窗口的图片。 如果你希望对窗口截图,那么可使用本文提供的方法。 没有依赖 本文对窗口的截图几乎不需要任何额外的依赖(当然,都 GDI 了,Windows 系统还是要的)。 不过,你可以考虑使用 Lsj.Util.Win32 来简化代码,所以如果...

Win32/C# 应用使用 GDI+ 对窗口截图(BitBlt)

在 Windows 上有 GDI+ 来操作位图,不止能完成很多的位图操作,还提供了与 Win32 窗口的互操作,可以截到 Win32 窗口的图片。 如果你希望对窗口截图,那么可使用本文提供的方法。 依赖,或者没有依赖 在本文的代码中,你可以考虑引用以下这些库来简化代码。 对于 .NET Core: System.Drawing.Common Lsj.Util.Wi...

提高使用 Visual Studio 开发效率的键盘快捷键

Visual Studio 的功能可谓真是丰富,再配合各种各样神奇强大的插件,Visual Studio 作为太阳系最强大的 IDE 名副其实。 如果你能充分利用起 Visual Studio 启用这些功能的快捷键,那么效率也会很高。 建议记住 功能 快捷键 建议修改成 重构 ...

Unity3D 入门:如何制作天空效果?天空盒的使用

在 Unity 编辑器的主界面中我们可以很容易制作各种场景物体,但天空如何制作呢? 了解和设置默认的天空盒 在新建一个 Unity3D 项目之后,我们在空空如也的场景下看到的那蓝灰过渡的画面,其实就是 Unity3D 默认提供的“天空”,这个机制叫“天空盒”(Skybox)。 你可以在 Window->Rendering->Lighting Settings(窗口-...

专业团队:推荐一个网站,生成巨幅文字注释

通过学习本文的知识,你将可以在你的项目代码里创造大量的注释。让你的注释闪瞎团队所有人的钛合金X眼,我们是专业团队。 Console.WriteLine(@" ██╗ ██╗ █████╗ ██╗ ████████╗███████╗██████╗ ██╗ ██╗ ██╗ ██║ ██║██╔══██╗██║ ╚══██╔══╝██╔════╝██╔══██╗██...

.NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)

垃圾回收机制有一些未定义部分,一般来说不要依赖于这些未定义部分编程,否则容易出现一些诡异的 bug 或者不稳定的现象。 本文介绍局部变量这部分的细节,而这点在 .NET Framework 和 .NET Core 默认情况下的表现有差别。 问题代码 看看下面这段代码,你觉得会输出 Foo is collected 吗? class Program { static v...

.NET/Windows:删除文件夹后立即判断,有可能依然存在

如果你不了解本文的内容,可能会在未来某个时候踩坑–你可能在判断文件夹是否存在的时候得到错误的返回值。 删除文件(夹) 使用 .NET 带的删除文件夹的方法: Directory.Delete("D:\walterlv"); 或者使用其他删除文件(夹)的方法,大多数是以下 Windows API 的封装: BOOL DeleteFile( LPCTSTR lpFileN...

在制作多框架项目的 NuGet 包时应该注意的问题(buildMultiTargeting/TargetFrameworks)

制作一个 dll 引用的 NuGet 包简直是一键完成,无论是不是多框架项目;制作 dotnet-tools 也是如此。但如果需要自定义一些编译步骤,那么就需要在制作 NuGet 包时做很多的特殊处理了。 本文介绍制作适用于多框架项目的 NuGet 工具包时应该注意的问题。 背景知识 NuGet 包内的文件夹结构 回顾一下 NuGet 包的文件夹结构: + / + lib/...

为 .NET 各种开发工具设置网络代理,提升在大陆的网络性能

git、nuget、scoop 如何设置网络代理提升网络访问速度呢? 在下面的博客正文中,都假设我的本机搭设了代理服务,其中 SOCKS5 代理服务的端口号是 7777,HTTP 代理服务的端口号是 7778。 git 使用命令行设置 git 支持设置 http 代理和 socks5 代理,http 的代理和 https 的代理是分开设置的。 设置方法: 打开任意一...

Unity3D 入门:如何在脚本中找到游戏对象的父子级/祖孙级对象和它们的组件

在真正能玩的游戏场景中,很多脚本的执行是在不确定的游戏对象上进项的,于是会考虑在父对象或者子对象上去写脚本。这时,可能需要查找游戏对象。那么如何在脚本中找到父子游戏对象(gameObject)呢? 场景 如下图所示,Windows 游戏对象下面可能有很多不确定数量和位置的游戏对象,需要操作它们。 在为游戏对象创建脚本的时候,这个脚本中的类会继承自 MonoBehavior:...

WPF 中使用附加属性,将任意 UI 元素或控件裁剪成圆形(椭圆)

不知从什么时候开始,头像流行使用圆形了,于是各个平台开始追逐显示圆形裁剪图像的技术。WPF 作为一个优秀的 UI 框架,当然有其内建的机制支持这种圆形裁剪。 不过,内建的机制仅支持画刷,而如果被裁剪的元素支持交互,或者拥有普通画刷无法达到的显示效果,那么就需要本文介绍的更加通用的解决方法了。 UWP 的圆形裁剪请左转参考:UWP 将图片裁剪成圆形(椭圆)。 WPF 的 UIElem...

快速在 Windows 上搭建 Jekyll 开发环境

Jekyll 是一个不错的静态博客工具,本文将提供快速在 Windows 系统上搭建 Jekyll 开发环境的方法。 For 老手 其实所需的命令只有少数几个而已: # 全局命令:安装 Ruby 所需的依赖 ridk install # 全局命令:安装 Jekyll gem install jekyll bundler # 工作目录命令:安装博客仓库中所需的依赖 bundle ...

Unity3D 入门:Unity Editor 编辑器常用快捷键

本文为 Unity3D 入门小伙伴整理 Unity 编辑器中的常用快捷键。 调节工具 Unity 编辑器左上角的一组按钮,正好也对应着键盘左上角的字母: 图标 快捷键 Q W E ...

Unity3D 入门:让 C# 脚本公开可在 Unity 编辑器中设置的属性

将一部分参数从 C# 脚本中抽离出来,可以让 C# 脚本在 Unity 项目中更通用,适用于更多游戏对象(gameObject)。 本文介绍如何创建可在 Unity 编辑器中设置属性的 C# 脚本,并介绍如何在 Unity 编辑器中设置它们。 简单的 C# 脚本 本文的例子取自于我的另一篇博客: Unity3D 入门:最简单的控制视角,以及控制角色前进、转向的脚本 - ...

Unity3D 入门:最简单的控制视角,以及控制角色前进、转向的脚本

本文依然是 Unity3D 的入门篇。作为 Unity3D 的入门读者,你可能希望迅速让你能在游戏中操作你的视角,或者让角色移动。 创建脚本 作为入门篇,可能需要讲一下如何创建脚本。按下图,在 Unity 编辑器中: 在 Hierarchy(层级)中选中主摄像机; 在 Inspector(检查器)中选择最后那个 Add Component(添加组件); 选择 Ne...

Unity3D 入门:安装 Unity3D 并配置与 Visual Studio 的协作开发环境

实际上本文不看也罢,因为整个过程除了网速之外基本没啥坑。不过装完可能有一些配置,所以如果不知道的话可以参考本文。 安装 我们共需要安装两款应用: Visual Studio 2019 及 Unity 编辑器组件 Unity Hub 这两款应用安装不分先后,不过建议全部都安装完后再启动,避免单独启动无法运行使用的问题。 安装 Visual Studio 2019 ...

.NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)

获取图片宽高的方法有很多种,本文介绍 .NET 中获取图片宽高的几种方法并评估其性能。如果你打算对大量图片进行一些处理,本文可能有用。 本文即将评估的方法 本文即将采用以下四种方法获取图片: System.Drawing.Imaging.Metafile System.Drawing.Bitmap System.Windows.Media.Imaging.Bitm...

在 CMD 里根据进程名杀掉进程

任务管理器杀进程大家都会,不过如果你的系统被卡到任务管理器都无法操作了,怎么办?拿控制台 CMD 吧! 系列博客: 在 CMD 里根据进程名杀掉进程 - walterlv 在 PowerShell 里根据进程名杀掉进程 - walterlv taskkill 命令 taskkill /f /t /im chrome.exe /f 表示强制终止进程。如果不指定,...

在 PowerShell 里根据进程名杀掉进程

任务管理器杀进程大家都会,不过如果你的系统被卡到任务管理器都无法操作了,怎么办?直接在 PowerShell 中干掉!另外,这也非常容易集成到各种工具链中。 系列博客: 在 CMD 里根据进程名杀掉进程 - walterlv 在 PowerShell 里根据进程名杀掉进程 - walterlv Stop-Process / kill PowerShell 脚本 S...

Linux Shell 中需要转义的字符

本文整理 Linux Shell 中的转义字符。 在 Linux Shell 中,有很多字符是有特殊含义的,如果期望把这个字符当作普通字符来处理,需要经过 \ 的转义。 在双引号中即可变普通字符的特殊字符 ` ` * 空格 ‘\ ` 这是转义空格。如果路径中包含空格,那么使用 \ 转义可以避免路径被分割成 Shell 的两个参数。 我有另一篇描述 Linux Shell ...

git 乱改你的换行符?一句话设置让 git 不再碰你某个文件的换行符

前些天有位小伙伴告诉我说 git 改了某个重要文件的换行符,导致文件的哈希变了,于是文件校验出现错误。之前一直没问题而最近才有问题是因为最近换了部署服务器,git 的换行符配置不一样。 其实,我们不应该让代码仓库如此容易受到外界环境的影响。所以本文会解释 git 的全局配置如何影响了 git 对换行符的处理,然后说说如何彻底解决这个问题。 关于换行符 \r = CR = ...

.NET 将混合了多个不同平台(Windows / Mac / Linux)的文件/目录的路径格式化成同一个平台下的路径

Windows 下的路径分隔符是 \ 而 Linux 和 Mac 下的路径分隔符是 \。正常如果你的数据不跨 Windows 和 Linux 平台流通的话,不怎么会遇到多种换行符并存的问题的。但如果真发生了流通,那么如何将它们格式化为统一的当前平台认识的分隔符呢? 现有方案 没有原生方案(.NET) System.IO.Path 带了一堆方法用来处理路径。各大文档博客和书籍也都...

如何在 Windows 10 中安装 WSL2 的 Linux 子系统

本文介绍如何在 Windows 10 中安装 WSL2 的 Linux 子系统 第一步:启用虚拟机平台和 Linux 子系统功能 以管理员权限启动 PowerShell,然后输入以下命令启用虚拟机平台: Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform 以管理员权限启动 Pow...

Unity3D 入门:在 Visual Studio 里使用 Visual Studio Tools for Unity 全套工具

Visual Studio 安装过程中一起勾选的 Visual Studio Tools for Unity 提供了与 Unity 编辑器方便的交互功能,充分使用 Visual Studio Tools for Unity 可以提升一部分开发效率减少一点点坑。 Visual Studio Tools for Unity 我在 Unity3D 入门:安装 Unity3D 并配置与 ...

Unity3D 入门:使用 Visual Studio 开发 Unity C# 脚本,说说根目录的那些 sln 和 csproj 文件

本文介绍 Unity3D 项目根目录的 sln 和 csproj 文件,你将知道如何正确理解和使用它们。 对于传统 .NET/C# 的开发者来说,在解决方案中管理 NuGet 包,在 C# 项目中引用 dll 或 NuGet 包是家常便饭。但在 Unity 项目里面,你可能要改变这一观念——因为 Unity 项目里面实际上并不存在 sln 和 csproj 文件。 等等!那我们在根目...

让你的程序置顶到比系统界面都更上层,就像任务管理器/放大镜一样绝对置顶

启动系统自带的放大镜程序,我们会发现即便进了 Windows 8 的开始屏幕,或打开了 Windows 10 的开始菜单和消息中心,它也依然显示在最顶层。如果你为任务管理器开启置顶效果,你会发现它也能显示到开始屏幕的顶层。这是怎么做到的呢? 顺便解释下“桌面应用程序”,指的是传统 Win32 应用程序。解释下“Windows 应用”,指的是开始屏幕/开始菜单/UAP/UWP 甚至是锁屏...

C# 可空引用类型 Nullable 更强制的约束:将警告改为错误 WarningsAsErrors

程序员不看警告! 于是 C# 8.0 带来的可空引用类型由于默认以警告的形式出现,所以实际上约束力非常弱。 本文将把 C# 8.0 的可空引用类型警告提升为错误,以提高约束力。 启用可空引用类型 你需要先在你的项目中启用可空引用类型的支持,才能修改警告到错误: C# 8.0 如何在项目中开启可空引用类型的支持 - 吕毅 项目属性 在项目属性中设置是比较快捷直观的...

C# 8.0 如何在项目中开启可空引用类型的支持

C# 8.0 引入了可为空引用类型和不可为空引用类型。由于这是语法级别的支持,所以比传统的契约式编程具有更强的约束力。更容易帮助我们消灭 null 异常。 本文将介绍如何在项目中开启 C# 8.0 的可空引用类型的支持。 使用 Sdk 风格的项目文件 如果你还在使用旧的项目文件,请先升级成 Sdk 风格的项目文件:将 WPF、UWP 以及其他各种类型的旧 csproj 迁移成 ...