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
相关产品推荐
相关产品推荐

