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

Unity运行Player.cs代码出现NullReferenceException空引用报错求助

问题原因

你遇到的NullReferenceException错误由boxCollider变量未成功赋值导致,具体有两处需要修正:

  • Unity内置的生命周期初始化方法为首字母大写的Start(),你代码中写的小写start()不会被引擎自动调用,因此boxCollider = GetComponent<BoxCollider2D>();的赋值逻辑从未执行,boxCollider一直是空值,在FixedUpdate中访问boxCollider.size时就触发了空引用。
  • 修正方法名后,请确认挂载Player脚本的游戏对象上已经添加了BoxCollider2D组件,否则GetComponent<BoxCollider2D>()也会返回空值。

修复后代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
    private BoxCollider2D boxCollider;
    private Vector3 moveDelta;
    private RaycastHit2D hit;

    private void Start()
    {
        boxCollider = GetComponent<BoxCollider2D>();
    }

    private void FixedUpdate()
    {
        float x = Input.GetAxisRaw("Horizontal");
        float y = Input.GetAxisRaw("Vertical");

        moveDelta = new Vector3(x,y,0);

        if (moveDelta.x > 0)
            transform.localScale = Vector3.one;
        else if (moveDelta.x < 0)
            transform.localScale = new Vector3(-1, 1, 1);

        hit = Physics2D.BoxCast(transform.position, boxCollider.size, 0, new Vector2(0,moveDelta.y), Mathf.Abs(moveDelta.y * Time.deltaTime), LayerMask.GetMask("Blocking","Actor"));
        if(hit.collider == null)
        {
           transform.Translate(0, moveDelta.y * Time.deltaTime, 0);
        }

        hit = Physics2D.BoxCast(transform.position, boxCollider.size, 0, new Vector2(moveDelta.x,0), Mathf.Abs(moveDelta.x * Time.deltaTime), LayerMask.GetMask("Blocking","Actor"));
        if(hit.collider == null)
        {
           transform.Translate(moveDelta.x * Time.deltaTime, 0, 0);
        }

    }
}

内容的提问来源于stack exchange,提问作者Niks Rodžers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:42:02