统一 2D:"An object reference is required for the non-static field, method, or property 'ScreenShakeCo



我不知道发生了什么。我完全按照教程操作,但它仍然给我一个错误。

这个网站上没有其他指南帮助过我,我不知道我做错了什么

using System.Collections.Generic;
using UnityEngine;
public class ScreenShakeController : MonoBehaviour
{
private float shakeTimeRemaining, shakePower;
public static void Miss()
{
StartShake(0.25f, 1f);
}
private void LateUpdate()
{
if(shakeTimeRemaining > 0)
{
shakeTimeRemaining -= Time.deltaTime;
float xAmount = Random.Range(-1f, 1f) * shakePower;
float yAmount = Random.Range(-1f, 1f) * shakePower;
transform.position  += new Vector3(xAmount, yAmount, 0f);
}
}
public void StartShake(float length, float power)
{
shakeTimeRemaining = length;
shakePower = power;
}
}

您在这里的意图尚不清楚,但这里对static关键字在这里的作用进行了解释。

这里的问题是,你的Miss方法是静态的,但你试图在其中调用一个非静态方法。如果你想让它像你写的那样工作,你可能必须将所有的方法和变量声明为静态。

像这样:

private static float shakeTimeRemaining, shakePower;
private static void LateUpdate()
public static void StartShake(float length, float power)

然后,您可以实际使用类名和方法来调用代码,而不必实例化一个新对象,比如:

ScreenShakeController.Miss();

这是因为你;使用static修饰符声明一个静态成员,该成员属于类型本身,而不是特定对象";。这意味着您没有保存当前值的对象的特定实例。相反,这些值和函数是类本身的一部分(对象的蓝图,而不是对象的实际实例化副本(。

目前的编写方式是,您需要创建一个ScreenShakeController的新实例才能使用它的大部分内容,还必须将Miss方法恢复为public void Miss()

所以你需要调用var exampleController = new ScreenShakeController();,然后你可以使用该类中的方法,比如:

exampleController.Miss();

相关内容

  • 没有找到相关文章

最新更新