c# - Unity:尝试调用事件时出错
问题描述
我想在播放器与另一个对象发生碰撞时触发一个事件,并在 EventManager 脚本中创建事件,在播放器脚本中引用它,订阅它的“onCollision”方法但是当我尝试在“OnCollisionEnter2D”中调用它时方法它给我一个错误,就像我需要订阅它一样,我不知道为什么。我怎样才能正确调用它?我查看了教程和文档,但我不明白我做错了什么..
错误: PlayerScript.cs(42,21):错误 CS0070:事件“EventManager.onCollisionDo”只能出现在 += 或 -= 的左侧(在“EventManager”类型中使用时除外)
事件管理器脚本:
using System.Collections.Generic;
using UnityEngine;
using System;
public class EventManager : MonoBehaviour
{
public event onCollisionDo_dlg onCollisionDo;
public delegate void onCollisionDo_dlg();
}
播放器脚本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class PlayerScript : MonoBehaviour
{
public float speed = 10;
private Rigidbody2D body;
private Vector2 Movement;
[SerializeField]
private GameObject EventManager_reference; // reference to the EventManager via inspector
private EventManager EventMS; // reference to the EventManager script
void Start()
{
body = GetComponent<Rigidbody2D>();
EventMS = EventManager_reference.GetComponent<EventManager>();
EventMS.onCollisionDo += onCollision;
}
void Update()
{
Movement = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
}
private void FixedUpdate()
{
body.MovePosition((Vector2)transform.position + (Movement * speed * Time.deltaTime));
}
private void onCollision() // Method to execute when event triggered
{
print("it collided");
}
private void OnCollisionEnter2D(Collision2D temp)
{
EventMS.onCollisionDo?.Invoke(); // Here is the problem
}
}
解决方案
问题背后的原因
该错误是由于在其所在的类之外调用事件而出现的。
更多信息:https ://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/event
潜在的解决方案
如果您希望能够在EventManager
类之外调用您的委托,请删除event
关键字或添加允许使用另一种方式调用事件的公共方法。
额外说明
在这种情况下,您可以使用内置的委托Action
而不是自定义委托。
推荐阅读
- javascript - 为什么方法中未定义对象数据?
- javascript - 来自外部文件的 JavaScript 调用函数给出 .is not a fuction 错误,我该如何解决?
- nativescript - 错误:在非 ES5 类上调用 getInternalNameOfClass():预期 RadListViewComponent 具有内部类声明
- json - 如何使用 jq 从 json 中输出所有键和值?
- python - 如何创建仍然将垃圾收集到范围之外的循环引用?
- kubernetes - 使用 Persistent Volume Claim 时是否必须显式创建 Persistent Volume?
- python - Python BeautifulSoup 循环遍历 div 和多个元素
- python-3.x - 列出 Python 多处理中丢失的值
- c# - 我正在尝试获得增值税和总计的最佳计算
- javascript - 如何访问复杂的 JSON 数组和对象数据?