c# - 尝试统一使用 Tilemap.GetTile 时出现 NullReferenceException 错误
问题描述
我设置了我的代码,以便在单击空格键时,控制台会打印出玩家所在的当前图块。但是,我得到了这个长错误。有人可以告诉我如何解决这个问题和/或为什么会这样吗?这是错误:
NullReferenceException UnityEngine.Tilemaps.Tilemap.GetTileAsset (UnityEngine.Vector3Int position) <0x3886fc90 + 0x0005a> in :0 UnityEngine.Tilemaps.Tilemap.GetTile (UnityEngine.Vector3Int position) (在 C:/buildslave/unity/build/Modules/Tilemap/ ScriptBindings/Tilemap.bindings.cs:113) Player.Dig () (在 Assets/Scripts/Player.cs:56) Player.Update () (在 Assets/Scripts/Player.cs:28)
我的代码是:
private void Dig()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Vector3Int playerPos = grid.WorldToCell(player.transform.position);
Tilemap tilemap = new Tilemap();
Debug.Log(tilemap.GetTile(playerPos));
}
}
该代码位于在更新中运行的方法中。
解决方案
Tilemap
是一个Component
并且永远不Component
应该使用! 这在 Unity 中是被禁止的。A只能附加到 a,例如使用或通过附加组件的预制件存在。new
Component
GameObject
AddComponent
Instantiate
然而,最好的方法是在编辑器中创建一个 Tilemap,然后直接使用它或将其存储为预制件。
然后你可以在一个字段中引用它,例如
public Tilemap tilemap;
推荐阅读
- vue.js - Vue jsx 事件处理程序
- filter - primefaces 6.1选择一个菜单已填充但拒绝显示值
- html - CSS 不会覆盖样式
- angular - Jasmine 的角度测试
- reactjs - Big React 日历日期格式
- r - 在 shinyapps.io 上部署打包的闪亮应用程序
- ruby-on-rails - 使用 Cloud Build 将 Ruby on Rails 应用部署到 App Engine
- php - PHP 变量的媒体查询
- c++ - C ++用fstream替换二进制文件中的数据
- android - 未应用使用注释的改造拦截器的 OkHttp 调用超时