Unity:尝试调用事件时出错
Posted
技术标签:
【中文标题】Unity:尝试调用事件时出错【英文标题】:Unity: error when trying to invoke an event 【发布时间】:2021-09-10 16:10:41 【问题描述】:我想在播放器与另一个对象发生碰撞时触发一个事件,并在 EventManager 脚本中创建事件,在播放器脚本中引用它,订阅它的“onCollision”方法但是当我尝试在“OnCollisionEnter2D”方法给我一个错误,就像我需要订阅它一样,我不知道为什么。我怎样才能正确调用它?我查看了教程和文档,但我不明白我做错了什么..
错误: PlayerScript.cs(42,21):错误 CS0070:事件“EventManager.onCollisionDo”只能出现在左侧+= 或 -= (除非在类型“EventManager”中使用)
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
【问题讨论】:
【参考方案1】:问题背后的原因
由于在事件所在的类之外调用事件而出现错误。 更多信息:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/event
可能的解决方案
如果您希望能够在 EventManager
类之外调用您的委托,请删除 event
关键字或添加允许使用其他方式调用事件的公共方法。
补充说明
在这种情况下,您可以使用名为 Action
的内置委托,而不是制作自定义委托。
【讨论】:
谢谢老哥,解决了。非常感谢以上是关于Unity:尝试调用事件时出错的主要内容,如果未能解决你的问题,请参考以下文章