【发布时间】:2017-07-26 20:14:21
【问题描述】:
我正在尝试使用重新创建门户场景 this 视频。场景资产和脚本的链接在视频下方。
我正面临一个传送问题:
玩家应该穿过传送门中的平面触发器,以移动到第二个传送门的位置。但在我看来,在传送之后,他出现在第二个传送门的平面触发器中间。如果他继续移动,他会跳回第一个传送门,然后再跳到第二个传送门,以此类推。
为什么会发生,如何解决?据我了解脚本的作者,它应该在通过触发器后传送玩家,但脚本对我来说不是那样的。
这是传送的脚本:
using UnityEngine;
using System.Collections;
public class Sender : MonoBehaviour {
public GameObject player;
public GameObject receiver;
private float prevDot = 0;
private bool playerOverlapping = false;
void Start () {
}
void Update()
{
if (playerOverlapping) {
var currentDot = Vector3.Dot(transform.up, player.transform.position - transform.position);
if (currentDot < 10) // only transport the player once he's moved across plane
{
// transport him to the equivalent position in the other portal
float rotDiff = -Quaternion.Angle(transform.rotation, receiver.transform.rotation);
rotDiff += 180;
player.transform.Rotate(Vector3.up, rotDiff);
Vector3 positionOffset = player.transform.position - transform.position;
positionOffset = Quaternion.Euler(0, rotDiff, 0) * positionOffset;
var newPosition = receiver.transform.position + positionOffset;
player.transform.position = newPosition;
playerOverlapping = false;
}
prevDot = currentDot;
}
}
void OnTriggerEnter(Collider other)
{
if (other.tag == "Player")
{
playerOverlapping = true;
}
}
void OnTriggerExit(Collider other)
{
if (other.tag == "Player")
{
playerOverlapping = false;
}
}
}
【问题讨论】: