[英]How do i fix my Unity 2D c# OnTriggerEnter2D delay?
你好,我的 Unity 2d 游戏的 Teleport 代码有一些问题
我也需要
other.transform.position = teleportTo.position;
而不是这个,这是玩家没有传送的部分吗?
transform.position = teleportTo.position;
完整代码
using System.Collections;
using System.Collections.Generic;
using UnityEditor.Experimental.GraphView;
using UnityEngine;
using UnityEngine.UI;
[RequireComponent(typeof(Collider2D))]
public class TeleportTrigger : MonoBehaviour
{
public enum TriggerType { Enter, Exit };
//The Transform to teleport to
[SerializeField] Transform teleportTo;
//The filter Tag
[SerializeField] string tag = "Player";
//Trigger Event to Teleport
[SerializeField] TriggerType type;
void OnTriggerEnter2D(Collider2D other)
{
Time.timeScale = 0f;
if (type != TriggerType.Enter)
{
return;
}
if (tag == string.Empty || other.CompareTag(tag))
{
//TP
StartCoroutine(Wait());
//all this \/ is not working there is no delay
/*other.transform.position = teleportTo.position;
Time.timeScale = 1f;
*/
}
}
private IEnumerator Wait()
{
yield return new WaitForSeconds(5);
transform.position = teleportTo.position;
Time.timeScale = 1f;
}
}```
设置后
Time.timeScale = 0;
这
yield return new WaitForSeconds (5);
永远不会完成,因为WaitForSeconds
取决于Time.timeScale
!
yield return new WaitForSecondsRealtime(5);
它忽略了时间尺度。
对于您的其他问题,您可以将所有必需的参数传递给协程
IEnumerator Wait(Transform targetTransform)
{
yield return new WaitForSecondsRealtime (5);
targetTransform.position = teleportTo.position;
Time.timeScale = 1f;
}
和
StartCorouine (Wait(other.transform));
你也确定
Time.timeScale = 0f;
即使您返回并且不触发传送,也应该始终发生吗?
我宁愿将其移动到协程中,因此只有在您知道之后您肯定会再次重置它时才应用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.