Unity中SendMessage调用chiliPepper提示无接收方报错排查
错误诱因
报错SendMessage chiliPepper has no receiver!的核心逻辑是:调用SendMessage时,在查找范围内没有匹配到名为chiliPepper的可执行方法,结合你的代码,90%的情况是以下原因导致:
- Inspector字段引用错误:ToutchPepper组件的
textBox字段没有正确赋值为挂载了NPCtext.cs的目标对象,常见情况包括拖错成其他场景对象、拖入了Project面板里的预制体而非场景实例、原textBox对象被删除后引用丢失、拖入的对象上的NPCtext脚本被移除。 - 不必要的SendMessage调用埋下隐患:你已经通过
GetComponent<NPCtext>()拿到了目标脚本的类型引用,完全不需要用SendMessage这种基于字符串反射的低效调用方式——字符串手滑拼错、方法名改了没同步改字符串、大小写不匹配,都会直接导致找不到方法。 - 目标对象状态异常:触发点击逻辑时,textBox游戏对象本身处于失活状态(
activeInHierarchy = false),这种状态下SendMessage无法遍历到对象上挂载的脚本方法。
解决方案
按优先级从高到低操作即可:
- 替换SendMessage为强类型直接调用(彻底规避字符串匹配问题,性能更好)
打开ToutchPepper.cs,找到Update方法里的点击判断逻辑,把原有SendMessage的代码替换为以下内容:void Update(){ Debug.Log(onObject+"pepper"); if(Input.GetMouseButtonDown(0)) { if(onObject){ NPCtext targetNpcText = textBox.GetComponent<NPCtext>(); if(targetNpcText != null) { targetNpcText.chiliPepper(); } } } } - 检查Inspector引用赋值
修改完代码保存回到Unity编辑器,选中场景中的Toutch对象,在Inspector面板找到ToutchPepper组件:- 确认
textBox字段拖入的是场景中实际挂载了NPCtext脚本的textBox实例,不要拖Project面板的预制体、不要拖错同名对象 - 确认
self字段正确拖入Toutch对象自身,避免Start方法的逻辑异常
- 确认
- 状态校验
运行时触发点击前,在Hierarchy面板确认textBox对象处于激活状态(对象名前面的勾选框是选中状态),如果有逻辑会主动禁用textBox对象,要在调用方法前先把对象设为激活。
内容的提问来源于stack exchange,提问作者jake is the coolest
相关产品推荐
相关产品推荐

