Skip to content

Commit a51c0e8

Browse files
committed
added helper functions for checking if an array is valid
1 parent d0cccbe commit a51c0e8

File tree

1 file changed

+36
-7
lines changed

1 file changed

+36
-7
lines changed

Assets/FbxExporters/Editor/FbxExporter.cs

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ void ExportComponentAttributes (MeshInfo mesh, FbxMesh fbxMesh, int[] unmergedTr
174174
// Set the normals on Layer 0.
175175
FbxLayer fbxLayer = GetOrCreateLayer(fbxMesh);
176176

177-
if (mesh.Normals != null && mesh.Normals.Length > 0 && mesh.Normals.Length == unmergedTriangles.Length) {
177+
if (mesh.HasValidNormals(unmergedTriangles.Length)) {
178178
using (var fbxLayerElement = FbxLayerElementNormal.Create (fbxMesh, "Normals")) {
179179
fbxLayerElement.SetMappingMode (FbxLayerElement.EMappingMode.eByPolygonVertex);
180180
fbxLayerElement.SetReferenceMode (FbxLayerElement.EReferenceMode.eDirect);
@@ -192,7 +192,7 @@ void ExportComponentAttributes (MeshInfo mesh, FbxMesh fbxMesh, int[] unmergedTr
192192
}
193193

194194
/// Set the binormals on Layer 0.
195-
if (mesh.Binormals != null && mesh.Binormals.Length > 0 && mesh.Binormals.Length == unmergedTriangles.Length) {
195+
if (mesh.HasValidBinormals(unmergedTriangles.Length)) {
196196
using (var fbxLayerElement = FbxLayerElementBinormal.Create (fbxMesh, "Binormals")) {
197197
fbxLayerElement.SetMappingMode (FbxLayerElement.EMappingMode.eByPolygonVertex);
198198
fbxLayerElement.SetReferenceMode (FbxLayerElement.EReferenceMode.eDirect);
@@ -209,7 +209,7 @@ void ExportComponentAttributes (MeshInfo mesh, FbxMesh fbxMesh, int[] unmergedTr
209209
}
210210

211211
/// Set the tangents on Layer 0.
212-
if (mesh.Tangents != null && mesh.Tangents.Length > 0 && mesh.Tangents.Length == unmergedTriangles.Length) {
212+
if (mesh.HasValidTangents(unmergedTriangles.Length)) {
213213
using (var fbxLayerElement = FbxLayerElementTangent.Create (fbxMesh, "Tangents")) {
214214
fbxLayerElement.SetMappingMode (FbxLayerElement.EMappingMode.eByPolygonVertex);
215215
fbxLayerElement.SetReferenceMode (FbxLayerElement.EReferenceMode.eDirect);
@@ -232,7 +232,7 @@ mesh.Tangents [unityTriangle] [2]
232232

233233
ExportUVs (fbxMesh, mesh, unmergedTriangles);
234234

235-
if (mesh.VertexColors != null && mesh.VertexColors.Length > 0) {
235+
if (mesh.HasValidVertexColors(unmergedTriangles.Length)) {
236236
using (var fbxLayerElement = FbxLayerElementVertexColor.Create (fbxMesh, "VertexColors")) {
237237
fbxLayerElement.SetMappingMode (FbxLayerElement.EMappingMode.eByPolygonVertex);
238238
fbxLayerElement.SetReferenceMode (FbxLayerElement.EReferenceMode.eIndexToDirect);
@@ -1262,9 +1262,8 @@ public Vector3 [] Binormals {
12621262
var normals = Normals;
12631263
var tangents = Tangents;
12641264

1265-
if (normals != null && normals.Length > 0 &&
1266-
tangents != null && tangents.Length > 0 &&
1267-
normals.Length == tangents.Length
1265+
if (IsValidArray<Vector3>(normals) &&
1266+
IsValidArray<Vector4>(tangents, normals.Length)
12681267
) {
12691268
m_Binormals = new Vector3 [normals.Length];
12701269

@@ -1345,6 +1344,36 @@ public MeshInfo (Mesh mesh, Material[] materials)
13451344
}
13461345
}
13471346
}
1347+
1348+
/// <summary>
1349+
/// Determines whether this instance is a valid array with the specified length.
1350+
/// </summary>
1351+
/// <returns><c>true</c> if this instance is valid array; otherwise, <c>false</c>.</returns>
1352+
/// <param name="array">Array.</param>
1353+
/// <param name="expectedLength">Expected length.</param>
1354+
/// <typeparam name="T">The 1st type parameter.</typeparam>
1355+
public static bool IsValidArray<T>(T[] array, int expectedLength = -1)
1356+
{
1357+
return array != null &&
1358+
array.Length > 0 &&
1359+
(expectedLength >= 0 ? array.Length == expectedLength : true);
1360+
}
1361+
1362+
public bool HasValidNormals(int expectedLength){
1363+
return IsValidArray<Vector3> (Normals, expectedLength);
1364+
}
1365+
1366+
public bool HasValidBinormals(int expectedLength){
1367+
return IsValidArray<Vector3> (Binormals, expectedLength);
1368+
}
1369+
1370+
public bool HasValidTangents(int expectedLength){
1371+
return IsValidArray<Vector4> (Tangents, expectedLength);
1372+
}
1373+
1374+
public bool HasValidVertexColors(int expectedLength){
1375+
return IsValidArray<Color32> (VertexColors, expectedLength);
1376+
}
13481377
}
13491378

13501379
/// <summary>

0 commit comments

Comments
 (0)