【问题标题】:Protection Level making a variable Inaccessible保护级别使变量不可访问
【发布时间】:2017-10-13 05:50:33
【问题描述】:

我正在尝试使用 Unity 和 C# 来制作第一人称游戏。使用我自己创建的脚本之一,我试图从股票“FirstPersonController”中访问运行速度和步行速度变量。

我已将所需变量更改为 Public,我什至可以在属性检查器窗口中看到它们,但我自己的脚本无法访问它们,出现以下错误:

1) 无法访问变量 Run 和 Walk 速度。

Assets/PlayerVitals.cs(134,30): error CS0122: `UnityStandardAssets.Characters.FirstPerson.FirstPersonController.m_RunSpeed' is inaccessible due to its protection level

2) 无法访问我添加到 FirstPersonController 的变量,声称它不存在(即使它显示在 Unity Property Inspector - 屏幕截图中)

Assets/PlayerVitals.cs(134,60): error CS1061: Type `UnityStandardAssets.Characters.FirstPerson.FirstPersonController' does not contain a definition for `m_NormRunSpeed' and no extension method `m_NormRunSpeed' of type `UnityStandardAssets.Characters.FirstPerson.FirstPersonController' could be found. Are you missing an assembly reference?

以下是两个代码的相关部分:

FirstPersonController.cs:

namespace UnityStandardAssets.Characters.FirstPerson
{
    [RequireComponent(typeof (CharacterController))]
    [RequireComponent(typeof (AudioSource))]
    public class FirstPersonController : MonoBehaviour
    {
        [SerializeField] private bool m_IsWalking;
        [SerializeField] public float m_WalkSpeed;
        [SerializeField] public float m_RunSpeed;
        [SerializeField] public float m_NormRunSpeed;

PlayerVitals.cs:

using UnityStandardAssets.Characters.FirstPerson;

public class PlayerVitals : MonoBehaviour {
public FirstPersonController playerController;
playerController = GetComponent<FirstPersonController>();
.
.
currentSpeed = playerController.m_RunSpeed;

【问题讨论】:

  • 我猜您在项目中以某种方式引用了包含这些类的程序集的错误版本(旧版本?发布版本?等等)。我会检查路径。此外,通常我会使用自动实现的属性来处理此类内容。
  • 还想到:我之前必须重新启动 Visual Studio 才能出现这样的编译器错误。有时它只是需要它。
  • 我的想法也是错误的版本......但我怎么能检查呢?我从assets文件夹直接把它拖到游戏区,然后就在那里开始编辑。在层次结构视图中双击它只会将我链接回同一个脚本。我还可以在 Unity 本身的脚本预览中看到公共更改。我还多次重新启动了 Unity、Visual Studio 和我的 PC :(
  • 也许尝试删除所有已编译的对象并强制它重建所有内容?基本上每个binobj 文件夹
  • 您是否尝试过清理库?关闭Unity,删除你项目中的Library目录,然后重新打开Unity让它重建。

标签: c# unity3d unity5


【解决方案1】:

发现错误。我制作了 FirstPersonController 的备份副本,甚至将其重命名,但不知何故它导致了这个问题(即使它完全位于不同的目录中)。删除它解决了这个问题!

【讨论】:

  • 如果它还在 assets 文件夹中,Unity 仍然会看到并编译它。更改文件名无效,因为它仍然具有相同的 类标识符。
  • 我明白了,我从来没有想过。谢谢!
猜你喜欢
  • 2019-10-27
  • 2015-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-30
  • 2019-12-02
  • 1970-01-01
相关资源
最近更新 更多