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

被折叠的 条评论
为什么被折叠?



