Unity 2017.4.0f1中PlayerCollision代码报CS0619错误求助
解决Unity 2017中CS0619过时API错误及碰撞检测问题
嘿,我来帮你搞定这个碰撞检测的问题!你的代码里有几个小错误,导致了过时API警告和功能失效,我一步步给你修正:
问题分析
- 回调函数参数类型错误:
OnCollisionEnter是Unity内置的碰撞回调函数,它的参数必须是Collision类型,而不是你写的PlayerCollision——这会导致碰撞事件根本无法正确触发。 - 过时的
GetComponent重载:你用的GetComponent<Collider>("obstacle")是已经被废弃的API,Unity 2017里会报CS0619警告,而且这个写法本身语法也不完整(少了闭合括号)。 - 碰撞判断逻辑不规范:直接通过组件查找判断障碍物不是最佳实践,用**标签(Tag)**来区分对象更高效可靠。
修正后的代码
using UnityEngine; public class PlayerCollision : MonoBehaviour { public PlayerMovement movement; // 修正参数类型为Collision void OnCollisionEnter(Collision collisionInfo) { // 使用Unity推荐的CompareTag方法检查对象标签 if (collisionInfo.gameObject.CompareTag("obstacle")) { Debug.Log("We hit an obstacle!"); // 可选:碰撞后禁用玩家移动(如果你的PlayerMovement脚本有enabled属性的话) // movement.enabled = false; } } }
额外步骤(必须做!)
在Unity编辑器里给你的障碍物对象设置标签:
- 选中场景中的障碍物对象
- 在Inspector面板顶部的
Tag下拉菜单中,选择obstacle(如果没有这个标签,点击Add Tag...创建它)
这样修改后,不仅能消除过时API的警告,碰撞检测的逻辑也能正常工作啦!
内容的提问来源于stack exchange,提问作者user9561301
相关产品推荐
相关产品推荐

