Imは、モジュール式の宇宙船に取り組んでいます。船にはハードポイントがあり、モジュールを保持しており、モジュールなどを保持することができます。インスタンス化されたゲームオブジェクトは、プレハブのように機能します。
この時点でのハードポイントのコードは非常に単純です。
public class Hardpoint : MonoBehaviour {
public GameObject holds; //this holds the prefab
public ComponentObject.Type[] canHold;
private GameObject heldInstance; //this holds an instance of the prefab
public void SpawnComponent() {
Clear();
heldInstance = Instantiate(holds, transform.position, transform.rotation) as GameObject;
heldInstance.transform.SetParent(transform);
}
public void RollThroughDecompression(CompressedComponent c) {
heldInstance.GetComponent<ComponentObject>().Decompress(c);
}
public void Clear() {
foreach (Transform child in transform)
{
Destroy(child.gameObject);
}
}
}
しかし、それはすべてプレハブのように動作します。私は取得していますエラーメッセージがあるため:
Destroying assets is not permitted to avoid data loss. If you really want to remove an asset use DestroyImmediate (theObject, true);
と
Setting the parent of a transform which resides in a prefab is disabled to prevent data corruption.
私は完全にこの時点で迷ってしまいました。誰も正しい方向に私はこれらのエラーがポップアップを維持する理由について私を指摘できますか?
編集: いくつかのスクリーンショット。
期待される結果:
実際の結果:それはすべてEmptyHardpoint
で始まる
。あなたが見ることができるように、コックピットをスポーンし、EmptyHardpoint
を親として設定します。しかし、それが楽しみが終わる場所です。さらにGameobjects
はあたかもプレハブであるかのように扱われます。
伸長コード:
public void Decompress(CompressedComponent c) {
componentType = (Type)Enum.Parse(typeof(Type), c.componentType);
componentNumber = c.componentNumber;
UpdateHardPoints();
GameObject[] typeRepository = GetRepository(componentType);
//update children
int point = 0;
foreach (Transform child in typeRepository[componentNumber].transform)
{
Hardpoint hardpoint = child.GetComponent<Hardpoint>();
if (hardpoint != null) {
Debug.Log("Hardpoint found in " + child.transform.parent.name);
if (c.hardpoints[point] != null) {
//get the hardpoint's repository
GameObject[] hardpointRepo = GetRepository((Type)Enum.Parse(typeof(Type), c.hardpoints[point].componentType));
//set the hardpoint to hold this object
hardpoint.holds = hardpointRepo[c.hardpoints[point].componentNumber];
hardpoint.SpawnComponent();
hardpoint.RollThroughDecompression(c.hardpoints[point]);
point++;
}
}
}
}
CompressedComponent
は単にモジュラーオブジェクトの種類を保持しています。シーン内のリポジトリからロードされたものです(私はそれが面倒だと知っています、後で解決します)。
これらのエラーにつながる船のシーン階層のスクリーンショットを表示できますか?これらのエラーは 'Clear()'を呼び出すときにだけスローされますか? – Serlite
'Hardpoint'を'インスタンス化 'しましたか? –
@ Serlite 'Clear()'は最初のエラーメッセージだけをスローします。親を設定するときに2番目のエラーメッセージが表示されます。 @CùĐứcHiếu私は本当に正直であるか分からない。私はネットワーキングを使用していますが、プレーヤーとして、私は動きを制御するために、追加のスクリプトで 'hardpoint'を使用しています。 –