如果我的代码中没有 "static",为什么会出现错误 CS0120?
Why am I getting error CS0120 if I have no "static" in my code?
我正在制作一款 FPS 游戏,我正在为枪支尝试一些脚本,但 Unity 一直显示错误 CS0120,但问题是我没有使用任何“静态”或需要它的东西,至少我我觉得我没用。
主要代码:
{
public float damage = 10f;
public float range = 100f;
public Camera fpsCam;
void Update()
{
if (Input.GetKeyDown(KeyCode.Mouse0))
{
Shoot();
}
}
void Shoot()
{
RaycastHit hit;
if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range))
{
Debug.Log(hit.transform.name);
healthPoints hp = hit.transform.GetComponent<healthPoints>();
if(hp != null)
{
//Here is where I get the error
healthPoints.TakeDamage(damage);
}
}
}
}
惠普代码:
public class healthPoints : MonoBehaviour
{
public float health = 100f;
public void TakeDamage(float amount)
{
health -= amount;
if (health <= 0f)
{
Die();
}
}
void Die()
{
Destroy(gameObject);
}
}
“错误 CS0120 非静态字段、方法或 属性 需要对象引用 'healthPoints.TakeDamage(float)'”
此代码片段的问题在于,您必须使用实例化对象 hp
,而不是 class healthPoints
来调用 non-static 方法 TakeDamage()
:
if(hp != null)
{
// Here is where I get the error
hp.TakeDamage(damage);
}
只有 class 的静态方法可以在不首先实例化 class 的对象的情况下访问。
我正在制作一款 FPS 游戏,我正在为枪支尝试一些脚本,但 Unity 一直显示错误 CS0120,但问题是我没有使用任何“静态”或需要它的东西,至少我我觉得我没用。
主要代码:
{
public float damage = 10f;
public float range = 100f;
public Camera fpsCam;
void Update()
{
if (Input.GetKeyDown(KeyCode.Mouse0))
{
Shoot();
}
}
void Shoot()
{
RaycastHit hit;
if (Physics.Raycast(fpsCam.transform.position, fpsCam.transform.forward, out hit, range))
{
Debug.Log(hit.transform.name);
healthPoints hp = hit.transform.GetComponent<healthPoints>();
if(hp != null)
{
//Here is where I get the error
healthPoints.TakeDamage(damage);
}
}
}
}
惠普代码:
public class healthPoints : MonoBehaviour
{
public float health = 100f;
public void TakeDamage(float amount)
{
health -= amount;
if (health <= 0f)
{
Die();
}
}
void Die()
{
Destroy(gameObject);
}
}
“错误 CS0120 非静态字段、方法或 属性 需要对象引用 'healthPoints.TakeDamage(float)'”
此代码片段的问题在于,您必须使用实例化对象 hp
,而不是 class healthPoints
来调用 non-static 方法 TakeDamage()
:
if(hp != null)
{
// Here is where I get the error
hp.TakeDamage(damage);
}
只有 class 的静态方法可以在不首先实例化 class 的对象的情况下访问。