最近在学习Unity,先讲点学习到的历史吧
unity中脚本文件可以使用c#,也可以使用js编写,但是随着时代的发展,人们逐渐意识到c#的各种诸如严谨、运行效率高等优秀之处,js逐渐在近几年淘汰出了unity的圈子中(当然,js也是有自己的优点的)。而实际上,unity其实是基于c++开发的,由于使用了mono技术(Xamarin公司开发的跨平台.NET运行环境)使得可以运用微软公司的.NET平台转换c++代码,进而使用c#在平台上进行开发,同时基于mono技术,使得unity的游戏可以跨平台发布,可以说两家公司的合作是教科书式的典范,或者应该说三家公司
在此点名批评 虚幻 引擎,只能用c++写有点过分了,因为这个语言学习起来太有难度了,光是内存的释放和缓存,就够学上1个月了…好在我不是计算机专业的或者说教学大纲中没有这个课程,不然考试就头秃了
unity推荐使用vs开发,但是个人比较喜欢在vs code上写代码
初学c#时,发现这是与之前学过的C、java、python、matlab等有着不同的环境规则,如果直接新建xxx.cs写代码,再按下f5进行重构,会发现报错,原因是它需要事先营造一个规定的编程环境
c#可以说十分方便,java里对象的属性通常需要预设get和set两个方法,但是在c#中有结构更为简洁的创建get和set方法的代码样式,当然有强大的编译器,自动生成方法也不是什么难事
这篇文章主要是说明下我在vs code里编写代码时遇到的问题和我的一些预设插件及格式,帮助各位更快更好更舒适地搭建编写环境,把心思专注到Unity的学习上
如果您想在vs code运行c#,请按照如下操作进行
下载安装vs code,这就不用我多说了吧
下载安装微软公司的 .NET 平台,默认放c盘,我本人建议就让它直接放c盘吧,后续程序的运行效率比较高
安装完成后,win+R输入cmd打开命令行或打开win10通常自带的PowerShell,输入
dotnet -h
出现下图类似的回馈情况,则安装成功

vs code的插件商店中搜索c#,这个绿色的插件必须装上去,否则在编译器上运行不了

新建工程,在编译器中创建一个终端,输入下面这句命令以创建一个c#的编写环境
dotnet new console

此时可能会弹出这个对话框,点击yes,编译器会对这个环境设置一些有用的json脚本,就算不小心关闭了或者没弹出也没关系,请继续往下看

dotnet new console 后,可以看到,.NET平台已经帮我们在工程目录构建好了环境,并默认放了一个hello world的代码

按下f5,我们看到了熟悉的hello world输出在了控制台

一定要在上一步点击yes吗?答案是否定的,不点yes则按下f5时会出现这个弹窗

