NG_/Assets/Scripts/3D/开放实验室/EnterLab.cs
2024-12-13 19:40:05 +08:00

83 lines
2.6 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 进入实验室的脚本
public class EnterLab : MonoBehaviour
{
public Transform targetPosition; // 目标位置
public Transform targetRotation; // 目标旋转(或直接指定一个 Quaternion
public GameObject targetObject; // 目标对象(如果有)
public Camera camera; // 相机
public GameObject labUI; // 实验室UI
public GameObject systemUI; // 系统UI
public GameObject labCeiling; // 实验室天花板
public List<GameObject> hiddenObjectParents; // 实验室物体
public float cameraSize = 60f;
private float moveSpeed = 6.0f; // 移动速度
private float rotationSpeed = 3.0f; // 旋转速度
private bool isMoving = false;
public void OnMouseDown()
{
if (CameraMove.isStaticMove)
{
return;
}
print("点击了相机");
labCeiling.SetActive(true);
systemUI.SetActive(false);
camera.orthographicSize = cameraSize;
// 隐藏两边UI
foreach (GameObject obj in hiddenObjectParents)
{
foreach (Transform child in obj.transform)
{
child.gameObject.SetActive(false);
}
}
MoveToTarget();
}
public void MoveToTarget()
{
isMoving = true;
CameraMove.isStaticMove = true;
camera.orthographic = false;
camera.fieldOfView = cameraSize;
}
void Update()
{
if (isMoving)
{
// 平滑移动
camera.transform.position = Vector3.Lerp(camera.transform.position, targetPosition.position, moveSpeed * Time.deltaTime);
// 平滑旋转
camera.transform.rotation = Quaternion.Slerp(camera.transform.rotation, targetRotation.rotation, rotationSpeed * Time.deltaTime);
// 检查是否接近目标位置和旋转
if (Vector3.Distance(camera.transform.position, targetPosition.position) < 0.1f &&
Quaternion.Angle(camera.transform.rotation, targetRotation.rotation) < 0.1f)
{
camera.transform.position = targetPosition.position;
camera.transform.rotation = targetRotation.rotation;
isMoving = false;
CameraMove.isStaticMove = false;
labUI.SetActive(true);
if (targetObject!= null)
{
}
}
}
}
}