質問編集履歴

1 「New Game object」→「New Game Object」

funyao

funyao score 12

2018/05/22 18:30  投稿

prefabをInstantiateすると、想定のprefabと重複して謎のオブジェクトが生成される
【前提】
 自分はUnity学習の一環としてメダルプッシャーを作成しています。
 ゲームの一時中断・再開のために、盤面上のメダル個数・位置をセーブし、ロードできるようなスクリプトを望んでいます。現在はその前段階としてボタンにくっつけるだけの関数として記述しています。
 また、セーブ・ロード命令に「EasySave2」というアセットを導入しています。「ES2.~」というのが機能の呼び出しです。
  意図としては、メダルオブジェクトに「MEDALS」というタグをつけており、これを保存する命令が「BStag」。「BLtag」ではこれを読み込んで、foreach文でそれぞれのTransformをゲットし、その位置・傾きでprefabを生成させています。(Insta=ゲーム内メダル)
これでセーブでシーンを一度終了した後、ロードでメダル状態を再生できるつもりでした。
【トラブル本題】
 これを二つのボタンにくっつけて動作させると、想定したメダルプレハブ(clone)がシーン上に生成されると同時に、メダルと同形状のメッシュコラインダーを持った、同数の透明な「New Game object」がセーブされた位置に生成されます。生成された瞬間に(clone)と「謎object」が衝突してか、(clone)が吹っ飛ぶのが実害として困ります。
 これを二つのボタンにくっつけて動作させると、想定したメダルプレハブ(clone)がシーン上に生成されると同時に、メダルと同形状のメッシュコラインダーを持った、同数の透明な「New Game Object」がセーブされた位置に生成されます。生成された瞬間に(clone)と「謎object」が衝突してか、(clone)が吹っ飛ぶのが実害として困ります。
 以下の記述で、なぜ同時に余分なオブジェクトが生成されるのかが知りたいです。
```
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EStagobjSLtest : MonoBehaviour {
   public GameObject Insta;
   public void BStag()
   {
       GameObject[] Smedals = GameObject.FindGameObjectsWithTag("MEDALS");
       ES2.Save(Smedals, "file.txt?tag=MEDALSTag");
   }
   public void BLtag()
   {
       GameObject[] Lmedals = ES2.LoadArray<GameObject>("file.txt?tag=MEDALSTag");
       foreach (GameObject onemedal in Lmedals)
       {
           Transform refTra = onemedal.GetComponent<Transform>();
           Instantiate(Insta, refTra.transform.position, refTra.transform.rotation);
       }
   }
}
```
 質問を投稿させていただいたのは、自分の知識の不確かな部分が複数にまたがっていたためです。
1.このアセットのセーブロード機能を習熟中
2.今回の記述作成で初めて、配列というものに触れた
3.上と同様、foreach文も初めて使った
4.今回の件で自分のInstantiateへの理解が正しいか自信がなくなった
5.そもそもトラブルの原因がこのスクリプト以外にあるのでは、という疑い
 原因が特定できず、質問を投稿させていただきました。
また、質問初心者でもありますので、今後のためにも「質問の仕方でココが悪い」という点でもご指摘いただければ幸いです。
  • C#

    16390 questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    12098 questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

  • Unity3D

    3907 questions

    Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る