Unity开发Flappy Bird类游戏时CS7036错误求助
解决Unity CS7036错误:调用addScore方法缺少必填参数
问题场景
作为Unity新手,跟着教程制作Flappy Bird类游戏时,遇到CS7036编译错误:调用LogicScript的addScore方法时缺少必填参数scoreToAdd。Visual Studio无报错提示,但Unity编辑器持续抛出该错误。
相关脚本代码如下:
PipeMiddleScript
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PipeMiddleScript : MonoBehaviour { public LogicScript logic; void Start() { GameObject.FindGameObjectWithTag("Logic").GetComponent<LogicScript>(); } void Update() { } private void OnTriggerEnter2D(Collider2D collision) { logic.addScore(); } }
LogicScript
using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class LogicScript : MonoBehaviour { public int playerScore; public Text scoreText; [ContextMenu("Increase Score")] public void addScore(int scoreToAdd) { playerScore = playerScore + scoreToAdd; scoreText.text = playerScore.ToString(); } [ContextMenu("Decrease Score")] public void removeScore() { playerScore = playerScore - 1; scoreText.text = playerScore.ToString(); } }
错误原因
- 参数缺失:
LogicScript中的addScore方法定义了必填的int scoreToAdd参数,但PipeMiddleScript的OnTriggerEnter2D方法中调用logic.addScore()时未传入任何参数,触发CS7036错误。 - 组件未赋值:
PipeMiddleScript的Start方法中获取了LogicScript组件,但未将其赋值给public LogicScript logic变量,后续调用logic.addScore()会触发空引用异常(当前错误被参数错误掩盖)。
修复步骤
步骤1:补充调用参数
修改PipeMiddleScript的OnTriggerEnter2D方法,传入分数值(比如每次过管道加1分):
private void OnTriggerEnter2D(Collider2D collision) { logic.addScore(1); }
步骤2:修复组件赋值
修改PipeMiddleScript的Start方法,将获取到的组件赋值给logic变量:
void Start() { logic = GameObject.FindGameObjectWithTag("Logic").GetComponent<LogicScript>(); }
可选优化:添加默认参数
如果希望addScore方法支持无参数调用,可以给参数设置默认值,修改LogicScript中的方法定义:
[ContextMenu("Increase Score")] public void addScore(int scoreToAdd = 1) { playerScore = playerScore + scoreToAdd; scoreText.text = playerScore.ToString(); }
这样既保留了传入自定义分数的能力,也允许直接调用logic.addScore()使用默认值1。
内容的提问来源于stack exchange,提问作者vboy
相关产品推荐
相关产品推荐

