Unity游戏开发:碰撞检测代码报CS1519等错误求助
问题修复与解释
先看修正后的完整代码:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class collision_detect : MonoBehaviour { [SerializeField] private bool battlemode = false; void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.name == "enemy_temp") { battlemode = true; } } }
错误原因与修复细节:
方法声明后误用分号
原代码中void OnCollisionEnter2D(Collision2D collision);末尾的分号,让这行变成了仅声明方法而不写实现,导致后续if语句直接暴露在类的作用域中。C#不允许在类的直接作用域内写执行语句(如if、赋值操作),只能定义成员(变量、方法、属性等)。去掉分号,将if语句包裹在方法的大括号内即可。字符串比较用了赋值运算符
=
原代码里collision.gameObject.name = "enemy_temp"使用了赋值运算符=,但实际需要的是相等判断,应该用比较运算符==。=在这里会被编译器错误解析,引发CS8124和CS1519的语法错误。变量与属性标签位置错误
原代码把[SerializeField]和bool battlemode = false;放在了类的外部,不符合C#语法——类的成员必须定义在类的大括号内部。同时[SerializeField]是Unity的属性标签,必须直接放在要标记的变量上方,才能让Unity编辑器将私有变量显示在Inspector面板中(建议给变量加上private修饰符,遵循封装原则)。
内容的提问来源于stack exchange,提问作者Poyraz efe
相关产品推荐
相关产品推荐

