diff --git a/unitypack/engine/__init__.py b/unitypack/engine/__init__.py index e2f73cb..76dfc23 100644 --- a/unitypack/engine/__init__.py +++ b/unitypack/engine/__init__.py @@ -9,7 +9,7 @@ from .movie import MovieTexture from .object import GameObject from .particle import EllipsoidParticleEmitter, MeshParticleEmitter, ParticleEmitter, ParticleSystem -from .physics import BoxCollider, BoxCollider2D, Collider, Collider2D, Rigidbody2D +from .physics import BoxCollider, SphereCollider, CapsuleCollider, BoxCollider2D, Collider, Collider2D, MeshCollider, Rigidbody2D from .renderer import MeshRenderer, ParticleRenderer, ParticleSystemRenderer, Renderer from .text import TextAsset, TextMesh, Shader from .texture import Material, Sprite, Texture2D, StreamingInfo diff --git a/unitypack/engine/mesh.py b/unitypack/engine/mesh.py index 6f43aef..2a223bf 100644 --- a/unitypack/engine/mesh.py +++ b/unitypack/engine/mesh.py @@ -39,4 +39,4 @@ class VertexData(Object): class MeshFilter(Component): - pass + mesh = field("m_Mesh") diff --git a/unitypack/engine/physics.py b/unitypack/engine/physics.py index bb3511d..098792f 100644 --- a/unitypack/engine/physics.py +++ b/unitypack/engine/physics.py @@ -14,6 +14,23 @@ class BoxCollider(Collider): size = field("m_Size") +class SphereCollider(Collider): + center = field("m_Center") + radius = field("m_Radius") + + +class CapsuleCollider(SphereCollider): + height = field("m_Height") + direction = field("m_Direction") + + +class MeshCollider(Collider): + convex = field("m_Convex", bool) + cooking_options = field("m_CookingOptions") + skin_width = field("m_SkinWidth") + mesh = field("m_Mesh") + + class Collider2D(Behaviour): is_trigger = field("m_IsTrigger") material = field("m_Material") diff --git a/unitypack/engine/renderer.py b/unitypack/engine/renderer.py index d5c836f..2705fd3 100644 --- a/unitypack/engine/renderer.py +++ b/unitypack/engine/renderer.py @@ -18,7 +18,7 @@ class ShadowCastingMode(IntEnum): ShadowsOnly = 3 -class Renderer(Component): +class RendererBase(Component): enabled = field("m_Enabled", bool) lightmap_index = field("m_LightmapIndex") materials = field("m_Materials") @@ -28,17 +28,20 @@ class Renderer(Component): shadow_casting_mode = field("m_CastShadows", ShadowCastingMode) sorting_layer_id = field("m_SortingLayerID") sorting_order = field("m_SortingOrder") - use_light_probes = field("m_UseLightProbes", bool) lightmap_index_dynamic = field("m_LightmapIndexDynamic") lightmap_tiling_offset = field("m_LightmapTilingOffset") lightmap_tiling_offset_dynamic = field("m_LightmapTilingOffsetDynamic") static_batch_root = field("m_StaticBatchRoot") - subset_indices = field("m_SubsetIndices") @property def material(self): return self.materials[0] + +class Renderer(RendererBase): + use_light_probes = field("m_UseLightProbes", bool) + subset_indices = field("m_SubsetIndices") + class ParticleSystemRenderMode(IntEnum): Billboard = 0 @@ -55,23 +58,29 @@ class ParticleSystemSortMode(IntEnum): YoungestInFront = 3 -class MeshRenderer(Component): - pass +class MeshRenderer(RendererBase): + use_light_probes = field("m_LightProbeUsage", bool) #Note that it's "...Usage", not "Use..." + additional_vertex_streams = field("m_AdditionalVertexStreams") + dynamic_occludee = field("m_DynamicOccludee") + light_probe_volume_override = field("m_LightProbeVolumeOverride") + motion_vectors = field("m_MotionVectors", bool) + sorting_layer = field("m_SortingLayer") + static_batch_info = field("m_StaticBatchInfo") -class ParticleRenderer(Renderer): +class ParticleRendererBase(Renderer): camera_velocity_scale = field("m_CameraVelocityScale") length_scale = field("m_LengthScale") max_particle_size = field("m_MaxParticleSize") velocity_scale = field("m_VelocityScale") + + +class ParticleRenderer(ParticleRendererBase): stretch_particles = field("m_StretchParticles") uv_animation = field("UV Animation") -class ParticleSystemRenderer(Renderer): - camera_velocity_scale = field("m_CameraVelocityScale") - length_scale = field("m_LengthScale") - max_particle_size = field("m_MaxParticleSize") +class ParticleSystemRenderer(ParticleRendererBase): mesh = field("m_Mesh") mesh1 = field("m_Mesh1") mesh2 = field("m_Mesh2") @@ -80,4 +89,3 @@ class ParticleSystemRenderer(Renderer): render_mode = field("m_RenderMode", ParticleSystemRenderMode) sort_mode = field("m_SortMode", ParticleSystemSortMode) sorting_fudge = field("m_SortingFudge") - velocity_scale = field("m_VelocityScale") diff --git a/unitypack/export.py b/unitypack/export.py index 5337bbb..2db2f08 100644 --- a/unitypack/export.py +++ b/unitypack/export.py @@ -28,7 +28,7 @@ def read(self, buf): return self def __str__(self): - return "%s %s %s" % (-self.x, self.y, self.z) + return "%s %s %s" % (self.x, self.y, self.z) class OBJVector4(OBJVector3): @@ -147,7 +147,7 @@ def __init__(self, mesh): @staticmethod def face_str(indices, coords, normals): ret = ["f "] - for i in indices[::-1]: + for i in indices: ret.append(str(i + 1)) if coords or normals: ret.append("/")