インベントリシステムが作成されましたが、インスタンス化されたプレハブに問題があります。基本的に、ユーザーには冒頭に2つのアイテム(item1 & item2)が与えられます。もし彼らが望むのであれば、余分なアイテム(1日目のアイテム2を買うことができる)を買うことができますが、アイテムを置くことができるエリアには制限があります(4)。エリア内のアイテムが4以上になると、インスタンス化されたプレハブ以外のすべてのアイテムがスロットに返され、空のgameObjectに送信されます。Unity2D:インベントリシステム - インスタンス化されたプレハブが元のオブジェクトの前に現れる
私の問題:私はその後、アイテムをドラッグした後、ダウンアイテム2(オリジナル及びインスタンス化プレハブ)のうちの2つを配置した後、返送されるダウンのすべての項目を項目1の3つダウン配置よう
は言います2を領域にドラッグしようとすると、項目1(元のobj)をその領域にドラッグしようとすると、オリジナルのobjではなくインスタンス化されたprefabがドラッグされて表示され、元のobjのサイズが変更され、
public void InstaniateItem() {
GameObject item = (GameObject)Instantiate (ItemPrefab);
item.transform.position = transform.position;
item.transform.parent = transform;
item.SetActive (true);
if (slot.childCount < 0) {
slotHolder.SetActive (false);
}
}
追加情報:インスタンス化されたプレハブのための
private Vector3 screenPoint;
private Vector3 offset;
public Transform item1, item2;
public GameObject otherItems,otherItems2
void Awake() {
item1 = GameObject.FindWithTag ("item1").transform;
item2 = GameObject.FindWithTag ("item2").transform;
}
void OnMouseDrag()
{
//if (canDrag == true) {
Vector3 curScreenPoint = new Vector3 (Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
screenPoint.z = 10;
Vector3 curPosition = Camera.main.ScreenToWorldPoint (curScreenPoint); // + offset
transform.position = curPosition;
//}
}
void Update()
{
//1
if (Input.GetMouseButtonUp (0)) {
if (!GameObject.Find ("Aera Floor").GetComponent<SlotController>().item1Placed) {
item1.localPosition = Vector3.zero;
rend1.sortingOrder = 1;
//otherItems.SetActive (false);
} else if (GameObject.Find ("Aera Floor").GetComponent<SlotController>().item1Placed) {
screenPoint = Camera.main.WorldToScreenPoint (gameObject.transform.position);
rend1.sortingOrder = -1;
otherItems.SetActive (true);
//canDrag = false;
}
}
//2
if (Input.GetMouseButtonUp (0)) {
if (!GameObject.Find ("Aera Floor").GetComponent<SlotController>().item2Placed) {
item2.localPosition = Vector3.zero;
rend2.sortingOrder = 1;
//otherItems2.SetActive (false);
} else if (GameObject.Find ("Aera Floor").GetComponent<SlotController>().item2Placed) {
screenPoint = Camera.main.WorldToScreenPoint (gameObject.transform.position);
rend2.sortingOrder = -1;
otherItems2.SetActive (true);
//slotHolder.SetActive (true);
//canDrag = false;
}
}
if (GameObject.Find ("Aera Floor").GetComponent<SlotController>().item1Placed) {
if (GameObject.Find ("Aera Floor").GetComponent<SlotController>().item2Placed) {
slotHolder.SetActive (true);
}
if (GameObject.Find ("Aera Floor").GetComponent<SlotController>().item2Placed) {
if (GameObject.Find ("Aera Floor").GetComponent<SlotController>().item1Placed) {
slotHolder.SetActive (true);
}
}
スクリプト:
マイスクリプト
- プレハブのすべては、元のアイテムと同じタグを持っています。
いただきありがとうございます:)
ありがとうございました、あなたのスクリプトは動作しました!!!!!!私は少しそれを変更する必要があったが、全体的に私はあなたの助けなしにそれを行うことができませんでした!ありがとうございました!!!! –
喜んで:) – naturalbornlazy