提问人:Michael Atorn WAT 提问时间:7/8/2023 更新时间:7/8/2023 访问量:23
通过 Start 中的方法访问另一个添加的组件内部的添加组件会导致 NullReferenceException
Accessing added component, inside of another added component through a method at Start causes NullReferenceException
问:
我重命名了类并简化了这篇文章的内容。
点击开始后,level2 和 spriteRenderer 在检查器中都可见,但在调用 fill 方法时似乎没有加载 spriteRenderer。检查后,在 Level2 的 Start() 中在 AddComponent 之后使用时为 false,但在 fill() 中调用时为 true。Debug.Log(spriteRenderer==null);
一级班:
class Level1:MonoBehaviour{
Level2 level2;
void Start(){
level2 = this.AddComponent<Level2>();
level2.enabled = true;
level2.fill(Color.red); //nullReference
}
}
二级班:
class Level2:MonoBehaviour{
SpriteRenderer spriteRenderer;
void Start(){
spriteRenderer = this.AddComponent<SpriteRenderer>();
spriteRenderer.enabled = true;
//spriteRenderer!=null
}
public void fill(Color color){
Texture2D texture = new Texture2D(16, 16);
texture.filterMode = FilterMode.Point;
for (int y = 0; y < 16; y++)
{
for (int x = 0; x < 16; x++)
{
texture.SetPixel(x, y, color);
}
}
texture.Apply();
Rect rect = new Rect(new Vector2(0.0f, 0.0f), new Vector2(16, 16));
//spriteRenderer==null
spriteRenderer.sprite = Sprite.Create(texture, rect, Vector2.zero, 8);//nullReference
}
}
尝试通过同一类中的另一个方法访问生成的 spriteRenderer,该 spriteRenderer 添加到 MonoBehaviour-Class 中。MonoBehaviour 类在 Start 时被添加到另一个 MonoBehaviour 类中,之后也会调用 fill-Method。Start()
答: 暂无答案
评论
spriteRenderer
fill()
Start()
Level2
Awake()
Start()
Level2
spriteRenderer
fill()