using System; using UnityEngine; namespace CharacterPreview { public class ModelMove:MonoBehaviour { private Camera _camera; public Camera currentCamera { get { if (!_camera) { _camera = Camera.main; if (!_camera) { _camera = FindObjectOfType(); } } return _camera; } } private void Start() { if (currentCamera) { var worldPos = CameraLocalToWorld(currentCamera, new Vector3(1, -1, 1)); transform.position = worldPos; } else { transform.position = new Vector3(8, 8, -16); } } /// /// 将摄像机局部坐标系中的点转换为世界坐标系中的点。 /// 假设摄像机局部坐标系:前向为 +Z,右为 +X,上为 +Y。 /// /// 目标摄像机 /// 在摄像机局部坐标系中的点 /// 对应的世界坐标 public static Vector3 CameraLocalToWorld(Camera camera, Vector3 localPoint) { if (camera == null) throw new System.ArgumentNullException(nameof(camera)); Transform camTransform = camera.transform; // 旋转局部点到世界方向,然后加上摄像机位置 return camTransform.position + camTransform.rotation * localPoint; } } }