首页 > 解决方案 > Assets\Footsteps.cs(5,20): 错误 CS0116: 命名空间不能直接包含字段或方法等成员

问题描述

针对我在为 Unity 创建足迹脚本时遇到的问题寻求帮助。我从一些关于如何设置脚步声的手册/指南中粘贴了这段代码(在 C# 中),但是当我保存它并返回 Unity 时,会发生错误,如下所示:

Assets\Footsteps.cs(5,20): 错误 CS0116: 命名空间不能直接包含字段或方法等成员

这是代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public AudioClip[] footstepClips;
public AudioSource audioSource;

public float footstepThreshold;
public float footstepRate;
private float lastFootstepTime;

public CharacterController controller;

void Update ()
{
    if(controller.velocity.magnitude > footstepThreshold)
    {
        if(Time.time - lastFootstepTime > footstepRate)
        {
            lastFootstepTime = Time.time;
            audioSource.PlayOneShot(footstepClips[Random.Range(0, footstepClips.Length)]);
        }
    }
}

另外,我认为我从编码学位网站获得的代码已经过时了。此外,如果这个线程中有任何语法错误是因为我在夜间犯了这个错误,如果你认为这是一个错误,我很抱歉。

标签: c#unity3dnamespaces

解决方案


您的代码不包含在类中。当您统一创建 C# 脚本时,它会自动具有类声明,以便您将代码与启动和更新函数一起放入。

您需要public class Footstep : MonoBehaviour { 在 using 语句下方和第一个变量声明上方添加该行。不要忘记在文件末尾添加一个右花括号}

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;

    public class Footstep : MonoBehaviour {
    
       public AudioClip[] footstepClips;
       public AudioSource audioSource;
    
       public float footstepThreshold;
       public float footstepRate;
       private float lastFootstepTime;
    
       public CharacterController controller;
    
       void Update ()
       {
           if(controller.velocity.magnitude > footstepThreshold)
           {
               if(Time.time - lastFootstepTime > footstepRate)
               {
                   lastFootstepTime = Time.time;
                   audioSource.PlayOneShot(footstepClips[Random.Range(0, footstepClips.Length)]);
               }
           }
       }
   }

推荐阅读