选择你需要的版本就好,这里我选择第一个,.NET 5+,此时效果和点击yse是一样的,就是vs code在工程目录创建了一个json脚本
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qz26lRPm-1649576717569)(https://hty.ink/wp-content/uploads/2021/12/image-5.png)]
有时候我们不希望按下f5重构代码,因为这会生成xxx.exe文件并且执行速率较慢,此时我们有以下几种方法
首先新建一个终端

在终端中输入以下命令,即可运行代码,但是前提是你打开的是项目文件夹,否则你必须一步步在cmd中cd文件路径
dotnet run

结果为

注意,一个c#项目只能有一个主入口即main方法,否则运行 dotnet run 会报错
error CS0017: 程序定义了多个入口点。使用 /main (指定包含入口点的类型)进行编译。
这个是vs code中的一个插件,人气较低,但是我觉得十分好用
基本原理就是预构筑一个虚拟编译环境,再基于这个环境运行c#代码
这个插件的好处是不需要创建运行环境,当然,如果你需要发布时还是自行f5吧

使用这个插件后,可以直接在工程文件夹中创建xxx.cs,编译运行,第一次构筑虚拟环境时可能较慢,大概4s左右,接下来就好了。首先点击这个绿色的箭头

可以看到,我的工程文件夹中只有xxx.cs,没有运行环境,但是却能运行输出hello world,真好

vs code中很优秀的插件,相当出名,可以说是用这个编译器的程序员必装的插件,可以直接运行各类代码
如果您想简单运行一段无命名空间和类约束的c#代码,可以使用code runner运行c#

观察帮助文档,发现这个插件如果要运行c#,需要事前安装scriptcs
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4jpnpw0D-1649576717578)(https://hty.ink/wp-content/uploads/2021/12/image-14-1024x994.png)]
点击超链接进入,帮助文档说scriptcs需要通过Chocolatey来安装

那就让我们先安装chocolatey吧,根据官网帮助文档,有三种安装方式
方法1
管理员下cmd中输入
@%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin
方法2
管理员下PowerShell 中 输入
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
方法3
建议选择方法3进行离线安装,因为国外服务器在中国的下载速度是真的拉跨。如果你有全局加速器请随意
安装好 chocolatey后cmd输入以下命令即可
cinst scriptcs
chocolatey 里面下载任何东西,网速依然十分拉跨,没办法国情摆在那,我重复下载失败了4次才装上scriptcs
回到vs code,直接输入
Console.WriteLine(Hello World!);
点击这个透明的箭头,就是绿色箭头左边这个图标

结果如下

如果您想格式化您的c#代码,vs code的插件c#默认打开了格式化功能

使用这个格式化功能的前提是**打开项目文件夹**并且配置好了相对应的json文件
但是很多时候我们只是想打开单一文件修改代码并格式化,创建json文件是多余的,这时候就需要用到下述的插件
很抱歉,截至发文时间,这个插件的格式化代码功能有bug无法使用,如果您下载并启用了这个插件,请关闭它的格式化功能

截至发文时间,这款插件已经下架了,因此网上的所有推荐文章暂时已作废,可以不用点开了浪费时间
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0NEnv98I-1649576717583)(https://hty.ink/wp-content/uploads/2021/12/image-23-1024x324.png)]
这款插件支持JavaScript, TypeScript, Flow, JSX, JSON, CSS, SCSS, Less, HTML, Vue, Angular, GraphQL, Markdown, YAML, C#, Elm, Java, Twig, XML, Svelte, Php的格式化,十分好用

需要注意的是,这款插件与之重名重图标的很多,一定要选择Simon Siefke这个作者的,亲测

不推荐,插件格式化后的样式不符合如今的c#格式规范

关闭 CS-Script 的格式化,使用插件 Prettier - Code formatter
打开设置,搜索workbench.colorCustomizations,然后点击编辑setting.json

加入这几行代码即可。当然您也可以改成自己喜欢的颜色
workbench.colorCustomizations: {
statusBar.background: #333333,
statusBar.noFolderBackground: #333333,
statusBar.debuggingBackground: #333333
},
效果如下

一键注释,就是生成方法规范化注释的三条杠///…///
提供Unity Snippets例如Awake(),Start(),OnColliderEnter()等
这个插件提供了对IDE的扩展,可以加快开发
自动导入并为尚未导入C#文件的引用提供智能感知。
使用Code的Command Palette,可以轻松地在项目.csproj或.fsproj文件中添加或删除.NET Core 1.1+程序包引用
欢迎评论
如果哪天我发现了什么有帮助的东西会继续更新这篇文章
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚
Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack
在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/
我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为
我有一大串格式化数据(例如JSON),我想使用Psychinruby同时保留格式转储到YAML。基本上,我希望JSON使用literalstyle出现在YAML中:---json:|{"page":1,"results":["item","another"],"total_pages":0}但是,当我使用YAML.dump时,它不使用文字样式。我得到这样的东西:---json:!"{\n\"page\":1,\n\"results\":[\n\"item\",\"another\"\n],\n\"total_pages\":0\n}\n"我如何告诉Psych以想要的样式转储标量?解