ITS BROKEN

This commit is contained in:
Jan Racek
2026-03-29 16:14:30 +02:00
parent 61fbca17a7
commit 01b636f3e2
10 changed files with 114 additions and 127 deletions

View File

@@ -1,46 +1,87 @@
using UnityEngine; using UnityEngine;
using UnityEditor; using UnityEditor;
using SplashEdit.RuntimeCode; using SplashEdit.RuntimeCode;
using System.Linq;
namespace SplashEdit.EditorCode namespace SplashEdit.EditorCode
{ {
// --- Scene Preview Gizmos --- // --- Scene Preview Gizmos ---
// These draw filled rectangles in the Scene view for WYSIWYG UI preview. // A single canvas-level gizmo draws all children in hierarchy order
// so depth stacking is correct (last child in hierarchy renders on top).
public static class PSXUIGizmos public static class PSXUIGizmos
{ {
[DrawGizmo(GizmoType.NonSelected | GizmoType.Selected)] [DrawGizmo(GizmoType.NonSelected | GizmoType.Selected)]
static void DrawBoxGizmo(PSXUIBox box, GizmoType gizmoType) static void DrawCanvasGizmo(PSXCanvas canvas, GizmoType gizmoType)
{
RectTransform canvasRt = canvas.GetComponent<RectTransform>();
if (canvasRt == null) return;
bool canvasSelected = (gizmoType & GizmoType.Selected) != 0;
// Canvas border
Vector3[] canvasCorners = new Vector3[4];
canvasRt.GetWorldCorners(canvasCorners);
Color border = canvasSelected ? Color.yellow : new Color(1, 1, 0, 0.3f);
Handles.DrawSolidRectangleWithOutline(canvasCorners, Color.clear, border);
// Draw all children in hierarchy order (first child = back, last child = front)
var children = canvas.GetComponentsInChildren<Transform>(true).Reverse();
foreach (var child in children)
{
if (child == canvas.transform) continue;
bool childSelected = Selection.Contains(child.gameObject);
var box = child.GetComponent<PSXUIBox>();
if (box != null) { DrawBox(box, childSelected); continue; }
var image = child.GetComponent<PSXUIImage>();
if (image != null) { DrawImage(image, childSelected); continue; }
var text = child.GetComponent<PSXUIText>();
if (text != null) { DrawText(text, childSelected); continue; }
var bar = child.GetComponent<PSXUIProgressBar>();
if (bar != null) { DrawProgressBar(bar, childSelected); continue; }
}
// Canvas label when selected
if (canvasSelected)
{
Vector2 res = PSXCanvas.PSXResolution;
Vector3 topMid = (canvasCorners[1] + canvasCorners[2]) * 0.5f;
string label = $"PSX Canvas: {canvas.CanvasName} ({res.x}x{res.y})";
GUIStyle style = new GUIStyle(EditorStyles.boldLabel);
style.normal.textColor = Color.yellow;
Handles.Label(topMid, label, style);
}
}
static void DrawBox(PSXUIBox box, bool selected)
{ {
RectTransform rt = box.GetComponent<RectTransform>(); RectTransform rt = box.GetComponent<RectTransform>();
if (rt == null) return; if (rt == null) return;
Vector3[] corners = new Vector3[4]; Vector3[] corners = new Vector3[4];
rt.GetWorldCorners(corners); rt.GetWorldCorners(corners);
Color fill = box.BoxColor; Color fill = box.BoxColor;
fill.a = (gizmoType & GizmoType.Selected) != 0 ? 0.8f : 0.5f; fill.a = selected ? 1f : 0.9f;
Color border = Color.white; Color borderColor = selected ? Color.white : new Color(1, 1, 1, 0.5f);
border.a = (gizmoType & GizmoType.Selected) != 0 ? 1f : 0.4f; Handles.DrawSolidRectangleWithOutline(corners, fill, borderColor);
Handles.DrawSolidRectangleWithOutline(corners, fill, border);
} }
[DrawGizmo(GizmoType.NonSelected | GizmoType.Selected)] static void DrawImage(PSXUIImage image, bool selected)
static void DrawImageGizmo(PSXUIImage image, GizmoType gizmoType)
{ {
RectTransform rt = image.GetComponent<RectTransform>(); RectTransform rt = image.GetComponent<RectTransform>();
if (rt == null) return; if (rt == null) return;
Vector3[] corners = new Vector3[4]; Vector3[] corners = new Vector3[4];
rt.GetWorldCorners(corners); rt.GetWorldCorners(corners);
bool selected = (gizmoType & GizmoType.Selected) != 0;
// Draw texture preview if available
if (image.SourceTexture != null) if (image.SourceTexture != null)
{ {
Color tint = image.TintColor; Color tint = image.TintColor;
tint.a = selected ? 0.9f : 0.6f; tint.a = selected ? 1f : 0.9f;
Handles.DrawSolidRectangleWithOutline(corners, tint * 0.3f, tint); Handles.DrawSolidRectangleWithOutline(corners, tint * 0.3f, tint);
// Draw texture in GUI overlay
Handles.BeginGUI(); Handles.BeginGUI();
Vector2 min = HandleUtility.WorldToGUIPoint(corners[0]); Vector2 min = HandleUtility.WorldToGUIPoint(corners[0]);
Vector2 max = HandleUtility.WorldToGUIPoint(corners[2]); Vector2 max = HandleUtility.WorldToGUIPoint(corners[2]);
@@ -49,7 +90,7 @@ namespace SplashEdit.EditorCode
Mathf.Abs(max.x - min.x), Mathf.Abs(max.y - min.y)); Mathf.Abs(max.x - min.x), Mathf.Abs(max.y - min.y));
if (screenRect.width > 2 && screenRect.height > 2) if (screenRect.width > 2 && screenRect.height > 2)
{ {
GUI.color = new Color(tint.r, tint.g, tint.b, selected ? 0.9f : 0.5f); GUI.color = new Color(tint.r, tint.g, tint.b, selected ? 1f : 0.9f);
GUI.DrawTexture(screenRect, image.SourceTexture, ScaleMode.StretchToFill); GUI.DrawTexture(screenRect, image.SourceTexture, ScaleMode.StretchToFill);
GUI.color = Color.white; GUI.color = Color.white;
} }
@@ -57,27 +98,23 @@ namespace SplashEdit.EditorCode
} }
else else
{ {
Color fill = new Color(0.4f, 0.4f, 0.8f, selected ? 0.4f : 0.2f); Color fill = new Color(0.4f, 0.4f, 0.8f, selected ? 0.8f : 0.6f);
Handles.DrawSolidRectangleWithOutline(corners, fill, Color.cyan); Handles.DrawSolidRectangleWithOutline(corners, fill, Color.cyan);
} }
} }
[DrawGizmo(GizmoType.NonSelected | GizmoType.Selected)] static void DrawText(PSXUIText text, bool selected)
static void DrawTextGizmo(PSXUIText text, GizmoType gizmoType)
{ {
RectTransform rt = text.GetComponent<RectTransform>(); RectTransform rt = text.GetComponent<RectTransform>();
if (rt == null) return; if (rt == null) return;
Vector3[] corners = new Vector3[4]; Vector3[] corners = new Vector3[4];
rt.GetWorldCorners(corners); rt.GetWorldCorners(corners);
bool selected = (gizmoType & GizmoType.Selected) != 0; Color borderColor = text.TextColor;
Color border = text.TextColor; borderColor.a = selected ? 1f : 0.7f;
border.a = selected ? 1f : 0.5f; Color fill = new Color(0, 0, 0, selected ? 0.6f : 0.4f);
Color fill = new Color(0, 0, 0, selected ? 0.3f : 0.1f); Handles.DrawSolidRectangleWithOutline(corners, fill, borderColor);
Handles.DrawSolidRectangleWithOutline(corners, fill, border);
// Pixel-perfect preview: render each glyph from the actual font bitmap
// at PS1 scale, using advance widths for proportional positioning.
string label = string.IsNullOrEmpty(text.DefaultText) ? "[empty]" : text.DefaultText; string label = string.IsNullOrEmpty(text.DefaultText) ? "[empty]" : text.DefaultText;
PSXFontAsset font = text.GetEffectiveFont(); PSXFontAsset font = text.GetEffectiveFont();
@@ -98,18 +135,14 @@ namespace SplashEdit.EditorCode
float guiH = Mathf.Abs(botRight.y - topLeft.y); float guiH = Mathf.Abs(botRight.y - topLeft.y);
Color tintColor = text.TextColor; Color tintColor = text.TextColor;
tintColor.a = selected ? 1f : 0.7f; tintColor.a = selected ? 1f : 0.8f;
// If we have a font bitmap, render pixel-perfect from the texture
if (font != null && font.FontTexture != null && font.SourceFont != null) if (font != null && font.FontTexture != null && font.SourceFont != null)
{ {
Texture2D fontTex = font.FontTexture; Texture2D fontTex = font.FontTexture;
int glyphsPerRow = font.GlyphsPerRow; int glyphsPerRow = font.GlyphsPerRow;
int texH = font.TextureHeight;
float cellScreenW = glyphW * psxPixelScale;
float cellScreenH = glyphH * psxPixelScale; float cellScreenH = glyphH * psxPixelScale;
// Get advance widths for proportional positioning
float cursorX = guiX; float cursorX = guiX;
GUI.color = tintColor; GUI.color = tintColor;
foreach (char ch in label) foreach (char ch in label)
@@ -119,24 +152,19 @@ namespace SplashEdit.EditorCode
int col = charIdx % glyphsPerRow; int col = charIdx % glyphsPerRow;
int row = charIdx / glyphsPerRow; int row = charIdx / glyphsPerRow;
float advance = glyphW; // fallback float advance = glyphW;
if (font.AdvanceWidths != null && charIdx < font.AdvanceWidths.Length) if (font.AdvanceWidths != null && charIdx < font.AdvanceWidths.Length)
{
advance = font.AdvanceWidths[charIdx]; advance = font.AdvanceWidths[charIdx];
}
if (ch != ' ') if (ch != ' ')
{ {
// UV rect for this glyph in the font bitmap
float uvX = (float)(col * glyphW) / fontTex.width; float uvX = (float)(col * glyphW) / fontTex.width;
float uvY = 1f - (float)((row + 1) * glyphH) / fontTex.height; float uvY = 1f - (float)((row + 1) * glyphH) / fontTex.height;
float uvW = (float)glyphW / fontTex.width; float uvW = (float)glyphW / fontTex.width;
float uvH = (float)glyphH / fontTex.height; float uvH = (float)glyphH / fontTex.height;
// Draw at advance width, not cell width - matches PS1 proportional rendering
float spriteScreenW = advance * psxPixelScale; float spriteScreenW = advance * psxPixelScale;
Rect screenRect = new Rect(cursorX, guiY, spriteScreenW, cellScreenH); Rect screenRect = new Rect(cursorX, guiY, spriteScreenW, cellScreenH);
// UV: only show the portion of the cell that the advance covers
float uvWScaled = uvW * (advance / glyphW); float uvWScaled = uvW * (advance / glyphW);
Rect uvRect = new Rect(uvX, uvY, uvWScaled, uvH); Rect uvRect = new Rect(uvX, uvY, uvWScaled, uvH);
@@ -150,7 +178,6 @@ namespace SplashEdit.EditorCode
} }
else else
{ {
// Fallback: use Unity's text rendering for system font
int fSize = Mathf.Clamp(Mathf.RoundToInt(glyphH * psxPixelScale * 0.75f), 6, 72); int fSize = Mathf.Clamp(Mathf.RoundToInt(glyphH * psxPixelScale * 0.75f), 6, 72);
GUIStyle style = new GUIStyle(EditorStyles.label); GUIStyle style = new GUIStyle(EditorStyles.label);
style.normal.textColor = tintColor; style.normal.textColor = tintColor;
@@ -167,58 +194,30 @@ namespace SplashEdit.EditorCode
Handles.EndGUI(); Handles.EndGUI();
} }
[DrawGizmo(GizmoType.NonSelected | GizmoType.Selected)] static void DrawProgressBar(PSXUIProgressBar bar, bool selected)
static void DrawProgressBarGizmo(PSXUIProgressBar bar, GizmoType gizmoType)
{ {
RectTransform rt = bar.GetComponent<RectTransform>(); RectTransform rt = bar.GetComponent<RectTransform>();
if (rt == null) return; if (rt == null) return;
Vector3[] corners = new Vector3[4]; Vector3[] corners = new Vector3[4];
rt.GetWorldCorners(corners); rt.GetWorldCorners(corners);
bool selected = (gizmoType & GizmoType.Selected) != 0;
// Background
Color bgColor = bar.BackgroundColor; Color bgColor = bar.BackgroundColor;
bgColor.a = selected ? 0.8f : 0.5f; bgColor.a = selected ? 1f : 0.9f;
Handles.DrawSolidRectangleWithOutline(corners, bgColor, Color.white * (selected ? 1f : 0.4f)); Handles.DrawSolidRectangleWithOutline(corners, bgColor, selected ? Color.white : new Color(1, 1, 1, 0.5f));
// Fill portion
float t = bar.InitialValue / 100f; float t = bar.InitialValue / 100f;
if (t > 0.001f) if (t > 0.001f)
{ {
Vector3[] fillCorners = new Vector3[4]; Vector3[] fillCorners = new Vector3[4];
fillCorners[0] = corners[0]; // bottom-left fillCorners[0] = corners[0];
fillCorners[1] = corners[1]; // top-left fillCorners[1] = corners[1];
fillCorners[2] = Vector3.Lerp(corners[1], corners[2], t); // top-right (partial) fillCorners[2] = Vector3.Lerp(corners[1], corners[2], t);
fillCorners[3] = Vector3.Lerp(corners[0], corners[3], t); // bottom-right (partial) fillCorners[3] = Vector3.Lerp(corners[0], corners[3], t);
Color fillColor = bar.FillColor; Color fillColor = bar.FillColor;
fillColor.a = selected ? 0.9f : 0.6f; fillColor.a = selected ? 1f : 0.9f;
Handles.DrawSolidRectangleWithOutline(fillCorners, fillColor, Color.clear); Handles.DrawSolidRectangleWithOutline(fillCorners, fillColor, Color.clear);
} }
} }
[DrawGizmo(GizmoType.NonSelected | GizmoType.Selected)]
static void DrawCanvasGizmo(PSXCanvas canvas, GizmoType gizmoType)
{
RectTransform rt = canvas.GetComponent<RectTransform>();
if (rt == null) return;
Vector3[] corners = new Vector3[4];
rt.GetWorldCorners(corners);
bool selected = (gizmoType & GizmoType.Selected) != 0;
Color border = selected ? Color.yellow : new Color(1, 1, 0, 0.3f);
Handles.DrawSolidRectangleWithOutline(corners, Color.clear, border);
// Label
if (selected)
{
Vector2 res = PSXCanvas.PSXResolution;
Vector3 topMid = (corners[1] + corners[2]) * 0.5f;
string label = $"PSX Canvas: {canvas.CanvasName} ({res.x}x{res.y})";
GUIStyle style = new GUIStyle(EditorStyles.boldLabel);
style.normal.textColor = Color.yellow;
Handles.Label(topMid, label, style);
}
}
} }
/// <summary> /// <summary>
/// Custom inspector for PSXCanvas component. /// Custom inspector for PSXCanvas component.

View File

@@ -200,15 +200,16 @@ namespace SplashEdit.RuntimeCode
else Debug.LogWarning("No active Scene View."); else Debug.LogWarning("No active Scene View.");
} }
} }
else if (!isUITrack && (track.TrackType == PSXTrackType.ObjectPosition || track.TrackType == PSXTrackType.ObjectRotationY)) else if (!isUITrack && (track.TrackType == PSXTrackType.ObjectPosition || track.TrackType == PSXTrackType.ObjectRotation))
{ {
if (GUILayout.Button("From Sel.", GUILayout.Width(70))) // Capture from the named object in scene
if (!string.IsNullOrEmpty(track.ObjectName) && GUILayout.Button("From Object", GUILayout.Width(85)))
{ {
var sel = Selection.activeGameObject; var go = GameObject.Find(track.ObjectName);
if (sel != null) if (go != null)
kf.Value = track.TrackType == PSXTrackType.ObjectPosition kf.Value = track.TrackType == PSXTrackType.ObjectPosition
? sel.transform.position : new Vector3(0, sel.transform.eulerAngles.y, 0); ? go.transform.position : go.transform.eulerAngles;
else Debug.LogWarning("No GameObject selected."); else Debug.LogWarning($"Object '{track.ObjectName}' not found in scene.");
} }
} }
@@ -229,10 +230,10 @@ namespace SplashEdit.RuntimeCode
kf.Value = new Vector3(active ? 1f : 0f, 0, 0); kf.Value = new Vector3(active ? 1f : 0f, 0, 0);
break; break;
} }
case PSXTrackType.ObjectRotationY: case PSXTrackType.ObjectRotation:
case PSXTrackType.CameraRotation:
{ {
float yRot = EditorGUILayout.FloatField("Y\u00b0", kf.Value.y); kf.Value = EditorGUILayout.Vector3Field("Rotation\u00b0", kf.Value);
kf.Value = new Vector3(0, yRot, 0);
break; break;
} }
case PSXTrackType.UIProgress: case PSXTrackType.UIProgress:
@@ -297,19 +298,22 @@ namespace SplashEdit.RuntimeCode
track.Keyframes.Add(new PSXKeyframe { Frame = frame, Value = val }); track.Keyframes.Add(new PSXKeyframe { Frame = frame, Value = val });
} }
} }
else if (!isUITrack && (track.TrackType == PSXTrackType.ObjectPosition || track.TrackType == PSXTrackType.ObjectRotationY)) else if (!isUITrack && (track.TrackType == PSXTrackType.ObjectPosition || track.TrackType == PSXTrackType.ObjectRotation))
{ {
if (GUILayout.Button("+ from Selected", GUILayout.Width(120))) if (!string.IsNullOrEmpty(track.ObjectName))
{ {
var sel = Selection.activeGameObject; if (GUILayout.Button("+ from Object", GUILayout.Width(110)))
{
var go = GameObject.Find(track.ObjectName);
Vector3 val = Vector3.zero; Vector3 val = Vector3.zero;
if (sel != null) if (go != null)
val = track.TrackType == PSXTrackType.ObjectPosition val = track.TrackType == PSXTrackType.ObjectPosition
? sel.transform.position : new Vector3(0, sel.transform.eulerAngles.y, 0); ? go.transform.position : go.transform.eulerAngles;
int frame = track.Keyframes.Count > 0 ? track.Keyframes[track.Keyframes.Count - 1].Frame + 15 : 0; int frame = track.Keyframes.Count > 0 ? track.Keyframes[track.Keyframes.Count - 1].Frame + 15 : 0;
track.Keyframes.Add(new PSXKeyframe { Frame = frame, Value = val }); track.Keyframes.Add(new PSXKeyframe { Frame = frame, Value = val });
} }
} }
}
EditorGUILayout.EndHorizontal(); EditorGUILayout.EndHorizontal();
EditorGUI.indentLevel--; EditorGUI.indentLevel--;
@@ -584,9 +588,9 @@ namespace SplashEdit.RuntimeCode
if (_savedObjectPositions.ContainsKey(track.ObjectName ?? "")) if (_savedObjectPositions.ContainsKey(track.ObjectName ?? ""))
initialVal = _savedObjectPositions[track.ObjectName]; initialVal = _savedObjectPositions[track.ObjectName];
break; break;
case PSXTrackType.ObjectRotationY: case PSXTrackType.ObjectRotation:
if (_savedObjectRotations.ContainsKey(track.ObjectName ?? "")) if (_savedObjectRotations.ContainsKey(track.ObjectName ?? ""))
initialVal = new Vector3(0, _savedObjectRotations[track.ObjectName].eulerAngles.y, 0); initialVal = _savedObjectRotations[track.ObjectName].eulerAngles;
break; break;
case PSXTrackType.ObjectActive: case PSXTrackType.ObjectActive:
if (_savedObjectActive.ContainsKey(track.ObjectName ?? "")) if (_savedObjectActive.ContainsKey(track.ObjectName ?? ""))
@@ -619,10 +623,10 @@ namespace SplashEdit.RuntimeCode
if (go != null) go.transform.position = val; if (go != null) go.transform.position = val;
break; break;
} }
case PSXTrackType.ObjectRotationY: case PSXTrackType.ObjectRotation:
{ {
var go = GameObject.Find(track.ObjectName); var go = GameObject.Find(track.ObjectName);
if (go != null) go.transform.rotation = Quaternion.Euler(0, val.y, 0); if (go != null) go.transform.rotation = Quaternion.Euler(val);
break; break;
} }
case PSXTrackType.ObjectActive: case PSXTrackType.ObjectActive:
@@ -706,16 +710,6 @@ namespace SplashEdit.RuntimeCode
{ {
float rawT = frame / after.Frame; float rawT = frame / after.Frame;
float t = ApplyInterpCurve(rawT, after.Interp); float t = ApplyInterpCurve(rawT, after.Interp);
bool isRotation = track.TrackType == PSXTrackType.CameraRotation
|| track.TrackType == PSXTrackType.ObjectRotationY;
if (isRotation)
{
return new Vector3(
Mathf.LerpAngle(initialValue.x, after.Value.x, t),
Mathf.LerpAngle(initialValue.y, after.Value.y, t),
Mathf.LerpAngle(initialValue.z, after.Value.z, t));
}
return Vector3.Lerp(initialValue, after.Value, t); return Vector3.Lerp(initialValue, after.Value, t);
} }
@@ -727,17 +721,8 @@ namespace SplashEdit.RuntimeCode
float rawT2 = (frame - before.Frame) / span; float rawT2 = (frame - before.Frame) / span;
float t2 = ApplyInterpCurve(rawT2, after.Interp); float t2 = ApplyInterpCurve(rawT2, after.Interp);
// Use shortest-path angle interpolation for rotation tracks // Linear interpolation for all tracks including rotation.
bool isRot = track.TrackType == PSXTrackType.CameraRotation // No shortest-path wrapping: a keyframe from 0 to 360 rotates the full circle.
|| track.TrackType == PSXTrackType.ObjectRotationY;
if (isRot)
{
return new Vector3(
Mathf.LerpAngle(before.Value.x, after.Value.x, t2),
Mathf.LerpAngle(before.Value.y, after.Value.y, t2),
Mathf.LerpAngle(before.Value.z, after.Value.z, t2));
}
return Vector3.Lerp(before.Value, after.Value, t2); return Vector3.Lerp(before.Value, after.Value, t2);
} }

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 guid: afedc2b61a424884b90aeb912c54fe50
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7 guid: 873ed6988ff333343b8a535dcf4919b1
folderAsset: yes folderAsset: yes
DefaultImporter: DefaultImporter:
externalObjects: {} externalObjects: {}

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8 guid: c732908a2854def459b9b5d59ea1d8c6
PluginImporter: PluginImporter:
externalObjects: {} externalObjects: {}
serializedVersion: 2 serializedVersion: 2

