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方法之内,才出现了错误。(下次要仔细检查才行。。。)