#c# #unity3d
#c# #unity3d
Вопрос:
Я пытаюсь создать экземпляр a Prefab
, а затем сделать Panel
его родительским. но это выдает мне эту ошибку:
Setting the parent of a transform which resides in a Prefab Asset is disabled to prevent data corruption (GameObject: 'TargetIcon').
UnityEngine.Transform:SetParent(Transform)
Как я могу избавиться от этой ошибки?
Вот подробности:
У меня есть панель на холсте, которая служит миникартой. У меня есть сборный элемент для создания экземпляра, и панель должна быть создана как родительская для этого сборного элемента. этот код прикреплен к моей панели:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class MapObject {
public Image icon {get; set;}
public GameObject owner { get; set; }
}
public class MiniMapController : MonoBehaviour
{
public Transform playerPos;
public Camera mapCamera;
public static List<MapObject> mapObjects = new List<MapObject>();
public static void RegisterMapObject(GameObject o, Image i)
{
Image image = Instantiate(i);
mapObjects.Add(new MapObject() { owner = o, icon = i });
}
void Start()
{
}
// Update is called once per frame
void Update()
{
DrawMapIcons();
}
void DrawMapIcons()
{
foreach(MapObject mo in mapObjects)
{
Vector3 screenPos = mapCamera.WorldToViewportPoint(mo.owner.transform.position);
mo.icon.transform.SetParent(this.transform);
screenPos.z = 0;
mo.icon.transform.position = screenPos;
}
}
}
и затем этот код используется для создания mapobject:
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class MakeMapObject : MonoBehaviour
{
[SerializeField]
public Image image;
void Start()
{
MiniMapController.RegisterMapObject(this.gameObject, image);
}
// Update is called once per frame
void Update()
{
}
}
Я не знаю, почему это выдает мне ошибку?
Ответ №1:
Вероятно, здесь ваша ошибка:
public static void RegisterMapObject(GameObject o, Image i)
{
Image image = Instantiate(i);
mapObjects.Add(new MapObject() { owner = o, icon = i });
}
Вы создаете экземпляр изображения, но затем передаете сборный элемент своему MapObject
.
Попробуйте выполнить:
mapObjects.Add(new MapObject() { owner = o, icon = image });