View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2 fileFormatVersion: 2
guid: d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9 guid: ba66a74ed9417f2408b71435e402676b
PluginImporter: PluginImporter:
externalObjects: {} externalObjects: {}
serializedVersion: 2 serializedVersion: 2

View File

@@ -211,12 +211,15 @@ namespace SplashEdit.RuntimeCode
writer.Write(rz); writer.Write(rz);
break; break;
} }
case PSXTrackType.ObjectRotationY: case PSXTrackType.ObjectRotation:
{ {
// Only Y rotation matters // Full XYZ rotation in degrees -> pi-units
writer.Write((short)0); short rx = DegreesToAngleRaw(kf.Value.x);
writer.Write(DegreesToAngleRaw(kf.Value.y)); short ry = DegreesToAngleRaw(kf.Value.y);
writer.Write((short)0); short rz = DegreesToAngleRaw(kf.Value.z);
writer.Write(rx);
writer.Write(ry);
writer.Write(rz);
break; break;
} }
case PSXTrackType.ObjectActive: case PSXTrackType.ObjectActive:

View File

@@ -8,7 +8,7 @@ namespace SplashEdit.RuntimeCode
/// Value interpretation depends on track type: /// Value interpretation depends on track type:
/// CameraPosition / ObjectPosition: Unity world-space position (x, y, z) /// CameraPosition / ObjectPosition: Unity world-space position (x, y, z)
/// CameraRotation: Euler angles in degrees (x=pitch, y=yaw, z=roll) /// CameraRotation: Euler angles in degrees (x=pitch, y=yaw, z=roll)
/// ObjectRotationY: y component = rotation in degrees /// ObjectRotation: y component = rotation in degrees
/// ObjectActive: x component = 0.0 (inactive) or 1.0 (active) /// ObjectActive: x component = 0.0 (inactive) or 1.0 (active)
/// </summary> /// </summary>
[Serializable] [Serializable]

View File

@@ -312,7 +312,7 @@ namespace SplashEdit.RuntimeCode
{ {
foreach (var exporter in exporters) foreach (var exporter in exporters)
{ {
if (exporter.CollisionType == PSXCollisionType.Dynamic) if (exporter.CollisionType == PSXCollisionType.Dynamic || exporter.CollisionType == PSXCollisionType.None)
continue; continue;
MeshFilter mf = exporter.GetComponent<MeshFilter>(); MeshFilter mf = exporter.GetComponent<MeshFilter>();

View File

@@ -5,7 +5,7 @@ namespace SplashEdit.RuntimeCode
CameraPosition = 0, CameraPosition = 0,
CameraRotation = 1, CameraRotation = 1,
ObjectPosition = 2, ObjectPosition = 2,
ObjectRotationY = 3, ObjectRotation = 3,
ObjectActive = 4, ObjectActive = 4,
UICanvasVisible = 5, UICanvasVisible = 5,
UIElementVisible = 6, UIElementVisible = 6,