C# 为什么Visual Studio要重写对GetComponent的成员取消引用<&燃气轮机;()?

C# 为什么Visual Studio要重写对GetComponent的成员取消引用<&燃气轮机;()?,c#,visual-studio,unity3d,C#,Visual Studio,Unity3d,我试图让程序检测玩家正在碰撞的特定物品的标签 我的代码是 using UnityEngine; public class PlayerCollision : MonoBehaviour { void OnCollisionEnter(PlayerCollision collisionInfo) { if (collisionInfo.collider.tag == "ground") { print(&

我试图让程序检测玩家正在碰撞的特定物品的
标签

我的代码是

using UnityEngine;

public class PlayerCollision : MonoBehaviour
{
    void OnCollisionEnter(PlayerCollision collisionInfo)
    {
        if (collisionInfo.collider.tag == "ground")
        {
            print("You hit the ground");
        }
    }
}
VisualStudio不断变化

if (collisionInfo.collider.tag == "ground"

if(collisionInfo.GetComponent().tag==“ground”)
我的问题是,我如何让程序检测玩家与什么发生碰撞


为什么Visual Studio不断更改我的代码?

如果使用
void OnCollisionEnter(Collision col)
,那么您可以执行
If(col.gameObject.CompareTag(“ground”)
您的类型
PlayerCollision
从哪个继承,从哪个最终继承

这里有一个过时/现在已弃用的属性,该属性声明

CS0619“Component.collider”已过时:“属性collider已被弃用。”。改为使用GetComponent()

您的VisualStudio似乎有一些设置,可以自动应用过时代码建议的更改。也许这甚至是由Visual Studio Tools for Unity本身完成的


但是,如果您使用了正确的签名,那么所有这些都不是问题:

它不是
OnCollisionCenter(PlayerCollision)

private void OnCollisionEnter (Collision collisionInfo)
{
    if(collisionInfo.collider.CompareTag("ground")
    {
        ...
    }
}

如果出于任何奇怪的原因,您不是指Unity内置消息,而是实际上想要一个带有签名的方法
OnCollisionCenter(PlayerCollision)
(这里似乎不是这样,只是为了完整性),那么您应该选择不同的名称或简单地使用

collisionInfo.gameObject.CompareTag("ground")
因为
碰撞
组件
都有一个属性
.gameObject
;),所以它甚至不会引起这个问题



通常,您应该更喜欢使用而不是直接使用字符串比较
=
<如果您传递了一个拼写错误/不存在的标记,而该标记只是默默地失败,从而使调试变得不必要地困难,那么code>CompareTag将抛出一个错误。

Visual Studio不会自行更改或重写代码(至少不是这样):您必须通过下拉菜单明确选择使用“代码修复”。您是否安装了任何VS扩展?您使用的是什么版本的VS?collisionInfo.collider的类型是什么?我在你发布的
class PlayerCollision
中没有看到它的定义(在
monobhavior
中也没有)@Dai这是我第一天使用unity和c#所以我不知道如何回答这个问题。你能帮我把它哑下来吗?你可以发布一个屏幕记录或视频,显示你输入c#代码,而VS在没有你要求的情况下更改代码吗?@Dai很抱歉,但现在代码本身没有更改,它给了我错误严重性代码描述项目文件行抑制状态错误
CS0619“Component.collider”已过时:“属性collider已被弃用。”。改用GetComponent()。(UnityUpgradable)'Assembly CSharp C:\Users\slayp\Desktop\Making unity stuff\New unity Project\Assets\Collision.cs 7 Active
collisionInfo.gameObject.CompareTag("ground")