【发布时间】: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 :(
-
也许尝试删除所有已编译的对象并强制它重建所有内容?基本上每个
bin和obj文件夹 -
您是否尝试过清理库?关闭Unity,删除你项目中的
Library目录,然后重新打开Unity让它重建。