73 lines
2.8 KiB
C#
73 lines
2.8 KiB
C#
using UnityEngine;
|
|
using System;
|
|
|
|
namespace Beyond
|
|
{
|
|
[Serializable]
|
|
public class TeleportObject
|
|
{
|
|
[Tooltip("If custompossition is null and teleport is selected, the player is teleported to the camera position.")]
|
|
public bool useTeleport;
|
|
public GameObject playerObject;
|
|
public Transform targetPosition;
|
|
[Tooltip("Sets y rotation from camera to player, or if set, use customPosition rotation Y.")]
|
|
public bool useCameraRotation;
|
|
public bool detectGround;
|
|
public LayerMask ground = 1;
|
|
|
|
|
|
/// <summary>
|
|
/// Teleport object do customPosition transform when targetPosition is null other wise teleport to customPosition.
|
|
/// </summary>
|
|
/// <param name="customPosition"></param>
|
|
public void Teleport(Transform customPosition = null)
|
|
{
|
|
if (useTeleport && playerObject != null)
|
|
{
|
|
Vector3 teleportPosition = Vector3.zero;
|
|
Quaternion teleportRotation = Quaternion.identity;
|
|
float groundLevel = playerObject.transform.position.y;
|
|
|
|
if (customPosition && targetPosition == null)
|
|
{
|
|
teleportPosition = customPosition.position;
|
|
teleportRotation = customPosition.rotation;
|
|
groundLevel = customPosition.position.y;
|
|
}
|
|
else if (targetPosition != null)
|
|
{
|
|
teleportPosition = targetPosition.transform.position;
|
|
teleportRotation = targetPosition.transform.rotation;
|
|
groundLevel = targetPosition.position.y;
|
|
}
|
|
|
|
if (detectGround)
|
|
{
|
|
Ray ray = new Ray(teleportPosition + Vector3.up, Vector3.down);
|
|
if (Physics.Raycast(ray, out RaycastHit hit, float.MaxValue, ground, QueryTriggerInteraction.Ignore))
|
|
{
|
|
groundLevel = hit.point.y;
|
|
}
|
|
}
|
|
|
|
playerObject.transform.position = new Vector3(teleportPosition.x, groundLevel, teleportPosition.z);
|
|
var rb = playerObject.GetComponent<Rigidbody>();
|
|
if (rb)
|
|
{
|
|
rb.position = playerObject.transform.position;
|
|
rb.velocity = Vector3.zero;
|
|
}
|
|
//rotate player
|
|
if (useCameraRotation)
|
|
{
|
|
//cameraRotationStart = cameraRotationEnd;
|
|
var playerRotation = playerObject.transform.rotation;
|
|
playerRotation.y = teleportRotation.y;
|
|
playerObject.transform.rotation = playerRotation;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|