gpt4 book ai didi

c# - 如何在Unity中自动结束游戏?

转载 作者:行者123 更新时间:2023-12-03 05:28:33 25 4
gpt4 key购买 nike

我在YouTube上观看了一个教程(可以在link上找到),以显示如何在游戏中拖放项目。有没有人知道当所有磁贴都放置在可用插槽中后,如何修改代码以自动结束游戏或更改场景?我还想知道是否有任何方法可以限制用户将磁贴拖放到已经有磁贴的插槽上?
这是我已经拥有的所有源代码:

老虎机源代码

public class Slot : MonoBehaviour, IDropHandler {
public GameObject item {
get {
if(transform.childCount>0){
return transform.GetChild (0).gameObject;
}
return null;
}
}

#region IDropHandler implementation
public void OnDrop (PointerEventData eventData)
{
if(!item){
DragHandeler.itemBeingDragged.transform.SetParent (transform);
ExecuteEvents.ExecuteHierarchy<IHasChanged>(gameObject,null,(x,y) => x.HasChanged ());
}
}

DragHandler源代码:
public void OnBeginDrag (PointerEventData eventData)
{
itemBeingDragged = gameObject;
startPosition = transform.position;
startParent = transform.parent;
GetComponent<CanvasGroup>().blocksRaycasts = false;
}

#endregion

#region IDragHandler implementation

public void OnDrag (PointerEventData eventData)
{
transform.position = eventData.position;
}

#endregion

#region IEndDragHandler implementation

public void OnEndDrag (PointerEventData eventData)
{
itemBeingDragged = null;
GetComponent<CanvasGroup>().blocksRaycasts = true;
if(transform.parent == startParent){
transform.position = startPosition;
}
}

最佳答案

要更改场景,您需要使用以下命令:

SceneManager.LoadScene(scenename);

这是 LoadScene documentation

如果您还需要帮助您将逻辑放在项目中的逻辑位置-请添加您的代码和有关您所做工作的更多说明,而不是链接到一些教程的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);
}
}
}

您还问:

I'd also like to know if there's any way to restrict the user from dropping a tile onto a slot which has one on it already?



但是我看到它似乎已经在您的代码中实现了。在Slot的“OnDrop”功能中检查当前项是否为null,这应该完全按照您的要求进行-仅在slot为空时放置磁贴。因此,它已经受到限制。您确定不是吗?

更新2:

更新有关背包和库存的新问题。您只需在Slot类中添加一些bool变量即可将背包与广告资源区分开来:
public class Slot : MonoBehaviour, IDropHandler
{
public bool isBackpack = false;
...

然后在编辑器中的所有背包插槽中标记“isBackpack”变量为true。这将是区分它们的简单方便的方法。

另外,我还更新了上面的代码(检查背包是否装满),因此现在只检查背包插槽。

更新3:

我注意到您在评论中又问了一个问题:

Would there be a way to lock a tile once it has been dragged from the inventory and dropped to the 'backpack'? i.e. that they can't move it again?



显然这与原始帖子和问题无关,但是好吧,我也会尝试与此一起提供帮助...

我认为类似这样的东西可以实现您想要的(我已经更改了您的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;
}
}

希望能帮助到你。

P.S. 我已经帮助您解决了5个不同的问题。请,如果您还有其他与原始帖子无关的问题,我建议您接受答案以解决此问题,并在其他帖子中使用新的更新代码和信息询问其他问题(您可以在此添加链接)在新帖子中发布(问题))。因为这不是使用本网站的正确方法,而是在评论中提出新的不相关的问题并不断更新问题和答案,所以这很不方便。

关于c# - 如何在Unity中自动结束游戏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56689643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com