Чтобы изменить сцену, вам нужно использовать это:
SceneManager.LoadScene(scenename);
Вот Документация LoadScene .
Если вам нужно также помочь с логикой, куда поместитьэто в вашем проекте - пожалуйста, добавьте свой код и некоторые дополнительные пояснения о том, что вы делаете, вместо ссылки на 22 минуты какого-то учебника.
Обновление:
Вот способ изменить сцену, когда все слоты заполнены:
public void OnDrop (PointerEventData eventData)
{
if(!item)
{
DragHandeler.itemBeingDragged.transform.SetParent (transform);
ExecuteEvents.ExecuteHierarchy<IHasChanged>(gameObject,null,(x,y) => x.HasChanged ());
// This code will check if all slots are full and load new scene if they are
// If you already have an array/list of all your slots, you can replace this "FindObjectsOfType" with it
Slot[] allSlots = FindObjectsOfType<Slot>();
bool areAllBackpackSlotsFull = true;
foreach (Slot slot in allSlots)
{
if (slot.isBackpack == true && slot.item == null)
{
areAllBackpackSlotsFull = false;
break;
}
}
if (areAllBackpackSlotsFull)
{
string nextSceneName = "YourScene"; // Place the name of scene you want to load next
UnityEngine.SceneManagement.SceneManager.LoadScene(nextSceneName);
}
}
}
Вы также спросили:
Я также хотел бы знать, есть лиспособ запретить пользователю бросать плитку в слот, в котором она уже есть?
Но я вижу, что она, кажется, уже реализована в вашем коде.Есть проверка, является ли текущий элемент нулевым в функции «OnDrop» Slot, это должно делать именно то, что вы хотите - размещать плитку, только если слот пуст.Так что это уже должно быть ограничено.Вы уверены, что это не так?
Обновление 2:
Обновление для вашего нового вопроса о рюкзаке и инвентаре.Вы можете просто добавить переменную bool в класс Slot, чтобы отличить рюкзак от инвентаря:
public class Slot : MonoBehaviour, IDropHandler
{
public bool isBackpack = false;
...
Затем в редакторе отметьте все слоты рюкзака для переменной isBackpack true.Это был бы простой и удобный способ их различения.
Также я обновил приведенный выше код (проверяет, заполнен ли рюкзак), поэтому теперь он будет проверять только слоты для рюкзаков.
Обновление 3:
Я заметил, что вы задали еще один вопрос в комментариях:
Был бы способ заблокировать плитку один разего вытащили из инвентаря и бросили в «рюкзак»?то есть, что они не могут переместить это снова?
Это очевидно не связано с оригинальным постом и вопросом, но хорошо, я попытаюсь помочь с этим также ...
Я думаю, что что-то вроде этого может достичь того, чего вы хотите (я изменил ваш код DragHandler):
public void OnBeginDrag (PointerEventData eventData)
{
Slot currentSlot = gameObject.GetComponentInParent<Slot>();
if (currentSlot.isBackpack == false)
{
itemBeingDragged = gameObject;
startPosition = transform.position;
startParent = transform.parent;
GetComponent<CanvasGroup>().blocksRaycasts = false;
}
else
{
itemBeingDragged = null;
}
}
#endregion
#region IDragHandler implementation
public void OnDrag (PointerEventData eventData)
{
if (itemBeingDragged != null)
transform.position = eventData.position;
}
#endregion
#region IEndDragHandler implementation
public void OnEndDrag (PointerEventData eventData)
{
if (itemBeingDragged != null)
{
itemBeingDragged = null;
GetComponent<CanvasGroup>().blocksRaycasts = true;
if(transform.parent == startParent)
transform.position = startPosition;
}
}
Надеюсь, это поможет.
PS Я уже помог вам с 5 разными вопросами.Пожалуйста, если у вас есть еще вопросы, не относящиеся к исходному сообщению, я бы предложил принять ответ, чтобы закрыть эту проблему, и задавать другие вопросы в отдельных сообщениях с новым обновленным кодом и информацией (и вы можете добавить ссылку на этопост в новых постах (вопросах)).Поскольку это просто неправильный способ использовать этот сайт, задавать новые не связанные вопросы в комментариях и постоянно обновлять вопрос и ответ, это просто неудобно.