如果这是很容易搜索到的内容,我深表歉意,但我不太确定正确的搜索词是什么。
我现在正在使用 Visual Studio,主要用于 Unity 开发。创建新脚本时,我经常声明一些私有成员变量,如下所示:
private Rigidbody _rigidbody;
private SomeOtherComponent _myComponent;
为了初始化这些变量,我需要在名为“Start”的函数中添加 GetComponent 调用,如下所示:
void Start(){
_rigidbody = GetComponent<Rigidbody>();
_myComponent = GetComponent<SomeOtherComponent>();
}
现在,我找到了一个 Visual Studio 代码片段来快速键入“GetComponent”部分,这很好,但我正在寻找一种在 Start 函数中自动生成代码行的方法。在理想的世界中,我可以输入
private Rigidbody _rigidbody;
然后我可以点击一些组合键,它会自动添加
_rigidbody = GetComponent<Rigidbody>();
至开始功能。
片段只能让我完成一半。我需要做什么才能为 Visual Studio 创建这种类型的扩展?这是一件很难完成的事情吗?
你可以试试我的视觉指挥官 https://vlasovstudio.com/visual-commander/正是针对这种轻量级可扩展性而设计的扩展。它允许将文档编辑为文本或使用 Visual Studio 代码模型和 Roslyn。
例如,当插入符号位于变量声明中的 _rigidbody 或 _myComponent 上时,调用以下命令:
public class C : VisualCommanderExt.ICommand
{
public void Run(EnvDTE80.DTE2 DTE, Microsoft.VisualStudio.Shell.Package package)
{
this.DTE = DTE;
EnvDTE.CodeVariable v = FindCurrentVariable();
if (v != null)
{
string initialization = v.Name + " = GetComponent<" + v.Type.CodeType.Name + ">();";
AddLine(FindFunction("Start"), initialization);
}
}
EnvDTE.CodeFunction FindFunction(string name)
{
EnvDTE.TextSelection ts = DTE.ActiveWindow.Selection as EnvDTE.TextSelection;
if (ts == null)
return null;
EnvDTE.CodeClass codeClass = ts.ActivePoint.CodeElement[EnvDTE.vsCMElement.vsCMElementClass]
as EnvDTE.CodeClass;
if (codeClass == null)
return null;
foreach (EnvDTE.CodeElement elem in codeClass.Members)
{
if (elem.Kind == EnvDTE.vsCMElement.vsCMElementFunction && elem.Name == name)
return elem as EnvDTE.CodeFunction;
}
return null;
}
EnvDTE.CodeVariable FindCurrentVariable()
{
EnvDTE.TextSelection ts = DTE.ActiveWindow.Selection as EnvDTE.TextSelection;
if (ts == null)
return null;
return ts.ActivePoint.CodeElement[EnvDTE.vsCMElement.vsCMElementVariable]
as EnvDTE.CodeVariable;
}
void AddLine(EnvDTE.CodeFunction f, string text)
{
EnvDTE.TextPoint tp = f.GetStartPoint(EnvDTE.vsCMPart.vsCMPartBody);
EnvDTE.EditPoint p = tp.CreateEditPoint();
p.Insert(text + System.Environment.NewLine);
p.SmartFormat(tp);
}
EnvDTE80.DTE2 DTE;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)