【问题标题】:An Object reference is required to access non-static member C# Unity - How do I fix? [duplicate]访问非静态成员 C# Unity 需要对象引用 - 如何修复? [复制]
【发布时间】:2015-04-26 05:28:16
【问题描述】:

我不断收到以下错误

Assets/Zoning.cs(12,30):错误 CS0120:对象引用为 需要访问非静态成员 `PlayerController.AddFuel(float)'

void OnTriggerEnter2D(Collider2D collider)
{
    if (collider.tag == "Player")
    {
        Debug.Log("Player is Re-Fueling");
        PlayerController.AddFuel(1);
    }

【问题讨论】:

  • 你需要创建一个新的播放器控制器(或者使用你已经创建的)var pc = new PlayerController(); pc.AddFuel(1);
  • 如果 PlayerController 是您在同一个游戏对象上的脚本,那么您可能需要调用 GetComponent() 来获取实际实例。
  • Linked duplicate 包含对错误的很好解释(我假设您在研究问题时已经找到了一些)。我建议您在阅读链接问题后使用仍然不清楚的问题来更新您的问题,以便重新打开帖子。

标签: c# unity3d


【解决方案1】:

您必须创建该类的实例才能访问其中的函数。

 PlayerController obj = new PlayerController();
 void OnTriggerEnter2D(Collider2D collider) {
     if (collider.tag == "Player")
     {
         Debug.Log("Player is Re-Fueling"); 
         obj.AddFuel(1);
     }

【讨论】:

  • 我在另一个脚本上为这个玩家提供了燃料,这种方法使我创建了一个全新的燃料变量。有没有办法从原来的 PlayerController 获取燃料?
  • 在这种情况下你可以移动 PlayerController obj = new PlayerController();在方法 void OnTriggerEnter2D(Collider2D collider) 之上。我已经编辑了我的答案。
  • @DanielBell 将该对象作为参数传递给此函数
猜你喜欢
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
相关资源
最近更新 更多