AssetPostprocessor.OnPreprocessCameraDescription(CameraDescription,Camera, AnimationClip[])
Параметры
| Параметр | Описание |
|---|---|
| описание | CameraDescription, который описывает импортированные свойства камеры и анимации. |
| камера | Камера, созданная импортером моделей. |
| анимации | Клипы анимации, созданные импортером моделей. |
Описание
Добавьте эту функцию в подкласс, чтобы получать уведомление при импорте камеры из Импортера моделей.
Unity вызывает эту функцию только тогда, когда ModelImporter.importCameras является true. Эта функция позволяет вам управлять свойствами камеры и анимацией во время процесса импорта модели. Структура CameraDescription содержит все данные камеры из импортированного файла. Вы можете использовать ее для заполнения камеры, ее GameObject и анимационных клипов.
// The following code example shows how Unity uses this function to set up a perspective camera from an imported FBX file.
using System.Collections.Generic; using UnityEditor; using UnityEngine; using UnityEditor.AssetImporters;
public class SetupCameraFromCameraDescription : AssetPostprocessor { // Increment the version number, when the AssetPostprocessors code/behavior is changed static readonly uint k_Version = 0; public override uint GetVersion() { return k_Version; }
void OnPreprocessCameraDescription(CameraDescription description, Camera camera, AnimationClip[] clips) { var modelImporter = assetImporter as ModelImporter; var globalScale = modelImporter.globalScale;
description.TryGetProperty("NearPlane", out float nearPlane); description.TryGetProperty("FarPlane", out float farPlane); description.TryGetProperty("ApertureMode", out int apertureMode); description.TryGetProperty("FilmWidth", out float filmWidth); description.TryGetProperty("FilmHeight", out float filmHeight); description.TryGetProperty("FocalLength", out float focalLength);
if (nearPlane >= 0) camera.nearClipPlane = nearPlane * globalScale; if (farPlane >= 0) camera.farClipPlane = farPlane * globalScale;
float fov = 0; switch (apertureMode) { case 0: description.TryGetProperty("FieldOfViewY", out fov); camera.fieldOfView = fov; break; case 1: description.TryGetProperty("FieldOfView", out float alphaH); alphaH /= 2; float focal = (filmWidth * 25.4f) / 2 / Mathf.Tan(alphaH * Mathf.Deg2Rad); float alphaV = Mathf.Atan((filmHeight * 25.4f) / 2 / focal) * Mathf.Rad2Deg; camera.fieldOfView = alphaV * 2; break; case 2: description.TryGetProperty("FieldOfView", out fov); camera.fieldOfView = fov; break; case 3:
if (focalLength != .0f) { float apertureWidth = filmHeight * 25.4f; fov = Mathf.Atan((apertureWidth / focalLength) * 0.5f) * 2.0f * Mathf.Rad2Deg; } break; }
camera.fieldOfView = fov; } }