我創建了一個可以工作的庫存系統,但是我在實例化預製時遇到了問題。基本上,用戶在開始時被賦予兩個項目(項目1 &項目2)如果他們希望他們可以購買額外的物品(讓物品2放置),但物品可放置的區域有限制(4)。如果區域內的物品達到4以上,除了實例化的預製物品之外,所有物品都會發回到他們的位置,它們會被髮送到一個空的gameObject。Unity2D:庫存系統 - 出現在原始對象前面的實例化預製
我的問題:
說喜歡我放置在兩個項目2(原件及預製實例化)的下降,然後被放下三項1下來的所有項目將被送回,然後拖動項目之後2進入該區域,當我繼續嘗試將項目1(原始obj)拖到該區域時,它似乎拖動實例化的預製件而不是原始obj,從而使原始obj更改尺寸並更改圖層中的順序。
我的腳本:
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);
}
}
的腳本實例化的組合屋:
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);
}
}
額外的信息:
- 組合屋的所有具有相同的標籤,原來的項目。
謝謝:)
謝謝你,你的腳本工作!!!!!!我不得不修改它,但總體而言,如果沒有你的幫助,我無法做到這一點!謝謝!!!! –
很高興幫助:) – naturalbornlazy