我不知道发生了什么。我完全按照教程操作,但它仍然给我一个错误。
这个网站上没有其他指南帮助过我,我不知道我做错了什么
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();