You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中SendMessage提示无接收者报错,如何修复道具触发逻辑?

问题解决:SendMessage doubleSpeed has no receiver!

问题根源

报错本质是:你调用SendMessage("doubleSpeed")时,碰撞到的Player对象(或其碰撞体所在对象)上不存在可被调用的doubleSpeed方法,和SendMessageOptions.RequireReceiver无关——这个参数只是让报错更明确,不会解决方法不存在的问题。

解决方案

按以下步骤排查修复:

  1. 检查Player脚本的方法定义
    确保Player对象挂载的脚本里有大小写完全匹配、权限为public的doubleSpeed方法,示例:

    public class PlayerController : MonoBehaviour
    {
        // 方法名必须和你在Bonus的name字段里填的完全一致(大小写敏感)
        public void doubleSpeed()
        {
            // 这里实现加速逻辑,比如修改移动速度
            GetComponent<Rigidbody2D>().velocity *= 2f;
        }
    }
    
  2. 确认消息发送的目标对象正确
    如果Player的Collider是挂载在子物体上的,collision.SendMessage会把消息发给子物体,而子物体上没有对应方法。改成给Player根对象发消息:

    // 替换原SendMessage行
    collision.transform.root.SendMessage(name, null, SendMessageOptions.RequireReceiver);
    
  3. 替换为更安全的调用方式(推荐)
    用直接获取组件调用方法替代SendMessage,避免字符串匹配带来的错误,编译期就能发现问题:

    // 修改Bonus脚本的OnTriggerEnter2D方法
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.CompareTag("Player"))
        {
            PlayerController player = collision.GetComponentInParent<PlayerController>();
            if(player != null)
            {
                // 直接调用方法,无需依赖字符串
                player.doubleSpeed();
                Destroy(gameObject);
            }
        }
    }
    

内容的提问来源于stack exchange,提问作者pi126

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:25:24