gpt4 book ai didi

c# - 2D Portal 有时只能在 Unity 中工作

转载 作者:行者123 更新时间:2023-12-02 08:30:27 26 4
gpt4 key购买 nike

我正在尝试在 Unity 中制作一个 2D 门户,它不仅仅是将玩家传送到另一个门户游戏对象。但在通过传送门后保持玩家的位置和移动方向和速度。

我并不是一个艺术家,但例如: enter image description here玩家是一个在某个区域弹跳的球,当他穿过传送门时,他的速度保持不变,同时他进入了传送门的中心。

例如这里: enter image description here如果玩家进入传送门的下半部分,他就会从传送门的下半部分出来。

当它起作用时,效果非常好!然而,它只有 50% 的时间有效,这 50% 的时间可能会出现一堆不同的问题,有时球不会传送。有时,球会击中第一个传送门,传送到第二个传送门,然后返回第一个传送门,如此反复进行下去。它似乎随机遇到这些问题。

这是我的脚本:

public GameObject otherPortal;
public PortalController otherPortalScript;
private BallController ballController;
public float waitTime = 0.5f;

[HideInInspector]
public bool teleporting;

// Use this for initialization
void Start ()
{

}

// Update is called once per frame
void Update ()
{

}

void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.tag == "Ball")
{
ballController = other.GetComponent<BallController>();
if(!teleporting)
{
var offset = other.transform.position - transform.position;
offset.x = 0;
other.transform.position = otherPortal.transform.position + offset;
otherPortalScript.teleporting = true;
teleporting = true;
StartCoroutine("Teleport");
}
}
}

void OnTriggerExit2D(Collider2D other)
{
if (other.gameObject.tag == "Ball")
{
teleporting = false;
otherPortalScript.teleporting = false;
}

}

IEnumerator Teleport()
{
yield return new WaitForSeconds(waitTime);
teleporting = false;
otherPortalScript.teleporting = false;
ballController.teleporting = false;
}
}

该脚本附加到两个门户,它们都是同一对象的预制件。我在编辑器中设置了“otherPortal”、“otherPortalScript”和“waitTime”。 “waitTime 是我所拥有的”,为了解决我遇到的另一个问题,有时“传送”从未设置为 false,我相信该问题的原因与此问题的原因相同,使得“waitTime “只是解决更大问题的绷带。此外,每当 Portal 脚本更改“ballController”中的变量(例如“ballController.teleporting = false;”)时,它的存在只是因为球在计分系统中添加/删除分数,它根本不会影响球的运动.

最佳答案

考虑去掉 teleporting门户和球的属性(property)以及 waitTime .

现在给球一个 List<PortalController> inUseControllers (注意您需要添加 using System.Collections.Generic )。每当它碰撞进入一个传送门时,通过inUseControllers.Count == 0检查列表是否为空。 ,如果是,则添加涉及的两个 PortalController到该列表并处理传送运动。当球碰撞-退出时PortalController ,将其从 inUseControllers 中删除列表;因此,只有当球离开每个传送门区域时,它才会再次被清空。

这种方法应该简化代码,同时安全地防止意外的来回循环。

关于c# - 2D Portal 有时只能在 Unity 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60567591/

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