Unity only calls this function when ModelImporter.importCameras is true. This function gives you control over camera properties and animations during the model import process. The CameraDescription structure contains all the camera data from the imported file. You can use it to populate the camera, its GameObject, and animation clips.
// 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;
}
}