如果我的代码中没有“静态”,为啥会出现错误 CS0120?
Posted
技术标签:
【中文标题】如果我的代码中没有“静态”,为啥会出现错误 CS0120?【英文标题】:Why am I getting error CS0120 if I have no "static" in my code?如果我的代码中没有“静态”,为什么会出现错误 CS0120? 【发布时间】:2021-01-02 04:45:16 【问题描述】:我正在制作 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);
HP 代码:
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
的实例,但你在类而不是实例上调用healthPoints.TakeDamage()
错误告诉你需要做什么;由于TakeDamage
方法不是static
,您需要使用对healthPoints
类的引用才能调用它(您在hp
中拥有)。
【参考方案1】:
这段代码sn-p的问题是,你必须使用实例化对象hp
,而不是类healthPoints
来调用非静态方法TakeDamage()
:
if(hp != null)
// Here is where I get the error
hp.TakeDamage(damage);
只有类的静态方法才能被访问,而无需先实例化类的对象。
【讨论】:
以上是关于如果我的代码中没有“静态”,为啥会出现错误 CS0120?的主要内容,如果未能解决你的问题,请参考以下文章
将静态图像添加到 php 邮件系统时,为啥会出现“意外 CID”错误?
为啥会出现错误:“InternalCompilerError:请求的静态内存负载超过 32 个字节”?
为啥我的类没有 NSManagedObject 属性时会出现错误?
当我想在 C++ Builder Starter 中链接静态库 TinyXML 2 的发布版本时,为啥会出现未解决的外部错误?