【前提】
自分はUnity学習の一環としてメダルプッシャーを作成しています。
ゲームの一時中断・再開のために、盤面上のメダル個数・位置をセーブし、ロードできるようなスクリプトを望んでいます。現在はその前段階としてボタンにくっつけるだけの関数として記述しています。
また、セーブ・ロード命令に「EasySave2」というアセットを導入しています。「ES2.~」というのが機能の呼び出しです。
意図としては、メダルオブジェクトに「MEDALS」というタグをつけており、これを保存する命令が「BStag」。「BLtag」ではこれを読み込んで、foreach文でそれぞれのTransformをゲットし、その位置・傾きでprefabを生成させています。(Insta=ゲーム内メダル)
これでセーブでシーンを一度終了した後、ロードでメダル状態を再生できるつもりでした。
【トラブル本題】
これを二つのボタンにくっつけて動作させると、想定したメダルプレハブ(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.そもそもトラブルの原因がこのスクリプト以外にあるのでは、という疑い
原因が特定できず、質問を投稿させていただきました。
また、質問初心者でもありますので、今後のためにも「質問の仕方でココが悪い」という点でもご指摘いただければ幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/23 08:38