質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

2回答

15786閲覧

unity Destoryメソッドでのエラー

asdfghjk

総合スコア15

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2018/05/05 12:16

編集2018/05/05 12:19

Instantiateで生成したオブジェクトAを他スクリプトから破壊しようとしています
すると以下のようなエラーが出てしまいました

Destroying assets is not permitted to avoid data loss.
If you really want to remove an asset use DestroyImmediate (theObject, true);

リンク内容
そこで調べ↑のように変えてみたのが以下のコードです

●オブジェクトA生成&破壊メソッド呼び出し

using UnityEngine; using System.Collections; using System.Collections.Generic; public class aaa : MonoBehaviour { public GameObject A1; public void Create() { GameObject A= Instantiate(A1, new Vector3(transform.position.x, 0.01f, transform.position.z + 1), Quaternion.identity) as GameObject; } } void Update() { if (Input.GetMouseButtonDown(0)) { A1.GetComponent<B>().destroy();      }   }

●破壊するオブジェクトにアタッチ    

using System.Collections; using System.Collections.Generic; using UnityEngine; public class B: MonoBehaviour { public void destroy() { Destroy(gameObject); }

しかしこれでもvisualstudio側のエラーはないのですが、Unityでの上記のエラーがまだ出ています

この時どのような間違いが考えられますか?
またどのようにすれば解決できますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

今回のエラーの原因かは分かりませんが、

C#

1 public GameObject A1;

このA1はプレハブですよね?
もしそうであれば、

C#

1 A1.GetComponent<B>().destroy();

上記は、プレハブであるA1をDestroy()しようとしていることになるので、正常に動作しないと思われます。
よって、

C#

1 GameObject A= 2 Instantiate(A1, new Vector3(transform.position.x, 0.01f, transform.position.z + 1), Quaternion.identity) as GameObject;

このAをメンバー変数に格納しておき、それをDestroy()するのが正しいと思います。

投稿2018/05/05 12:25

fiveHundred

総合スコア9796

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

asdfghjk

2018/05/05 12:48

fiveHundred様へ 回答ありがとうございます それで試してみたのですが、 エラー CS0103 現在のコンテキストにAという名前は存在しません。 とでてきてしまいました
asdfghjk

2018/05/05 13:13 編集

fiveHundred様へ そのやり方+GameObjectAとA!両方定義したところvisualstudio内エラーはなくなりましたがやはりUnity側で同じエラーが出てしまいました
fiveHundred

2018/05/05 13:21

念のためですが、 GameObject A= Instantiate(A1, new Vector3(transform.position.x, 0.01f, transform.position.z + 1), Quaternion.identity) as GameObject; 上記は A = Instantiate(A1, new Vector3(transform.position.x, 0.01f, transform.position.z + 1), Quaternion.identity) as GameObject; にしましたでしょうか?
asdfghjk

2018/05/05 13:27

してませんでした! そしてしたらできました! ありがとうございます とても助かりました
guest

0

シンプルにするなら、クラス aaa の左クリック時の処理をこのようにすれば良いかと思います。この場合、クラス B に書かれている destroy() メソッドは不要です。

C#

1if (Input.GetMouseButtonDown(0)) 2{ 3 Destroy(A1); 4

投稿2018/05/05 12:27

negitama

総合スコア943

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

negitama

2018/05/05 12:30

失礼、A1はプレハブですね。fiveHundred さんの回答を参照してください。
asdfghjk

2018/05/05 13:20

いえいえ 回答しようとしてくださりありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問