学习《Unity2018入门与实战》中易出现的错误

本文记录了在使用Unity2021版本进行游戏开发时遇到的两个问题:一是创建UI文本时选择错误的Text类型导致运行报错,解决方案是选择'Legacy-Text';二是编写碰撞检测脚本时出现未使用的方法警告,解决方法是确保OnTriggerEnter2D方法在Update方法之外。这两个问题体现了不同Unity版本间的差异以及阅读源代码的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.执行第4章中4.6节创建切换UI的调度器的图List 4-3代码时,易报错:“NullReferenceException: Object reference not set to an instance of an object”(P147)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;  //使用UI组件时要先引入它

public class GameDirector : MonoBehaviour{
    GameObject car;
    GameObject flag;
    GameObject distance;  

    void Start(){
        this.car = GameObject.Find("car");  
        this.flag = GameObject.Find("flag");
        this.distance = GameObject.Find("Distance");
}


    void Update(){
        float length = this.flag.transform.position.x - this.car.transform.position.x;  
        this.distance.GetComponent<Text>().text = "距离目标" + length.ToString("F2") + "m";
}
}

List 4-3 "显示距离信息"的脚本  

如果在P142创建UI时使用的是书本给出的“Create-UI-Text”,则易选中“Text-TextMeshPro”项作为“Text”。但其实这样会使得挂载在Empty上的脚本运行游戏时报错。

选中"Text-TextMeshPro"进行创建

报错(末尾中cs:24显示错误在第24行代码中,笔者编写的第24行代码即上方的第20行代码)

 报错一般都以为是代码出错,但这里属于是版本不同导致的出错。应该选择“Legacy-text”进行创建。将创建后的“Text(Legacy)”命名为“Distance”后运行游戏就能显示出书本呈现的效果。

选择“Legacy-Text”进行创建

 UI运行成功

由于书中使用的是2018版本,我使用的是2021版本,所以以后可能会有别的冲突。我发现后就会在这记录下来。

2.执行第6章6.9节List6-6 使用Physics来实现碰撞检测的脚本时,有“声明了本地函数‘OnTriggerEnter2D’,但从未使用过”的黄色警告(通常是英文)弹出,且角色碰撞旗帜后不会显示“到达目的地”

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


......省略......

    //根据角色的移动速度调整动画的速度
    this.animator.speed=speedx/2.0f;
  }
  
  //到达目的地
  void OnTriggerEnter2D(Collider2D other){
    Debug.Log("到达目的地");
  }
}

List6-6 使用Physics来实现碰撞检测的脚本

出现这个警告时,检查OnTriggerEnter2D方法是否写在了Update方法之外(即在Update方法的{}之外)。使用新的方法应该另起一行进行书写。

我这里是没仔细看书上的代码,所以把OnTriggerEnter2D方法写在了Update方法之内,才出现了错误。(下次要仔细检查才行。。。)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值