diff --git a/.agents/skills/animation-get-data/SKILL.md b/.agents/skills/animation-get-data/SKILL.md index fbb27fd9..56fb7f18 100644 --- a/.agents/skills/animation-get-data/SKILL.md +++ b/.agents/skills/animation-get-data/SKILL.md @@ -44,14 +44,14 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "animRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef" + "$ref": "#/$defs/AIGD.AssetObjectRef" } }, "$defs": { "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef": { + "AIGD.AssetObjectRef": { "type": "object", "properties": { "instanceID": { diff --git a/.agents/skills/animation-modify/SKILL.md b/.agents/skills/animation-modify/SKILL.md index da3bd381..e7dc34bd 100644 --- a/.agents/skills/animation-modify/SKILL.md +++ b/.agents/skills/animation-modify/SKILL.md @@ -46,7 +46,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "animRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef" + "$ref": "#/$defs/AIGD.AssetObjectRef" }, "modifications": { "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Animation.AnimationModification[]" @@ -56,7 +56,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef": { + "AIGD.AssetObjectRef": { "type": "object", "properties": { "instanceID": { diff --git a/.agents/skills/animator-get-data/SKILL.md b/.agents/skills/animator-get-data/SKILL.md index d3ea1f41..1aa6bfef 100644 --- a/.agents/skills/animator-get-data/SKILL.md +++ b/.agents/skills/animator-get-data/SKILL.md @@ -44,14 +44,14 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "animatorRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef" + "$ref": "#/$defs/AIGD.AssetObjectRef" } }, "$defs": { "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef": { + "AIGD.AssetObjectRef": { "type": "object", "properties": { "instanceID": { diff --git a/.agents/skills/animator-modify/SKILL.md b/.agents/skills/animator-modify/SKILL.md index 3ab3de8b..e8c75d2c 100644 --- a/.agents/skills/animator-modify/SKILL.md +++ b/.agents/skills/animator-modify/SKILL.md @@ -46,7 +46,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "animatorRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef" + "$ref": "#/$defs/AIGD.AssetObjectRef" }, "modifications": { "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Animation.AnimatorModification[]" @@ -56,7 +56,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef": { + "AIGD.AssetObjectRef": { "type": "object", "properties": { "instanceID": { diff --git a/.agents/skills/assets-copy/SKILL.md b/.agents/skills/assets-copy/SKILL.md index 5928e557..4e2bd7c3 100644 --- a/.agents/skills/assets-copy/SKILL.md +++ b/.agents/skills/assets-copy/SKILL.md @@ -76,18 +76,18 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets+CopyAssetsResponse" + "$ref": "#/$defs/AIGD.CopyAssetsResponse" } }, "$defs": { - "System.Collections.Generic.List": { + "System.Collections.Generic.List": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef", + "$ref": "#/$defs/AIGD.AssetObjectRef", "description": "Reference to UnityEngine.Object asset instance. It could be Material, ScriptableObject, Prefab, and any other Asset. Anything located in the Assets and Packages folders." } }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef": { + "AIGD.AssetObjectRef": { "type": "object", "properties": { "instanceID": { @@ -121,11 +121,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "string" } }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets+CopyAssetsResponse": { + "AIGD.CopyAssetsResponse": { "type": "object", "properties": { "CopiedAssets": { - "$ref": "#/$defs/System.Collections.Generic.List", + "$ref": "#/$defs/System.Collections.Generic.List", "description": "List of copied assets." }, "Errors": { diff --git a/.agents/skills/assets-create-folder/SKILL.md b/.agents/skills/assets-create-folder/SKILL.md index 0b585baa..58876e73 100644 --- a/.agents/skills/assets-create-folder/SKILL.md +++ b/.agents/skills/assets-create-folder/SKILL.md @@ -44,11 +44,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "inputs": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets+CreateFolderInput[]" + "$ref": "#/$defs/AIGD.CreateFolderInput[]" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets+CreateFolderInput": { + "AIGD.CreateFolderInput": { "type": "object", "properties": { "ParentFolderPath": { @@ -61,10 +61,10 @@ Read the /unity-initial-setup skill for detailed installation instructions. } } }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets+CreateFolderInput[]": { + "AIGD.CreateFolderInput[]": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets+CreateFolderInput" + "$ref": "#/$defs/AIGD.CreateFolderInput" } } }, @@ -83,7 +83,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets+CreateFolderResponse" + "$ref": "#/$defs/AIGD.CreateFolderResponse" } }, "$defs": { @@ -93,7 +93,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "string" } }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets+CreateFolderResponse": { + "AIGD.CreateFolderResponse": { "type": "object", "properties": { "CreatedFolderGuids": { diff --git a/.agents/skills/assets-delete/SKILL.md b/.agents/skills/assets-delete/SKILL.md index cf7cc25b..b17f619c 100644 --- a/.agents/skills/assets-delete/SKILL.md +++ b/.agents/skills/assets-delete/SKILL.md @@ -70,7 +70,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets+DeleteAssetsResponse" + "$ref": "#/$defs/AIGD.DeleteAssetsResponse" } }, "$defs": { @@ -80,7 +80,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "string" } }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets+DeleteAssetsResponse": { + "AIGD.DeleteAssetsResponse": { "type": "object", "properties": { "DeletedPaths": { diff --git a/.agents/skills/assets-find-built-in/SKILL.md b/.agents/skills/assets-find-built-in/SKILL.md index 268a1552..bd54b440 100644 --- a/.agents/skills/assets-find-built-in/SKILL.md +++ b/.agents/skills/assets-find-built-in/SKILL.md @@ -74,11 +74,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/System.Collections.Generic.List" + "$ref": "#/$defs/System.Collections.Generic.List" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef": { + "AIGD.AssetObjectRef": { "type": "object", "properties": { "instanceID": { @@ -106,10 +106,10 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "System.Collections.Generic.List": { + "System.Collections.Generic.List": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef", + "$ref": "#/$defs/AIGD.AssetObjectRef", "description": "Reference to UnityEngine.Object asset instance. It could be Material, ScriptableObject, Prefab, and any other Asset. Anything located in the Assets and Packages folders." } } diff --git a/.agents/skills/assets-find/SKILL.md b/.agents/skills/assets-find/SKILL.md index e152e2af..5168f0d4 100644 --- a/.agents/skills/assets-find/SKILL.md +++ b/.agents/skills/assets-find/SKILL.md @@ -77,11 +77,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/System.Collections.Generic.List" + "$ref": "#/$defs/System.Collections.Generic.List" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef": { + "AIGD.AssetObjectRef": { "type": "object", "properties": { "instanceID": { @@ -109,10 +109,10 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "System.Collections.Generic.List": { + "System.Collections.Generic.List": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef", + "$ref": "#/$defs/AIGD.AssetObjectRef", "description": "Reference to UnityEngine.Object asset instance. It could be Material, ScriptableObject, Prefab, and any other Asset. Anything located in the Assets and Packages folders." } } diff --git a/.agents/skills/assets-get-data/SKILL.md b/.agents/skills/assets-get-data/SKILL.md index 13c8dbc4..74e2915e 100644 --- a/.agents/skills/assets-get-data/SKILL.md +++ b/.agents/skills/assets-get-data/SKILL.md @@ -1,6 +1,10 @@ --- name: assets-get-data -description: Get asset data from the asset file in the Unity project. It includes all serializable fields and properties of the asset. Use 'assets-find' tool to find asset before using this tool. +description: |- + Get asset data from the asset file in the Unity project. It includes all serializable fields and properties of the asset. Use 'assets-find' tool to find asset before using this tool. + + Path-scoped reads (token-saving): supply 'paths' (a list of paths) to read only the listed fields/elements via Reflector.TryReadAt, or 'viewQuery' (a ViewQuery) to navigate to a subtree and/or filter by name regex / max depth / type via Reflector.View. These two parameters are mutually exclusive — supply at most one. When neither is supplied the full asset is serialized as before (backwards compatible). + Path syntax: 'fieldName', 'nested/field', 'arrayField/[i]', 'dictField/[key]'. Leading '#/' is stripped. --- # Assets / Get Data @@ -9,7 +13,9 @@ description: Get asset data from the asset file in the Unity project. It include ```bash unity-mcp-cli run-tool assets-get-data --input '{ - "assetRef": "string_value" + "assetRef": "string_value", + "paths": "string_value", + "viewQuery": "string_value" }' ``` @@ -36,6 +42,8 @@ Read the /unity-initial-setup skill for detailed installation instructions. | Name | Type | Required | Description | |------|------|----------|-------------| | `assetRef` | `any` | Yes | Reference to UnityEngine.Object asset instance. It could be Material, ScriptableObject, Prefab, and any other Asset. Anything located in the Assets and Packages folders. | +| `paths` | `any` | No | Optional. List of paths to read individually via Reflector.TryReadAt. Path syntax: 'fieldName', 'nested/field', 'arrayField/[i]', 'dictField/[key]'. Mutually exclusive with 'viewQuery'. | +| `viewQuery` | `any` | No | Optional. View-query filter routed through Reflector.View — combines a starting Path, a case-insensitive NamePattern regex, MaxDepth, and an optional TypeFilter. Mutually exclusive with 'paths'. | ### Input JSON Schema @@ -44,14 +52,20 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "assetRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef" + "$ref": "#/$defs/AIGD.AssetObjectRef" + }, + "paths": { + "$ref": "#/$defs/System.Collections.Generic.List" + }, + "viewQuery": { + "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.ViewQuery" } }, "$defs": { "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef": { + "AIGD.AssetObjectRef": { "type": "object", "properties": { "instanceID": { @@ -75,6 +89,33 @@ Read the /unity-initial-setup skill for detailed installation instructions. "instanceID" ], "description": "Reference to UnityEngine.Object asset instance. It could be Material, ScriptableObject, Prefab, and any other Asset. Anything located in the Assets and Packages folders." + }, + "System.Collections.Generic.List": { + "type": "array", + "items": { + "type": "string" + } + }, + "com.IvanMurzak.ReflectorNet.Model.ViewQuery": { + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Navigate to this path first, then serialize only that subtree. Path segments are separated by '/'. Use '[i]' for array/list index (e.g. 'users/[2]/name') and '[key]' for dictionary entry (e.g. 'config/[timeout]'). A leading '#/' is stripped automatically. Examples: 'admin/name', 'users/[0]/email', 'config/[timeout]'. Leave null to start from the root object." + }, + "NamePattern": { + "type": "string", + "description": "Case-insensitive .NET regex pattern matched against field and property names. Only branches containing at least one match are kept in the result tree. Examples: 'orbitRadius' (exact name), 'orbit.*' (prefix match), 'radius|speed' (either name). When nothing matches, the root envelope is returned with empty fields/props. Leave null to return all fields and properties without filtering." + }, + "MaxDepth": { + "type": "integer", + "description": "Maximum nesting depth of the returned serialized tree. 0 = root type name and value only — no nested fields or properties. 1 = one level of fields/props visible, their children stripped. 2 = two levels visible, and so on. Leave null (default) for unlimited depth." + }, + "TypeFilter": { + "$ref": "#/$defs/System.Type", + "description": "When set, prunes the result tree to members whose runtime type is assignable to this type. Non-matching branches are removed; the root envelope is always preserved. Examples: typeof(float) keeps only float fields, typeof(IEnumerable) keeps only collections. Leave null to include members of any type." + } + } } }, "required": [ diff --git a/.agents/skills/assets-material-create/SKILL.md b/.agents/skills/assets-material-create/SKILL.md index c2de40e0..c066e549 100644 --- a/.agents/skills/assets-material-create/SKILL.md +++ b/.agents/skills/assets-material-create/SKILL.md @@ -68,7 +68,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef", + "$ref": "#/$defs/AIGD.AssetObjectRef", "description": "Reference to UnityEngine.Object asset instance. It could be Material, ScriptableObject, Prefab, and any other Asset. Anything located in the Assets and Packages folders." } }, @@ -76,7 +76,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef": { + "AIGD.AssetObjectRef": { "type": "object", "properties": { "instanceID": { diff --git a/.agents/skills/assets-modify/SKILL.md b/.agents/skills/assets-modify/SKILL.md index 67f156f0..16faa632 100644 --- a/.agents/skills/assets-modify/SKILL.md +++ b/.agents/skills/assets-modify/SKILL.md @@ -1,6 +1,14 @@ --- name: assets-modify -description: Modify asset file in the project. Use 'assets-get-data' tool first to inspect the asset structure before modifying. Not allowed to modify asset file in 'Packages/' folder. Please modify it in 'Assets/' folder. +description: |- + Modify asset file in the project. Use 'assets-get-data' tool first to inspect the asset structure before modifying. Not allowed to modify asset file in 'Packages/' folder. Please modify it in 'Assets/' folder. + + Three modification surfaces (use whichever fits the task): + 1. 'content' — full SerializedMember override (legacy, backwards compatible). + 2. 'pathPatches' — list of {path, value} pairs routed through Reflector.TryModifyAt. + 3. 'jsonPatch' — JSON Merge Patch routed through Reflector.TryPatch. + When more than one is supplied they run in this order: jsonPatch → pathPatches → content. At least one is required. + Path syntax: 'fieldName', 'nested/field', 'arrayField/[i]', 'dictField/[key]'. Leading '#/' is stripped. --- # Assets / Modify @@ -10,7 +18,9 @@ description: Modify asset file in the project. Use 'assets-get-data' tool first ```bash unity-mcp-cli run-tool assets-modify --input '{ "assetRef": "string_value", - "content": "string_value" + "content": "string_value", + "pathPatches": "string_value", + "jsonPatch": "string_value" }' ``` @@ -37,7 +47,9 @@ Read the /unity-initial-setup skill for detailed installation instructions. | Name | Type | Required | Description | |------|------|----------|-------------| | `assetRef` | `any` | Yes | Reference to UnityEngine.Object asset instance. It could be Material, ScriptableObject, Prefab, and any other Asset. Anything located in the Assets and Packages folders. | -| `content` | `any` | Yes | The asset content. It overrides the existing asset content. | +| `content` | `any` | No | Optional. The asset content. It overrides the existing asset content (legacy path). | +| `pathPatches` | `any` | No | Optional. List of path-scoped patches routed through Reflector.TryModifyAt. | +| `jsonPatch` | `string` | No | Optional. JSON Merge Patch (RFC 7396, extended with [i]/[key] keys) routed through Reflector.TryPatch. | ### Input JSON Schema @@ -46,17 +58,23 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "assetRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef" + "$ref": "#/$defs/AIGD.AssetObjectRef" }, "content": { "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember" + }, + "pathPatches": { + "$ref": "#/$defs/System.Collections.Generic.List" + }, + "jsonPatch": { + "type": "string" } }, "$defs": { "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef": { + "AIGD.AssetObjectRef": { "type": "object", "properties": { "instanceID": { @@ -122,11 +140,29 @@ Read the /unity-initial-setup skill for detailed installation instructions. "typeName" ], "additionalProperties": false + }, + "AIGD.PathPatch": { + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Slash-delimited path to the target field/element/entry. Plain segment navigates a field or property (e.g. 'admin' or 'admin/name'). Use '[i]' for array/list index (e.g. 'planets/[0]/orbitRadius'). Use '[key]' for dictionary entry (e.g. 'config/[timeout]'). A leading '#/' is stripped automatically. Required." + }, + "Value": { + "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember", + "description": "The new value to write at the path. Use the standard SerializedMember envelope: 'typeName' + 'value' for primitives, or nested 'fields'/'props' for complex types. Required — omitting it overwrites the target with a default empty SerializedMember." + } + } + }, + "System.Collections.Generic.List": { + "type": "array", + "items": { + "$ref": "#/$defs/AIGD.PathPatch" + } } }, "required": [ - "assetRef", - "content" + "assetRef" ] } ``` diff --git a/.agents/skills/assets-move/SKILL.md b/.agents/skills/assets-move/SKILL.md index 7c384381..8bf095cc 100644 --- a/.agents/skills/assets-move/SKILL.md +++ b/.agents/skills/assets-move/SKILL.md @@ -76,7 +76,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets+MoveAssetsResponse" + "$ref": "#/$defs/AIGD.MoveAssetsResponse" } }, "$defs": { @@ -86,7 +86,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "string" } }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets+MoveAssetsResponse": { + "AIGD.MoveAssetsResponse": { "type": "object", "properties": { "MovedPaths": { diff --git a/.agents/skills/assets-prefab-close/SKILL.md b/.agents/skills/assets-prefab-close/SKILL.md index 4704f917..11162c6f 100644 --- a/.agents/skills/assets-prefab-close/SKILL.md +++ b/.agents/skills/assets-prefab-close/SKILL.md @@ -59,7 +59,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef", + "$ref": "#/$defs/AIGD.AssetObjectRef", "description": "Reference to UnityEngine.Object asset instance. It could be Material, ScriptableObject, Prefab, and any other Asset. Anything located in the Assets and Packages folders." } }, @@ -67,7 +67,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef": { + "AIGD.AssetObjectRef": { "type": "object", "properties": { "instanceID": { diff --git a/.agents/skills/assets-prefab-create/SKILL.md b/.agents/skills/assets-prefab-create/SKILL.md index 62c12dc8..0ef5cdf2 100644 --- a/.agents/skills/assets-prefab-create/SKILL.md +++ b/.agents/skills/assets-prefab-create/SKILL.md @@ -53,7 +53,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "string" }, "gameObjectRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef" + "$ref": "#/$defs/AIGD.GameObjectRef" }, "sourcePrefabAssetPath": { "type": "string" @@ -66,7 +66,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { @@ -115,7 +115,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef", + "$ref": "#/$defs/AIGD.AssetObjectRef", "description": "Reference to UnityEngine.Object asset instance. It could be Material, ScriptableObject, Prefab, and any other Asset. Anything located in the Assets and Packages folders." } }, @@ -123,7 +123,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef": { + "AIGD.AssetObjectRef": { "type": "object", "properties": { "instanceID": { diff --git a/.agents/skills/assets-prefab-instantiate/SKILL.md b/.agents/skills/assets-prefab-instantiate/SKILL.md index 35264952..bb809686 100644 --- a/.agents/skills/assets-prefab-instantiate/SKILL.md +++ b/.agents/skills/assets-prefab-instantiate/SKILL.md @@ -110,7 +110,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef", + "$ref": "#/$defs/AIGD.GameObjectRef", "description": "Find GameObject in opened Prefab or in the active Scene." } }, @@ -118,7 +118,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { diff --git a/.agents/skills/assets-prefab-open/SKILL.md b/.agents/skills/assets-prefab-open/SKILL.md index 6a4700e6..932d7ea7 100644 --- a/.agents/skills/assets-prefab-open/SKILL.md +++ b/.agents/skills/assets-prefab-open/SKILL.md @@ -44,14 +44,14 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "gameObjectRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef" + "$ref": "#/$defs/AIGD.GameObjectRef" } }, "$defs": { "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { diff --git a/.agents/skills/assets-prefab-save/SKILL.md b/.agents/skills/assets-prefab-save/SKILL.md index 92ed9215..29d80f85 100644 --- a/.agents/skills/assets-prefab-save/SKILL.md +++ b/.agents/skills/assets-prefab-save/SKILL.md @@ -59,7 +59,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef", + "$ref": "#/$defs/AIGD.AssetObjectRef", "description": "Reference to UnityEngine.Object asset instance. It could be Material, ScriptableObject, Prefab, and any other Asset. Anything located in the Assets and Packages folders." } }, @@ -67,7 +67,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef": { + "AIGD.AssetObjectRef": { "type": "object", "properties": { "instanceID": { diff --git a/.agents/skills/assets-shader-get-data/SKILL.md b/.agents/skills/assets-shader-get-data/SKILL.md index d4d283f9..78eb116d 100644 --- a/.agents/skills/assets-shader-get-data/SKILL.md +++ b/.agents/skills/assets-shader-get-data/SKILL.md @@ -1,6 +1,10 @@ --- name: assets-shader-get-data -description: "Get detailed data about a shader asset in the Unity project. Returns shader properties, subshaders, passes, compilation errors, and supported status. Use 'assets-find' tool with filter 't:Shader' to find shaders, or 'assets-shader-list-all' tool to list all shader names." +description: |- + Get detailed data about a shader asset in the Unity project. Returns shader properties, subshaders, passes, compilation errors, and supported status. Use 'assets-find' tool with filter 't:Shader' to find shaders, or 'assets-shader-list-all' tool to list all shader names. + + Path-scoped reads (token-saving): supply 'paths' (a list of paths) to read only the listed fields/elements via Reflector.TryReadAt, or 'viewQuery' (a ViewQuery) to navigate to a subtree and/or filter by name regex / max depth / type via Reflector.View. The result populates 'View' on the returned ShaderData. These two parameters are mutually exclusive. + Path syntax: 'fieldName', 'nested/field', 'arrayField/[i]', 'dictField/[key]'. Leading '#/' is stripped. --- # Assets / Shader / Get Data @@ -13,7 +17,9 @@ unity-mcp-cli run-tool assets-shader-get-data --input '{ "includeMessages": "string_value", "includeProperties": "string_value", "includeSubshaders": "string_value", - "includeSourceCode": "string_value" + "includeSourceCode": "string_value", + "paths": "string_value", + "viewQuery": "string_value" }' ``` @@ -44,6 +50,8 @@ Read the /unity-initial-setup skill for detailed installation instructions. | `includeProperties` | `any` | No | Include shader properties (uniforms) list. Default: false | | `includeSubshaders` | `any` | No | Include subshader and pass structure. Default: false | | `includeSourceCode` | `any` | No | Include pass source code in subshader data. Requires 'includeSubshaders' to be true. Can produce very large responses. Default: false | +| `paths` | `any` | No | Optional. List of paths to read individually via Reflector.TryReadAt against the underlying Shader asset. Path syntax: 'fieldName', 'nested/field', 'arrayField/[i]', 'dictField/[key]'. Mutually exclusive with 'viewQuery'. | +| `viewQuery` | `any` | No | Optional. View-query filter routed through Reflector.View against the underlying Shader asset. Mutually exclusive with 'paths'. | ### Input JSON Schema @@ -52,7 +60,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "assetRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef" + "$ref": "#/$defs/AIGD.AssetObjectRef" }, "includeMessages": { "$ref": "#/$defs/System.Boolean" @@ -65,13 +73,19 @@ Read the /unity-initial-setup skill for detailed installation instructions. }, "includeSourceCode": { "$ref": "#/$defs/System.Boolean" + }, + "paths": { + "$ref": "#/$defs/System.Collections.Generic.List" + }, + "viewQuery": { + "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.ViewQuery" } }, "$defs": { "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef": { + "AIGD.AssetObjectRef": { "type": "object", "properties": { "instanceID": { @@ -98,6 +112,33 @@ Read the /unity-initial-setup skill for detailed installation instructions. }, "System.Boolean": { "type": "boolean" + }, + "System.Collections.Generic.List": { + "type": "array", + "items": { + "type": "string" + } + }, + "com.IvanMurzak.ReflectorNet.Model.ViewQuery": { + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Navigate to this path first, then serialize only that subtree. Path segments are separated by '/'. Use '[i]' for array/list index (e.g. 'users/[2]/name') and '[key]' for dictionary entry (e.g. 'config/[timeout]'). A leading '#/' is stripped automatically. Examples: 'admin/name', 'users/[0]/email', 'config/[timeout]'. Leave null to start from the root object." + }, + "NamePattern": { + "type": "string", + "description": "Case-insensitive .NET regex pattern matched against field and property names. Only branches containing at least one match are kept in the result tree. Examples: 'orbitRadius' (exact name), 'orbit.*' (prefix match), 'radius|speed' (either name). When nothing matches, the root envelope is returned with empty fields/props. Leave null to return all fields and properties without filtering." + }, + "MaxDepth": { + "type": "integer", + "description": "Maximum nesting depth of the returned serialized tree. 0 = root type name and value only — no nested fields or properties. 1 = one level of fields/props visible, their children stripped. 2 = two levels visible, and so on. Leave null (default) for unlimited depth." + }, + "TypeFilter": { + "$ref": "#/$defs/System.Type", + "description": "When set, prunes the result tree to members whose runtime type is assignable to this type. Non-matching branches are removed; the root envelope is always preserved. Examples: typeof(float) keeps only float fields, typeof(IEnumerable) keeps only collections. Leave null to include members of any type." + } + } } }, "required": [ @@ -115,11 +156,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets_Shader+ShaderData" + "$ref": "#/$defs/AIGD.ShaderData" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef": { + "AIGD.AssetObjectRef": { "type": "object", "properties": { "instanceID": { @@ -147,13 +188,13 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "System.Collections.Generic.List": { + "System.Collections.Generic.List": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets_Shader+ShaderMessageData" + "$ref": "#/$defs/AIGD.ShaderMessageData" } }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets_Shader+ShaderMessageData": { + "AIGD.ShaderMessageData": { "type": "object", "properties": { "Message": { @@ -177,13 +218,13 @@ Read the /unity-initial-setup skill for detailed installation instructions. "Line" ] }, - "System.Collections.Generic.List": { + "System.Collections.Generic.List": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets_Shader+ShaderPropertyData" + "$ref": "#/$defs/AIGD.ShaderPropertyData" } }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets_Shader+ShaderPropertyData": { + "AIGD.ShaderPropertyData": { "type": "object", "properties": { "Name": { @@ -233,13 +274,13 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "string" } }, - "System.Collections.Generic.List": { + "System.Collections.Generic.List": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets_Shader+SubshaderData" + "$ref": "#/$defs/AIGD.SubshaderData" } }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets_Shader+SubshaderData": { + "AIGD.SubshaderData": { "type": "object", "properties": { "Index": { @@ -251,7 +292,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "description": "Number of passes in this subshader." }, "Passes": { - "$ref": "#/$defs/System.Collections.Generic.List", + "$ref": "#/$defs/System.Collections.Generic.List", "description": "List of passes in this subshader. Null if no passes." } }, @@ -260,13 +301,13 @@ Read the /unity-initial-setup skill for detailed installation instructions. "PassCount" ] }, - "System.Collections.Generic.List": { + "System.Collections.Generic.List": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets_Shader+PassData" + "$ref": "#/$defs/AIGD.PassData" } }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets_Shader+PassData": { + "AIGD.PassData": { "type": "object", "properties": { "Index": { @@ -286,11 +327,53 @@ Read the /unity-initial-setup skill for detailed installation instructions. "Index" ] }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Assets_Shader+ShaderData": { + "com.IvanMurzak.ReflectorNet.Model.SerializedMember": { + "type": "object", + "properties": { + "typeName": { + "type": "string", + "description": "Full type name. Eg: 'System.String', 'System.Int32', 'UnityEngine.Vector3', etc." + }, + "name": { + "type": "string", + "description": "Object name." + }, + "value": { + "description": "Value of the object, serialized as a non stringified JSON element. Can be null if the value is not set. Can be default value if the value is an empty object or array json." + }, + "fields": { + "type": "array", + "items": { + "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember", + "description": "Nested field value." + }, + "description": "Fields of the object, serialized as a list of 'SerializedMember'." + }, + "props": { + "type": "array", + "items": { + "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember", + "description": "Nested property value." + }, + "description": "Properties of the object, serialized as a list of 'SerializedMember'." + } + }, + "required": [ + "typeName" + ], + "additionalProperties": false + }, + "com.IvanMurzak.ReflectorNet.Model.SerializedMemberList": { + "type": "array", + "items": { + "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember" + } + }, + "AIGD.ShaderData": { "type": "object", "properties": { "Reference": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef", + "$ref": "#/$defs/AIGD.AssetObjectRef", "description": "Reference to the shader asset for future operations." }, "Name": { @@ -322,16 +405,20 @@ Read the /unity-initial-setup skill for detailed installation instructions. "description": "The RenderType tag value from the first pass, if set." }, "Messages": { - "$ref": "#/$defs/System.Collections.Generic.List", + "$ref": "#/$defs/System.Collections.Generic.List", "description": "Compilation messages including errors and warnings. Null if no messages." }, "Properties": { - "$ref": "#/$defs/System.Collections.Generic.List", + "$ref": "#/$defs/System.Collections.Generic.List", "description": "List of shader properties (uniforms). Null if the shader has no properties." }, "Subshaders": { - "$ref": "#/$defs/System.Collections.Generic.List", + "$ref": "#/$defs/System.Collections.Generic.List", "description": "List of subshaders with their passes. Null if shader data is unavailable." + }, + "View": { + "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember", + "description": "Path-scoped read or view-query result, populated when 'paths' or 'viewQuery' is supplied. Null otherwise." } }, "required": [ diff --git a/.agents/skills/editor-application-get-state/SKILL.md b/.agents/skills/editor-application-get-state/SKILL.md index 8c94888d..d5538e9f 100644 --- a/.agents/skills/editor-application-get-state/SKILL.md +++ b/.agents/skills/editor-application-get-state/SKILL.md @@ -59,12 +59,12 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Editor+EditorStatsData", + "$ref": "#/$defs/AIGD.EditorStatsData", "description": "Available information about 'UnityEditor.EditorApplication'." } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Editor+EditorStatsData": { + "AIGD.EditorStatsData": { "type": "object", "properties": { "IsPlaying": { diff --git a/.agents/skills/editor-application-set-state/SKILL.md b/.agents/skills/editor-application-set-state/SKILL.md index 1ee282ae..027b031a 100644 --- a/.agents/skills/editor-application-set-state/SKILL.md +++ b/.agents/skills/editor-application-set-state/SKILL.md @@ -64,12 +64,12 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Editor+EditorStatsData", + "$ref": "#/$defs/AIGD.EditorStatsData", "description": "Available information about 'UnityEditor.EditorApplication'." } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Editor+EditorStatsData": { + "AIGD.EditorStatsData": { "type": "object", "properties": { "IsPlaying": { diff --git a/.agents/skills/editor-selection-get/SKILL.md b/.agents/skills/editor-selection-get/SKILL.md index ba690cf3..9162a2d1 100644 --- a/.agents/skills/editor-selection-get/SKILL.md +++ b/.agents/skills/editor-selection-get/SKILL.md @@ -84,18 +84,18 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Editor_Selection+SelectionData" + "$ref": "#/$defs/AIGD.SelectionData" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef[]": { + "AIGD.GameObjectRef[]": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef", + "$ref": "#/$defs/AIGD.GameObjectRef", "description": "Find GameObject in opened Prefab or in the active Scene." } }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { @@ -131,14 +131,14 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef[]": { + "AIGD.ComponentRef[]": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef", + "$ref": "#/$defs/AIGD.ComponentRef", "description": "Component reference. Used to find a Component at GameObject." } }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef": { + "AIGD.ComponentRef": { "type": "object", "properties": { "index": { @@ -172,7 +172,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "string" } }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ObjectRef": { + "AIGD.ObjectRef": { "type": "object", "properties": { "instanceID": { @@ -185,15 +185,15 @@ Read the /unity-initial-setup skill for detailed installation instructions. ], "description": "Reference to UnityEngine.Object instance. It could be GameObject, Component, Asset, etc. Anything extended from UnityEngine.Object." }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Editor_Selection+SelectionData": { + "AIGD.SelectionData": { "type": "object", "properties": { "GameObjects": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef[]", + "$ref": "#/$defs/AIGD.GameObjectRef[]", "description": "Returns the actual game object selection. Includes Prefabs, non-modifiable objects." }, "Transforms": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef[]", + "$ref": "#/$defs/AIGD.ComponentRef[]", "description": "Returns the top level selection, excluding Prefabs." }, "InstanceIDs": { @@ -205,7 +205,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "description": "Returns the guids of the selected assets." }, "ActiveGameObject": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef", + "$ref": "#/$defs/AIGD.GameObjectRef", "description": "Returns the active game object. (The one shown in the inspector)." }, "ActiveInstanceID": { @@ -213,11 +213,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "description": "Returns the instanceID of the actual object selection. Includes Prefabs, non-modifiable objects" }, "ActiveObject": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ObjectRef", + "$ref": "#/$defs/AIGD.ObjectRef", "description": "Returns the actual object selection. Includes Prefabs, non-modifiable objects." }, "ActiveTransform": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef", + "$ref": "#/$defs/AIGD.ComponentRef", "description": "Returns the active transform. (The one shown in the inspector)." } }, diff --git a/.agents/skills/editor-selection-set/SKILL.md b/.agents/skills/editor-selection-set/SKILL.md index c28532c4..b6b7fb6e 100644 --- a/.agents/skills/editor-selection-set/SKILL.md +++ b/.agents/skills/editor-selection-set/SKILL.md @@ -44,11 +44,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "select": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ObjectRef[]" + "$ref": "#/$defs/AIGD.ObjectRef[]" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.ObjectRef": { + "AIGD.ObjectRef": { "type": "object", "properties": { "instanceID": { @@ -61,10 +61,10 @@ Read the /unity-initial-setup skill for detailed installation instructions. ], "description": "Reference to UnityEngine.Object instance. It could be GameObject, Component, Asset, etc. Anything extended from UnityEngine.Object." }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ObjectRef[]": { + "AIGD.ObjectRef[]": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ObjectRef", + "$ref": "#/$defs/AIGD.ObjectRef", "description": "Reference to UnityEngine.Object instance. It could be GameObject, Component, Asset, etc. Anything extended from UnityEngine.Object." } } @@ -84,18 +84,18 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Editor_Selection+SelectionData" + "$ref": "#/$defs/AIGD.SelectionData" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef[]": { + "AIGD.GameObjectRef[]": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef", + "$ref": "#/$defs/AIGD.GameObjectRef", "description": "Find GameObject in opened Prefab or in the active Scene." } }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { @@ -131,14 +131,14 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef[]": { + "AIGD.ComponentRef[]": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef", + "$ref": "#/$defs/AIGD.ComponentRef", "description": "Component reference. Used to find a Component at GameObject." } }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef": { + "AIGD.ComponentRef": { "type": "object", "properties": { "index": { @@ -172,7 +172,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "string" } }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ObjectRef": { + "AIGD.ObjectRef": { "type": "object", "properties": { "instanceID": { @@ -185,15 +185,15 @@ Read the /unity-initial-setup skill for detailed installation instructions. ], "description": "Reference to UnityEngine.Object instance. It could be GameObject, Component, Asset, etc. Anything extended from UnityEngine.Object." }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Editor_Selection+SelectionData": { + "AIGD.SelectionData": { "type": "object", "properties": { "GameObjects": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef[]", + "$ref": "#/$defs/AIGD.GameObjectRef[]", "description": "Returns the actual game object selection. Includes Prefabs, non-modifiable objects." }, "Transforms": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef[]", + "$ref": "#/$defs/AIGD.ComponentRef[]", "description": "Returns the top level selection, excluding Prefabs." }, "InstanceIDs": { @@ -205,7 +205,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "description": "Returns the guids of the selected assets." }, "ActiveGameObject": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef", + "$ref": "#/$defs/AIGD.GameObjectRef", "description": "Returns the active game object. (The one shown in the inspector)." }, "ActiveInstanceID": { @@ -213,11 +213,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "description": "Returns the instanceID of the actual object selection. Includes Prefabs, non-modifiable objects" }, "ActiveObject": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ObjectRef", + "$ref": "#/$defs/AIGD.ObjectRef", "description": "Returns the actual object selection. Includes Prefabs, non-modifiable objects." }, "ActiveTransform": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef", + "$ref": "#/$defs/AIGD.ComponentRef", "description": "Returns the active transform. (The one shown in the inspector)." } }, diff --git a/.agents/skills/gameobject-component-add/SKILL.md b/.agents/skills/gameobject-component-add/SKILL.md index d22e8e10..bf49afb1 100644 --- a/.agents/skills/gameobject-component-add/SKILL.md +++ b/.agents/skills/gameobject-component-add/SKILL.md @@ -49,7 +49,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "$ref": "#/$defs/System.String[]" }, "gameObjectRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef" + "$ref": "#/$defs/AIGD.GameObjectRef" } }, "$defs": { @@ -62,7 +62,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { @@ -112,17 +112,17 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_GameObject+AddComponentResponse" + "$ref": "#/$defs/AIGD.AddComponentResponse" } }, "$defs": { - "System.Collections.Generic.List": { + "System.Collections.Generic.List": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentDataShallow" + "$ref": "#/$defs/AIGD.ComponentDataShallow" } }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentDataShallow": { + "AIGD.ComponentDataShallow": { "type": "object", "properties": { "instanceID": { @@ -151,11 +151,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "string" } }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_GameObject+AddComponentResponse": { + "AIGD.AddComponentResponse": { "type": "object", "properties": { "AddedComponents": { - "$ref": "#/$defs/System.Collections.Generic.List", + "$ref": "#/$defs/System.Collections.Generic.List", "description": "List of successfully added components." }, "Messages": { diff --git a/.agents/skills/gameobject-component-destroy/SKILL.md b/.agents/skills/gameobject-component-destroy/SKILL.md index 1478d639..058ad057 100644 --- a/.agents/skills/gameobject-component-destroy/SKILL.md +++ b/.agents/skills/gameobject-component-destroy/SKILL.md @@ -46,17 +46,17 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "gameObjectRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef" + "$ref": "#/$defs/AIGD.GameObjectRef" }, "destroyComponentRefs": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRefList" + "$ref": "#/$defs/AIGD.ComponentRefList" } }, "$defs": { "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { @@ -89,7 +89,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. ], "description": "Find GameObject in opened Prefab or in the active Scene." }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef": { + "AIGD.ComponentRef": { "type": "object", "properties": { "index": { @@ -111,10 +111,10 @@ Read the /unity-initial-setup skill for detailed installation instructions. ], "description": "Component reference. Used to find a Component at GameObject." }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRefList": { + "AIGD.ComponentRefList": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef", + "$ref": "#/$defs/AIGD.ComponentRef", "description": "Component reference. Used to find a Component at GameObject." }, "description": "Component reference array. Used to find Component at GameObject." @@ -136,19 +136,19 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_GameObject+DestroyComponentsResponse" + "$ref": "#/$defs/AIGD.DestroyComponentsResponse" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRefList": { + "AIGD.ComponentRefList": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef", + "$ref": "#/$defs/AIGD.ComponentRef", "description": "Component reference. Used to find a Component at GameObject." }, "description": "Component reference array. Used to find Component at GameObject." }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef": { + "AIGD.ComponentRef": { "type": "object", "properties": { "index": { @@ -170,11 +170,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. ], "description": "Component reference. Used to find a Component at GameObject." }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_GameObject+DestroyComponentsResponse": { + "AIGD.DestroyComponentsResponse": { "type": "object", "properties": { "DestroyedComponents": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRefList", + "$ref": "#/$defs/AIGD.ComponentRefList", "description": "List of destroyed components." } } diff --git a/.agents/skills/gameobject-component-get/SKILL.md b/.agents/skills/gameobject-component-get/SKILL.md index 45a248c4..42c9c89c 100644 --- a/.agents/skills/gameobject-component-get/SKILL.md +++ b/.agents/skills/gameobject-component-get/SKILL.md @@ -1,6 +1,10 @@ --- name: gameobject-component-get -description: Get detailed information about a specific Component on a GameObject. Returns component type, enabled state, and optionally serialized fields and properties. Use this to inspect component data before modifying it. Use 'gameobject-find' tool to get the list of all components on the GameObject. +description: |- + Get detailed information about a specific Component on a GameObject. Returns component type, enabled state, and optionally serialized fields and properties. Use this to inspect component data before modifying it. Use 'gameobject-find' tool to get the list of all components on the GameObject. + + Path-scoped reads (token-saving): supply 'paths' (a list of paths) to read only the listed fields/elements via Reflector.TryReadAt, or 'viewQuery' (a ViewQuery) to navigate to a subtree and/or filter by name regex / max depth / type via Reflector.View. The result is returned in the 'View' field of the response. These two parameters are mutually exclusive — supply at most one. + Path syntax: 'fieldName', 'nested/field', 'arrayField/[i]', 'dictField/[key]'. Leading '#/' is stripped. --- # GameObject / Component / Get @@ -13,7 +17,9 @@ unity-mcp-cli run-tool gameobject-component-get --input '{ "componentRef": "string_value", "includeFields": false, "includeProperties": false, - "deepSerialization": false + "deepSerialization": false, + "paths": "string_value", + "viewQuery": "string_value" }' ``` @@ -44,6 +50,8 @@ Read the /unity-initial-setup skill for detailed installation instructions. | `includeFields` | `boolean` | No | Include serialized fields of the component. | | `includeProperties` | `boolean` | No | Include serialized properties of the component. | | `deepSerialization` | `boolean` | No | Performs deep serialization including all nested objects. Otherwise, only serializes top-level members. | +| `paths` | `any` | No | Optional. List of paths to read individually via Reflector.TryReadAt. When supplied, the legacy 'Fields'/'Properties' lists are skipped and the result is returned in 'View'. Path syntax: 'fieldName', 'nested/field', 'arrayField/[i]', 'dictField/[key]'. Mutually exclusive with 'viewQuery'. | +| `viewQuery` | `any` | No | Optional. View-query filter routed through Reflector.View. When supplied, the legacy 'Fields'/'Properties' lists are skipped and the filtered subtree is returned in 'View'. Mutually exclusive with 'paths'. | ### Input JSON Schema @@ -52,10 +60,10 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "gameObjectRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef" + "$ref": "#/$defs/AIGD.GameObjectRef" }, "componentRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef" + "$ref": "#/$defs/AIGD.ComponentRef" }, "includeFields": { "type": "boolean" @@ -65,13 +73,19 @@ Read the /unity-initial-setup skill for detailed installation instructions. }, "deepSerialization": { "type": "boolean" + }, + "paths": { + "$ref": "#/$defs/System.Collections.Generic.List" + }, + "viewQuery": { + "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.ViewQuery" } }, "$defs": { "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { @@ -104,7 +118,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. ], "description": "Find GameObject in opened Prefab or in the active Scene." }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef": { + "AIGD.ComponentRef": { "type": "object", "properties": { "index": { @@ -125,6 +139,33 @@ Read the /unity-initial-setup skill for detailed installation instructions. "instanceID" ], "description": "Component reference. Used to find a Component at GameObject." + }, + "System.Collections.Generic.List": { + "type": "array", + "items": { + "type": "string" + } + }, + "com.IvanMurzak.ReflectorNet.Model.ViewQuery": { + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Navigate to this path first, then serialize only that subtree. Path segments are separated by '/'. Use '[i]' for array/list index (e.g. 'users/[2]/name') and '[key]' for dictionary entry (e.g. 'config/[timeout]'). A leading '#/' is stripped automatically. Examples: 'admin/name', 'users/[0]/email', 'config/[timeout]'. Leave null to start from the root object." + }, + "NamePattern": { + "type": "string", + "description": "Case-insensitive .NET regex pattern matched against field and property names. Only branches containing at least one match are kept in the result tree. Examples: 'orbitRadius' (exact name), 'orbit.*' (prefix match), 'radius|speed' (either name). When nothing matches, the root envelope is returned with empty fields/props. Leave null to return all fields and properties without filtering." + }, + "MaxDepth": { + "type": "integer", + "description": "Maximum nesting depth of the returned serialized tree. 0 = root type name and value only — no nested fields or properties. 1 = one level of fields/props visible, their children stripped. 2 = two levels visible, and so on. Leave null (default) for unlimited depth." + }, + "TypeFilter": { + "$ref": "#/$defs/System.Type", + "description": "When set, prunes the result tree to members whose runtime type is assignable to this type. Non-matching branches are removed; the root envelope is always preserved. Examples: typeof(float) keeps only float fields, typeof(IEnumerable) keeps only collections. Leave null to include members of any type." + } + } } }, "required": [ @@ -143,11 +184,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_GameObject+GetComponentResponse" + "$ref": "#/$defs/AIGD.GetComponentResponse" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef": { + "AIGD.ComponentRef": { "type": "object", "properties": { "index": { @@ -169,7 +210,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. ], "description": "Component reference. Used to find a Component at GameObject." }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentDataShallow": { + "AIGD.ComponentDataShallow": { "type": "object", "properties": { "instanceID": { @@ -240,11 +281,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember" } }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_GameObject+GetComponentResponse": { + "AIGD.GetComponentResponse": { "type": "object", "properties": { "Reference": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef", + "$ref": "#/$defs/AIGD.ComponentRef", "description": "Reference to the component for future operations." }, "Index": { @@ -252,16 +293,20 @@ Read the /unity-initial-setup skill for detailed installation instructions. "description": "Index of the component in the GameObject's component list." }, "Component": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentDataShallow", + "$ref": "#/$defs/AIGD.ComponentDataShallow", "description": "Basic component information (type, enabled state)." }, "Fields": { "$ref": "#/$defs/System.Collections.Generic.List", - "description": "Serialized fields of the component." + "description": "Serialized fields of the component. Populated only on the legacy code path (no 'paths' / no 'viewQuery')." }, "Properties": { "$ref": "#/$defs/System.Collections.Generic.List", - "description": "Serialized properties of the component." + "description": "Serialized properties of the component. Populated only on the legacy code path (no 'paths' / no 'viewQuery')." + }, + "View": { + "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember", + "description": "Path-scoped read or view-query result, populated when 'paths' or 'viewQuery' was supplied. Null otherwise." } }, "required": [ diff --git a/.agents/skills/gameobject-component-list-all/SKILL.md b/.agents/skills/gameobject-component-list-all/SKILL.md index 8251599d..8a055320 100644 --- a/.agents/skills/gameobject-component-list-all/SKILL.md +++ b/.agents/skills/gameobject-component-list-all/SKILL.md @@ -69,7 +69,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_GameObject+ComponentListResult" + "$ref": "#/$defs/AIGD.ComponentListResult" } }, "$defs": { @@ -79,7 +79,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "string" } }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_GameObject+ComponentListResult": { + "AIGD.ComponentListResult": { "type": "object", "properties": { "Items": { diff --git a/.agents/skills/gameobject-component-modify/SKILL.md b/.agents/skills/gameobject-component-modify/SKILL.md index b4566437..b7f3f44d 100644 --- a/.agents/skills/gameobject-component-modify/SKILL.md +++ b/.agents/skills/gameobject-component-modify/SKILL.md @@ -1,6 +1,14 @@ --- name: gameobject-component-modify -description: Modify a specific Component on a GameObject in opened Prefab or in a Scene. Allows direct modification of component fields and properties without wrapping in GameObject structure. Use 'gameobject-component-get' first to inspect the component structure before modifying. +description: |- + Modify a specific Component on a GameObject in opened Prefab or in a Scene. Allows direct modification of component fields and properties without wrapping in GameObject structure. Use 'gameobject-component-get' first to inspect the component structure before modifying. + + Three modification surfaces (use whichever fits the task): + 1. 'componentDiff' — full SerializedMember diff (legacy, backwards compatible). + 2. 'pathPatches' — list of {path, value} pairs routed through Reflector.TryModifyAt; atomic per-path modification, multiple entries can target different depths. + 3. 'jsonPatch' — a JSON Merge Patch (RFC 7396, extended with [i]/[key] notation) routed through Reflector.TryPatch; multiple fields at any depth in a single call. + When more than one is supplied they run in this order: jsonPatch → pathPatches → componentDiff. At least one is required. + Path syntax: 'fieldName', 'nested/field', 'arrayField/[i]', 'dictField/[key]'. Leading '#/' is stripped. --- # GameObject / Component / Modify @@ -11,7 +19,9 @@ description: Modify a specific Component on a GameObject in opened Prefab or in unity-mcp-cli run-tool gameobject-component-modify --input '{ "gameObjectRef": "string_value", "componentRef": "string_value", - "componentDiff": "string_value" + "componentDiff": "string_value", + "pathPatches": "string_value", + "jsonPatch": "string_value" }' ``` @@ -39,9 +49,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. |------|------|----------|-------------| | `gameObjectRef` | `any` | Yes | Find GameObject in opened Prefab or in the active Scene. | | `componentRef` | `any` | Yes | Component reference. Used to find a Component at GameObject. | -| `componentDiff` | `any` | Yes | The component data to apply. Should contain 'fields' and/or 'props' with the values to modify. +| `componentDiff` | `any` | No | Optional. The full component data to apply (legacy path). Should contain 'fields' and/or 'props' with the values to modify. Only include the fields/properties you want to change. Any unknown or invalid fields and properties will be reported in the response. | +| `pathPatches` | `any` | No | Optional. List of path-scoped patches routed through Reflector.TryModifyAt. Each entry targets one field/element/entry by path. Path syntax: 'fieldName', 'nested/field', 'arrayField/[i]', 'dictField/[key]'. | +| `jsonPatch` | `string` | No | Optional. JSON Merge Patch (RFC 7396, extended with [i]/[key] keys) routed through Reflector.TryPatch. Allows multiple fields at any depth to be updated in a single call. Use '$type' for compatible-subtype replacement. | ### Input JSON Schema @@ -50,20 +62,26 @@ Any unknown or invalid fields and properties will be reported in the response. | "type": "object", "properties": { "gameObjectRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef" + "$ref": "#/$defs/AIGD.GameObjectRef" }, "componentRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef" + "$ref": "#/$defs/AIGD.ComponentRef" }, "componentDiff": { "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember" + }, + "pathPatches": { + "$ref": "#/$defs/System.Collections.Generic.List" + }, + "jsonPatch": { + "type": "string" } }, "$defs": { "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { @@ -96,7 +114,7 @@ Any unknown or invalid fields and properties will be reported in the response. | ], "description": "Find GameObject in opened Prefab or in the active Scene." }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef": { + "AIGD.ComponentRef": { "type": "object", "properties": { "index": { @@ -159,12 +177,30 @@ Any unknown or invalid fields and properties will be reported in the response. | "typeName" ], "additionalProperties": false + }, + "AIGD.PathPatch": { + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Slash-delimited path to the target field/element/entry. Plain segment navigates a field or property (e.g. 'admin' or 'admin/name'). Use '[i]' for array/list index (e.g. 'planets/[0]/orbitRadius'). Use '[key]' for dictionary entry (e.g. 'config/[timeout]'). A leading '#/' is stripped automatically. Required." + }, + "Value": { + "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember", + "description": "The new value to write at the path. Use the standard SerializedMember envelope: 'typeName' + 'value' for primitives, or nested 'fields'/'props' for complex types. Required — omitting it overwrites the target with a default empty SerializedMember." + } + } + }, + "System.Collections.Generic.List": { + "type": "array", + "items": { + "$ref": "#/$defs/AIGD.PathPatch" + } } }, "required": [ "gameObjectRef", - "componentRef", - "componentDiff" + "componentRef" ] } ``` @@ -178,11 +214,11 @@ Any unknown or invalid fields and properties will be reported in the response. | "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_GameObject+ModifyComponentResponse" + "$ref": "#/$defs/AIGD.ModifyComponentResponse" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef": { + "AIGD.ComponentRef": { "type": "object", "properties": { "index": { @@ -204,7 +240,7 @@ Any unknown or invalid fields and properties will be reported in the response. | ], "description": "Component reference. Used to find a Component at GameObject." }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentDataShallow": { + "AIGD.ComponentDataShallow": { "type": "object", "properties": { "instanceID": { @@ -233,7 +269,7 @@ Any unknown or invalid fields and properties will be reported in the response. | "type": "string" } }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_GameObject+ModifyComponentResponse": { + "AIGD.ModifyComponentResponse": { "type": "object", "properties": { "Success": { @@ -241,7 +277,7 @@ Any unknown or invalid fields and properties will be reported in the response. | "description": "Whether the modification was successful." }, "Reference": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef", + "$ref": "#/$defs/AIGD.ComponentRef", "description": "Reference to the modified component." }, "Index": { @@ -249,7 +285,7 @@ Any unknown or invalid fields and properties will be reported in the response. | "description": "Index of the component in the GameObject's component list." }, "Component": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentDataShallow", + "$ref": "#/$defs/AIGD.ComponentDataShallow", "description": "Updated component information after modification." }, "Logs": { diff --git a/.agents/skills/gameobject-create/SKILL.md b/.agents/skills/gameobject-create/SKILL.md index 6614208c..a11cb958 100644 --- a/.agents/skills/gameobject-create/SKILL.md +++ b/.agents/skills/gameobject-create/SKILL.md @@ -59,7 +59,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "string" }, "parentGameObjectRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef" + "$ref": "#/$defs/AIGD.GameObjectRef" }, "position": { "$ref": "#/$defs/UnityEngine.Vector3" @@ -81,7 +81,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { @@ -161,7 +161,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef", + "$ref": "#/$defs/AIGD.GameObjectRef", "description": "Find GameObject in opened Prefab or in the active Scene." } }, @@ -169,7 +169,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { diff --git a/.agents/skills/gameobject-destroy/SKILL.md b/.agents/skills/gameobject-destroy/SKILL.md index acf71ed5..1455b07f 100644 --- a/.agents/skills/gameobject-destroy/SKILL.md +++ b/.agents/skills/gameobject-destroy/SKILL.md @@ -44,14 +44,14 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "gameObjectRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef" + "$ref": "#/$defs/AIGD.GameObjectRef" } }, "$defs": { "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { @@ -100,11 +100,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_GameObject+DestroyGameObjectResult" + "$ref": "#/$defs/AIGD.DestroyGameObjectResult" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_GameObject+DestroyGameObjectResult": { + "AIGD.DestroyGameObjectResult": { "type": "object", "properties": { "DestroyedName": { diff --git a/.agents/skills/gameobject-duplicate/SKILL.md b/.agents/skills/gameobject-duplicate/SKILL.md index caaca358..4acdc82d 100644 --- a/.agents/skills/gameobject-duplicate/SKILL.md +++ b/.agents/skills/gameobject-duplicate/SKILL.md @@ -44,11 +44,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "gameObjectRefs": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRefList" + "$ref": "#/$defs/AIGD.GameObjectRefList" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { @@ -84,10 +84,10 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRefList": { + "AIGD.GameObjectRefList": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef", + "$ref": "#/$defs/AIGD.GameObjectRef", "description": "Find GameObject in opened Prefab or in the active Scene." }, "description": "Array of GameObjects in opened Prefab or in the active Scene." @@ -108,11 +108,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/System.Collections.Generic.List" + "$ref": "#/$defs/System.Collections.Generic.List" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { @@ -148,10 +148,10 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "System.Collections.Generic.List": { + "System.Collections.Generic.List": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef", + "$ref": "#/$defs/AIGD.GameObjectRef", "description": "Find GameObject in opened Prefab or in the active Scene." } } diff --git a/.agents/skills/gameobject-find/SKILL.md b/.agents/skills/gameobject-find/SKILL.md index 3e3a5ee8..b713ea5c 100644 --- a/.agents/skills/gameobject-find/SKILL.md +++ b/.agents/skills/gameobject-find/SKILL.md @@ -1,6 +1,10 @@ --- name: gameobject-find -description: Finds specific GameObject by provided information in opened Prefab or in a Scene. First it looks for the opened Prefab, if any Prefab is opened it looks only there ignoring a scene. If no opened Prefab it looks into current active scene. Returns GameObject information and its children. Also, it returns Components preview just for the target GameObject. +description: |- + Finds specific GameObject by provided information in opened Prefab or in a Scene. First it looks for the opened Prefab, if any Prefab is opened it looks only there ignoring a scene. If no opened Prefab it looks into current active scene. Returns GameObject information and its children. Also, it returns Components preview just for the target GameObject. + + Path-scoped reads (token-saving): supply 'paths' (a list of paths) to read only the listed fields/elements via Reflector.TryReadAt, or 'viewQuery' (a ViewQuery) to navigate to a subtree and/or filter by name regex / max depth / type via Reflector.View. When either is supplied, the result populates 'Data' on the returned GameObjectData and overrides 'includeData' (which would otherwise produce a full recursive serialization). These two parameters are mutually exclusive — supply at most one. + Path syntax: 'fieldName', 'nested/field', 'arrayField/[i]', 'dictField/[key]'. Leading '#/' is stripped. --- # GameObject / Find @@ -14,7 +18,9 @@ unity-mcp-cli run-tool gameobject-find --input '{ "includeComponents": false, "includeBounds": false, "includeHierarchy": false, - "hierarchyDepth": 0 + "hierarchyDepth": 0, + "paths": "string_value", + "viewQuery": "string_value" }' ``` @@ -46,6 +52,8 @@ Read the /unity-initial-setup skill for detailed installation instructions. | `includeBounds` | `boolean` | No | Include 3D bounds of the GameObject. | | `includeHierarchy` | `boolean` | No | Include hierarchy metadata. | | `hierarchyDepth` | `integer` | No | Determines the depth of the hierarchy to include. 0 - means only the target GameObject. 1 - means to include one layer below. | +| `paths` | `any` | No | Optional. List of paths to read individually via Reflector.TryReadAt. When supplied, replaces 'includeData'-style full serialization with a path-scoped aggregate. Path syntax: 'fieldName', 'nested/field', 'arrayField/[i]', 'dictField/[key]'. Mutually exclusive with 'viewQuery'. | +| `viewQuery` | `any` | No | Optional. View-query filter routed through Reflector.View. When supplied, replaces 'includeData'-style full serialization with the filtered subtree. Mutually exclusive with 'paths'. | ### Input JSON Schema @@ -54,7 +62,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "gameObjectRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef" + "$ref": "#/$defs/AIGD.GameObjectRef" }, "includeData": { "type": "boolean" @@ -70,13 +78,19 @@ Read the /unity-initial-setup skill for detailed installation instructions. }, "hierarchyDepth": { "type": "integer" + }, + "paths": { + "$ref": "#/$defs/System.Collections.Generic.List" + }, + "viewQuery": { + "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.ViewQuery" } }, "$defs": { "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { @@ -108,6 +122,33 @@ Read the /unity-initial-setup skill for detailed installation instructions. "instanceID" ], "description": "Find GameObject in opened Prefab or in the active Scene." + }, + "System.Collections.Generic.List": { + "type": "array", + "items": { + "type": "string" + } + }, + "com.IvanMurzak.ReflectorNet.Model.ViewQuery": { + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Navigate to this path first, then serialize only that subtree. Path segments are separated by '/'. Use '[i]' for array/list index (e.g. 'users/[2]/name') and '[key]' for dictionary entry (e.g. 'config/[timeout]'). A leading '#/' is stripped automatically. Examples: 'admin/name', 'users/[0]/email', 'config/[timeout]'. Leave null to start from the root object." + }, + "NamePattern": { + "type": "string", + "description": "Case-insensitive .NET regex pattern matched against field and property names. Only branches containing at least one match are kept in the result tree. Examples: 'orbitRadius' (exact name), 'orbit.*' (prefix match), 'radius|speed' (either name). When nothing matches, the root envelope is returned with empty fields/props. Leave null to return all fields and properties without filtering." + }, + "MaxDepth": { + "type": "integer", + "description": "Maximum nesting depth of the returned serialized tree. 0 = root type name and value only — no nested fields or properties. 1 = one level of fields/props visible, their children stripped. 2 = two levels visible, and so on. Leave null (default) for unlimited depth." + }, + "TypeFilter": { + "$ref": "#/$defs/System.Type", + "description": "When set, prunes the result tree to members whose runtime type is assignable to this type. Non-matching branches are removed; the root envelope is always preserved. Examples: typeof(float) keeps only float fields, typeof(IEnumerable) keeps only collections. Leave null to include members of any type." + } + } } }, "required": [ @@ -125,11 +166,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectData" + "$ref": "#/$defs/AIGD.GameObjectData" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { @@ -255,7 +296,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. ], "additionalProperties": false }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectMetadata": { + "AIGD.GameObjectMetadata": { "type": "object", "properties": { "instanceID": { @@ -280,7 +321,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "boolean" }, "children": { - "$ref": "#/$defs/System.Collections.Generic.List" + "$ref": "#/$defs/System.Collections.Generic.List" } }, "required": [ @@ -289,19 +330,19 @@ Read the /unity-initial-setup skill for detailed installation instructions. "activeInHierarchy" ] }, - "System.Collections.Generic.List": { + "System.Collections.Generic.List": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectMetadata" + "$ref": "#/$defs/AIGD.GameObjectMetadata" } }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentDataShallow[]": { + "AIGD.ComponentDataShallow[]": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentDataShallow" + "$ref": "#/$defs/AIGD.ComponentDataShallow" } }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentDataShallow": { + "AIGD.ComponentDataShallow": { "type": "object", "properties": { "instanceID": { @@ -324,11 +365,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "isEnabled" ] }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectData": { + "AIGD.GameObjectData": { "type": "object", "properties": { "Reference": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef", + "$ref": "#/$defs/AIGD.GameObjectRef", "description": "Find GameObject in opened Prefab or in the active Scene." }, "Data": { @@ -340,11 +381,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "description": "Bounds of the GameObject." }, "Hierarchy": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectMetadata", + "$ref": "#/$defs/AIGD.GameObjectMetadata", "description": "Hierarchy metadata of the GameObject." }, "Components": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentDataShallow[]", + "$ref": "#/$defs/AIGD.ComponentDataShallow[]", "description": "Attached components shallow data of the GameObject (Read-only, use Component modification tool for modification)." } } diff --git a/.agents/skills/gameobject-modify/SKILL.md b/.agents/skills/gameobject-modify/SKILL.md index 62f7c886..8b52b1ba 100644 --- a/.agents/skills/gameobject-modify/SKILL.md +++ b/.agents/skills/gameobject-modify/SKILL.md @@ -1,6 +1,14 @@ --- name: gameobject-modify -description: Modify GameObject fields and properties in opened Prefab or in a Scene. You can modify multiple GameObjects at once. Just provide the same number of GameObject references and SerializedMember objects. +description: |- + Modify GameObject fields and properties in opened Prefab or in a Scene. You can modify multiple GameObjects at once. Just provide the same number of GameObject references and SerializedMember objects. + + Three modification surfaces (per GameObject — parallel arrays must have the same length as gameObjectRefs): + 1. 'gameObjectDiffs' — full SerializedMember diff per GameObject (legacy, backwards compatible). + 2. 'pathPatchesPerGameObject' — list of {path, value} patches per GameObject routed through Reflector.TryModifyAt; atomic per-path modification. + 3. 'jsonPatchesPerGameObject' — JSON Merge Patch per GameObject routed through Reflector.TryPatch. + When more than one is supplied for the same GameObject they run in this order: jsonPatch → pathPatches → diff. At least one of the three is required. + Path syntax: 'fieldName', 'nested/field', 'arrayField/[i]', 'dictField/[key]'. --- # GameObject / Modify @@ -10,7 +18,9 @@ description: Modify GameObject fields and properties in opened Prefab or in a Sc ```bash unity-mcp-cli run-tool gameobject-modify --input '{ "gameObjectRefs": "string_value", - "gameObjectDiffs": "string_value" + "gameObjectDiffs": "string_value", + "pathPatchesPerGameObject": "string_value", + "jsonPatchesPerGameObject": "string_value" }' ``` @@ -37,7 +47,9 @@ Read the /unity-initial-setup skill for detailed installation instructions. | Name | Type | Required | Description | |------|------|----------|-------------| | `gameObjectRefs` | `any` | Yes | Array of GameObjects in opened Prefab or in the active Scene. | -| `gameObjectDiffs` | `any` | Yes | Each item in the array represents a GameObject modification of the 'gameObjectRefs' at the same index. Usually a GameObject is a container for components. Each component may have fields and properties for modification. If you need to modify components of a GameObject, please use 'gameobject-component-modify' tool. Ignore values that should not be modified. Any unknown or wrong located fields and properties will be ignored. Check the result of this command to see what was changed. The ignored fields and properties will be listed. | +| `gameObjectDiffs` | `any` | No | Optional. Each item in the array represents a GameObject modification of the 'gameObjectRefs' at the same index. Usually a GameObject is a container for components. Each component may have fields and properties for modification. If you need to modify components of a GameObject, please use 'gameobject-component-modify' tool. Ignore values that should not be modified. Any unknown or wrong located fields and properties will be ignored. Check the result of this command to see what was changed. The ignored fields and properties will be listed. | +| `pathPatchesPerGameObject` | `any` | No | Optional. Per-GameObject list of path-scoped patches routed through Reflector.TryModifyAt. Outer index aligns with 'gameObjectRefs'; inner list contains {path, value} entries. Pass null or omit for GameObjects that should not receive path patches. | +| `jsonPatchesPerGameObject` | `any` | No | Optional. Per-GameObject JSON Merge Patch (RFC 7396, extended with [i]/[key] keys) routed through Reflector.TryPatch. Outer index aligns with 'gameObjectRefs'. Pass null or omit for GameObjects that should not receive a JSON patch. | ### Input JSON Schema @@ -46,14 +58,20 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "gameObjectRefs": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRefList" + "$ref": "#/$defs/AIGD.GameObjectRefList" }, "gameObjectDiffs": { "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMemberList" + }, + "pathPatchesPerGameObject": { + "$ref": "#/$defs/System.Collections.Generic.List>" + }, + "jsonPatchesPerGameObject": { + "$ref": "#/$defs/System.Collections.Generic.List" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { @@ -89,10 +107,10 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRefList": { + "AIGD.GameObjectRefList": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef", + "$ref": "#/$defs/AIGD.GameObjectRef", "description": "Find GameObject in opened Prefab or in the active Scene." }, "description": "Array of GameObjects in opened Prefab or in the active Scene." @@ -138,11 +156,41 @@ Read the /unity-initial-setup skill for detailed installation instructions. "typeName" ], "additionalProperties": false + }, + "System.Collections.Generic.List": { + "type": "array", + "items": { + "$ref": "#/$defs/AIGD.PathPatch" + } + }, + "AIGD.PathPatch": { + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Slash-delimited path to the target field/element/entry. Plain segment navigates a field or property (e.g. 'admin' or 'admin/name'). Use '[i]' for array/list index (e.g. 'planets/[0]/orbitRadius'). Use '[key]' for dictionary entry (e.g. 'config/[timeout]'). A leading '#/' is stripped automatically. Required." + }, + "Value": { + "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember", + "description": "The new value to write at the path. Use the standard SerializedMember envelope: 'typeName' + 'value' for primitives, or nested 'fields'/'props' for complex types. Required — omitting it overwrites the target with a default empty SerializedMember." + } + } + }, + "System.Collections.Generic.List>": { + "type": "array", + "items": { + "$ref": "#/$defs/System.Collections.Generic.List" + } + }, + "System.Collections.Generic.List": { + "type": "array", + "items": { + "type": "string" + } } }, "required": [ - "gameObjectRefs", - "gameObjectDiffs" + "gameObjectRefs" ] } ``` diff --git a/.agents/skills/gameobject-set-parent/SKILL.md b/.agents/skills/gameobject-set-parent/SKILL.md index 6d630753..1b81fa9b 100644 --- a/.agents/skills/gameobject-set-parent/SKILL.md +++ b/.agents/skills/gameobject-set-parent/SKILL.md @@ -48,17 +48,17 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "gameObjectRefs": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRefList" + "$ref": "#/$defs/AIGD.GameObjectRefList" }, "parentGameObjectRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef" + "$ref": "#/$defs/AIGD.GameObjectRef" }, "worldPositionStays": { "type": "boolean" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { @@ -94,10 +94,10 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRefList": { + "AIGD.GameObjectRefList": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef", + "$ref": "#/$defs/AIGD.GameObjectRef", "description": "Find GameObject in opened Prefab or in the active Scene." }, "description": "Array of GameObjects in opened Prefab or in the active Scene." diff --git a/.agents/skills/object-get-data/SKILL.md b/.agents/skills/object-get-data/SKILL.md index f0f1e667..51592467 100644 --- a/.agents/skills/object-get-data/SKILL.md +++ b/.agents/skills/object-get-data/SKILL.md @@ -1,6 +1,10 @@ --- name: object-get-data -description: Get data of the specified Unity Object. Returns serialized data of the object including its properties and fields. If need to modify the data use 'object-modify' tool. +description: |- + Get data of the specified Unity Object. Returns serialized data of the object including its properties and fields. If need to modify the data use 'object-modify' tool. + + Path-scoped reads (token-saving): supply 'paths' (a list of paths) to read only the listed fields/elements via Reflector.TryReadAt, or 'viewQuery' (a ViewQuery) to navigate to a subtree and/or filter by name regex / max depth / type via Reflector.View. These two parameters are mutually exclusive — supply at most one. When neither is supplied the full object is serialized as before (backwards compatible). + Path syntax: 'fieldName', 'nested/field', 'arrayField/[i]', 'dictField/[key]'. Leading '#/' is stripped. --- # Object / Get Data @@ -9,7 +13,9 @@ description: Get data of the specified Unity Object. Returns serialized data of ```bash unity-mcp-cli run-tool object-get-data --input '{ - "objectRef": "string_value" + "objectRef": "string_value", + "paths": "string_value", + "viewQuery": "string_value" }' ``` @@ -36,6 +42,8 @@ Read the /unity-initial-setup skill for detailed installation instructions. | Name | Type | Required | Description | |------|------|----------|-------------| | `objectRef` | `any` | Yes | Reference to UnityEngine.Object instance. It could be GameObject, Component, Asset, etc. Anything extended from UnityEngine.Object. | +| `paths` | `any` | No | Optional. List of paths to read individually via Reflector.TryReadAt. Each path may target a different depth. Path syntax: 'fieldName', 'nested/field', 'arrayField/[i]', 'dictField/[key]'. Mutually exclusive with 'viewQuery'. | +| `viewQuery` | `any` | No | Optional. View-query filter routed through Reflector.View — combines a starting Path, a case-insensitive NamePattern regex, MaxDepth, and an optional TypeFilter. Mutually exclusive with 'paths'. | ### Input JSON Schema @@ -44,11 +52,17 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "objectRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ObjectRef" + "$ref": "#/$defs/AIGD.ObjectRef" + }, + "paths": { + "$ref": "#/$defs/System.Collections.Generic.List" + }, + "viewQuery": { + "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.ViewQuery" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.ObjectRef": { + "AIGD.ObjectRef": { "type": "object", "properties": { "instanceID": { @@ -60,6 +74,36 @@ Read the /unity-initial-setup skill for detailed installation instructions. "instanceID" ], "description": "Reference to UnityEngine.Object instance. It could be GameObject, Component, Asset, etc. Anything extended from UnityEngine.Object." + }, + "System.Collections.Generic.List": { + "type": "array", + "items": { + "type": "string" + } + }, + "System.Type": { + "type": "string" + }, + "com.IvanMurzak.ReflectorNet.Model.ViewQuery": { + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Navigate to this path first, then serialize only that subtree. Path segments are separated by '/'. Use '[i]' for array/list index (e.g. 'users/[2]/name') and '[key]' for dictionary entry (e.g. 'config/[timeout]'). A leading '#/' is stripped automatically. Examples: 'admin/name', 'users/[0]/email', 'config/[timeout]'. Leave null to start from the root object." + }, + "NamePattern": { + "type": "string", + "description": "Case-insensitive .NET regex pattern matched against field and property names. Only branches containing at least one match are kept in the result tree. Examples: 'orbitRadius' (exact name), 'orbit.*' (prefix match), 'radius|speed' (either name). When nothing matches, the root envelope is returned with empty fields/props. Leave null to return all fields and properties without filtering." + }, + "MaxDepth": { + "type": "integer", + "description": "Maximum nesting depth of the returned serialized tree. 0 = root type name and value only — no nested fields or properties. 1 = one level of fields/props visible, their children stripped. 2 = two levels visible, and so on. Leave null (default) for unlimited depth." + }, + "TypeFilter": { + "$ref": "#/$defs/System.Type", + "description": "When set, prunes the result tree to members whose runtime type is assignable to this type. Non-matching branches are removed; the root envelope is always preserved. Examples: typeof(float) keeps only float fields, typeof(IEnumerable) keeps only collections. Leave null to include members of any type." + } + } } }, "required": [ diff --git a/.agents/skills/object-modify/SKILL.md b/.agents/skills/object-modify/SKILL.md index 477882b9..45725785 100644 --- a/.agents/skills/object-modify/SKILL.md +++ b/.agents/skills/object-modify/SKILL.md @@ -1,6 +1,14 @@ --- name: object-modify -description: Modify the specified Unity Object. Allows direct modification of object fields and properties. Use 'object-get-data' first to inspect the object structure before modifying. +description: |- + Modify the specified Unity Object. Allows direct modification of object fields and properties. Use 'object-get-data' first to inspect the object structure before modifying. + + Three modification surfaces (use whichever fits the task): + 1. 'objectDiff' — full SerializedMember diff (legacy, backwards compatible). + 2. 'pathPatches' — list of {path, value} pairs routed through Reflector.TryModifyAt; atomic per-path modification, multiple entries can target different depths. + 3. 'jsonPatch' — a JSON Merge Patch (RFC 7396, extended with [i]/[key] notation) routed through Reflector.TryPatch; multiple fields at any depth in a single call. + When more than one is supplied they run in this order: jsonPatch → pathPatches → objectDiff. At least one is required. + Path syntax: 'fieldName', 'nested/field', 'arrayField/[i]', 'dictField/[key]'. Leading '#/' is stripped. --- # Object / Modify @@ -10,7 +18,9 @@ description: Modify the specified Unity Object. Allows direct modification of ob ```bash unity-mcp-cli run-tool object-modify --input '{ "objectRef": "string_value", - "objectDiff": "string_value" + "objectDiff": "string_value", + "pathPatches": "string_value", + "jsonPatch": "string_value" }' ``` @@ -37,9 +47,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. | Name | Type | Required | Description | |------|------|----------|-------------| | `objectRef` | `any` | Yes | Reference to UnityEngine.Object instance. It could be GameObject, Component, Asset, etc. Anything extended from UnityEngine.Object. | -| `objectDiff` | `any` | Yes | The object data to apply. Should contain 'fields' and/or 'props' with the values to modify. +| `objectDiff` | `any` | No | Optional. The full object data to apply (legacy path). Should contain 'fields' and/or 'props' with the values to modify. Only include the fields/properties you want to change. Any unknown or invalid fields and properties will be reported in the response. | +| `pathPatches` | `any` | No | Optional. List of path-scoped patches routed through Reflector.TryModifyAt. | +| `jsonPatch` | `string` | No | Optional. JSON Merge Patch (RFC 7396, extended with [i]/[key] keys) routed through Reflector.TryPatch. | ### Input JSON Schema @@ -48,14 +60,20 @@ Any unknown or invalid fields and properties will be reported in the response. | "type": "object", "properties": { "objectRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ObjectRef" + "$ref": "#/$defs/AIGD.ObjectRef" }, "objectDiff": { "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember" + }, + "pathPatches": { + "$ref": "#/$defs/System.Collections.Generic.List" + }, + "jsonPatch": { + "type": "string" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.ObjectRef": { + "AIGD.ObjectRef": { "type": "object", "properties": { "instanceID": { @@ -109,11 +127,29 @@ Any unknown or invalid fields and properties will be reported in the response. | "typeName" ], "additionalProperties": false + }, + "AIGD.PathPatch": { + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Slash-delimited path to the target field/element/entry. Plain segment navigates a field or property (e.g. 'admin' or 'admin/name'). Use '[i]' for array/list index (e.g. 'planets/[0]/orbitRadius'). Use '[key]' for dictionary entry (e.g. 'config/[timeout]'). A leading '#/' is stripped automatically. Required." + }, + "Value": { + "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember", + "description": "The new value to write at the path. Use the standard SerializedMember envelope: 'typeName' + 'value' for primitives, or nested 'fields'/'props' for complex types. Required — omitting it overwrites the target with a default empty SerializedMember." + } + } + }, + "System.Collections.Generic.List": { + "type": "array", + "items": { + "$ref": "#/$defs/AIGD.PathPatch" + } } }, "required": [ - "objectRef", - "objectDiff" + "objectRef" ] } ``` @@ -127,11 +163,11 @@ Any unknown or invalid fields and properties will be reported in the response. | "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Object+ModifyObjectResponse" + "$ref": "#/$defs/AIGD.ModifyObjectResponse" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.ObjectRef": { + "AIGD.ObjectRef": { "type": "object", "properties": { "instanceID": { @@ -192,7 +228,7 @@ Any unknown or invalid fields and properties will be reported in the response. | "type": "string" } }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Object+ModifyObjectResponse": { + "AIGD.ModifyObjectResponse": { "type": "object", "properties": { "Success": { @@ -200,7 +236,7 @@ Any unknown or invalid fields and properties will be reported in the response. | "description": "Whether the modification was successful." }, "Reference": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ObjectRef", + "$ref": "#/$defs/AIGD.ObjectRef", "description": "Reference to the modified object." }, "Data": { diff --git a/.agents/skills/package-list/SKILL.md b/.agents/skills/package-list/SKILL.md index 8a7ffacb..642b6eab 100644 --- a/.agents/skills/package-list/SKILL.md +++ b/.agents/skills/package-list/SKILL.md @@ -78,11 +78,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/System.Collections.Generic.List" + "$ref": "#/$defs/System.Collections.Generic.List" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Package+PackageData": { + "AIGD.PackageData": { "type": "object", "properties": { "Name": { @@ -112,10 +112,10 @@ Read the /unity-initial-setup skill for detailed installation instructions. }, "description": "Package information returned from package list operation." }, - "System.Collections.Generic.List": { + "System.Collections.Generic.List": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Package+PackageData", + "$ref": "#/$defs/AIGD.PackageData", "description": "Package information returned from package list operation." } } diff --git a/.agents/skills/package-search/SKILL.md b/.agents/skills/package-search/SKILL.md index 3c735943..04af8311 100644 --- a/.agents/skills/package-search/SKILL.md +++ b/.agents/skills/package-search/SKILL.md @@ -72,11 +72,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/System.Collections.Generic.List" + "$ref": "#/$defs/System.Collections.Generic.List" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Package+PackageSearchResult": { + "AIGD.PackageSearchResult": { "type": "object", "properties": { "Name": { @@ -119,10 +119,10 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "string" } }, - "System.Collections.Generic.List": { + "System.Collections.Generic.List": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Package+PackageSearchResult", + "$ref": "#/$defs/AIGD.PackageSearchResult", "description": "Package search result with available versions." } } diff --git a/.agents/skills/particle-system-get/SKILL.md b/.agents/skills/particle-system-get/SKILL.md index eb4f310c..c67feaf3 100644 --- a/.agents/skills/particle-system-get/SKILL.md +++ b/.agents/skills/particle-system-get/SKILL.md @@ -98,10 +98,10 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "gameObjectRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef" + "$ref": "#/$defs/AIGD.GameObjectRef" }, "componentRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef" + "$ref": "#/$defs/AIGD.ComponentRef" }, "includeMain": { "type": "boolean" @@ -186,7 +186,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { @@ -219,7 +219,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. ], "description": "Find GameObject in opened Prefab or in the active Scene." }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef": { + "AIGD.ComponentRef": { "type": "object", "properties": { "index": { @@ -262,7 +262,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { @@ -298,7 +298,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef": { + "AIGD.ComponentRef": { "type": "object", "properties": { "index": { @@ -366,11 +366,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "gameObjectRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef", + "$ref": "#/$defs/AIGD.GameObjectRef", "description": "Reference to the GameObject containing the ParticleSystem component." }, "componentRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef", + "$ref": "#/$defs/AIGD.ComponentRef", "description": "Reference to the ParticleSystem component." }, "componentIndex": { diff --git a/.agents/skills/particle-system-modify/SKILL.md b/.agents/skills/particle-system-modify/SKILL.md index b8b1b535..3e670250 100644 --- a/.agents/skills/particle-system-modify/SKILL.md +++ b/.agents/skills/particle-system-modify/SKILL.md @@ -94,10 +94,10 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "gameObjectRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef" + "$ref": "#/$defs/AIGD.GameObjectRef" }, "componentRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef" + "$ref": "#/$defs/AIGD.ComponentRef" }, "main": { "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember" @@ -176,7 +176,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { @@ -209,7 +209,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. ], "description": "Find GameObject in opened Prefab or in the active Scene." }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef": { + "AIGD.ComponentRef": { "type": "object", "properties": { "index": { @@ -294,7 +294,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { @@ -330,7 +330,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef": { + "AIGD.ComponentRef": { "type": "object", "properties": { "index": { @@ -366,11 +366,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "description": "Whether the modification was successful." }, "gameObjectRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef", + "$ref": "#/$defs/AIGD.GameObjectRef", "description": "Reference to the GameObject containing the ParticleSystem component." }, "componentRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentRef", + "$ref": "#/$defs/AIGD.ComponentRef", "description": "Reference to the modified ParticleSystem component." }, "componentIndex": { diff --git a/.agents/skills/scene-create/SKILL.md b/.agents/skills/scene-create/SKILL.md index 0225c6ed..556c1b82 100644 --- a/.agents/skills/scene-create/SKILL.md +++ b/.agents/skills/scene-create/SKILL.md @@ -88,12 +88,12 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.SceneDataShallow", + "$ref": "#/$defs/AIGD.SceneDataShallow", "description": "Scene reference. Used to find a Scene." } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.SceneDataShallow": { + "AIGD.SceneDataShallow": { "type": "object", "properties": { "Name": { diff --git a/.agents/skills/scene-get-data/SKILL.md b/.agents/skills/scene-get-data/SKILL.md index 125444c7..98be78e1 100644 --- a/.agents/skills/scene-get-data/SKILL.md +++ b/.agents/skills/scene-get-data/SKILL.md @@ -1,6 +1,10 @@ --- name: scene-get-data -description: This tool retrieves the list of root GameObjects in the specified scene. Use 'scene-list-opened' tool to get the list of all opened scenes. +description: |- + This tool retrieves the list of root GameObjects in the specified scene. Use 'scene-list-opened' tool to get the list of all opened scenes. + + Path-scoped reads (token-saving): supply 'paths' (a list of paths) to read only the listed fields/elements from the scene's root-GameObjects array via Reflector.TryReadAt, or 'viewQuery' (a ViewQuery) to navigate/filter the same array via Reflector.View. The result populates 'Data' on the returned SceneData. These two parameters are mutually exclusive. + Path syntax: 'fieldName', 'nested/field', 'arrayField/[i]', 'dictField/[key]'. Leading '#/' is stripped. Example: paths=['[0]/name'] reads the name of the first root GameObject. --- # Scene / Get Data @@ -13,7 +17,9 @@ unity-mcp-cli run-tool scene-get-data --input '{ "includeRootGameObjects": false, "includeChildrenDepth": 0, "includeBounds": false, - "includeData": false + "includeData": false, + "paths": "string_value", + "viewQuery": "string_value" }' ``` @@ -44,6 +50,8 @@ Read the /unity-initial-setup skill for detailed installation instructions. | `includeChildrenDepth` | `integer` | No | Determines the depth of the hierarchy to include. | | `includeBounds` | `boolean` | No | If true, includes bounding box information for GameObjects. | | `includeData` | `boolean` | No | If true, includes component data for GameObjects. | +| `paths` | `any` | No | Optional. List of paths to read individually via Reflector.TryReadAt against the scene's root-GameObjects array. Path syntax: 'fieldName', '[i]/field', '[i]/component/[j]/property'. Mutually exclusive with 'viewQuery'. | +| `viewQuery` | `any` | No | Optional. View-query filter routed through Reflector.View on the scene's root-GameObjects array. Mutually exclusive with 'paths'. | ### Input JSON Schema @@ -65,6 +73,44 @@ Read the /unity-initial-setup skill for detailed installation instructions. }, "includeData": { "type": "boolean" + }, + "paths": { + "$ref": "#/$defs/System.Collections.Generic.List" + }, + "viewQuery": { + "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.ViewQuery" + } + }, + "$defs": { + "System.Collections.Generic.List": { + "type": "array", + "items": { + "type": "string" + } + }, + "System.Type": { + "type": "string" + }, + "com.IvanMurzak.ReflectorNet.Model.ViewQuery": { + "type": "object", + "properties": { + "Path": { + "type": "string", + "description": "Navigate to this path first, then serialize only that subtree. Path segments are separated by '/'. Use '[i]' for array/list index (e.g. 'users/[2]/name') and '[key]' for dictionary entry (e.g. 'config/[timeout]'). A leading '#/' is stripped automatically. Examples: 'admin/name', 'users/[0]/email', 'config/[timeout]'. Leave null to start from the root object." + }, + "NamePattern": { + "type": "string", + "description": "Case-insensitive .NET regex pattern matched against field and property names. Only branches containing at least one match are kept in the result tree. Examples: 'orbitRadius' (exact name), 'orbit.*' (prefix match), 'radius|speed' (either name). When nothing matches, the root envelope is returned with empty fields/props. Leave null to return all fields and properties without filtering." + }, + "MaxDepth": { + "type": "integer", + "description": "Maximum nesting depth of the returned serialized tree. 0 = root type name and value only — no nested fields or properties. 1 = one level of fields/props visible, their children stripped. 2 = two levels visible, and so on. Leave null (default) for unlimited depth." + }, + "TypeFilter": { + "$ref": "#/$defs/System.Type", + "description": "When set, prunes the result tree to members whose runtime type is assignable to this type. Non-matching branches are removed; the root envelope is always preserved. Examples: typeof(float) keeps only float fields, typeof(IEnumerable) keeps only collections. Leave null to include members of any type." + } + } } } } @@ -79,22 +125,22 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.SceneData", + "$ref": "#/$defs/AIGD.SceneData", "description": "Scene reference. Used to find a Scene." } }, "$defs": { - "System.Collections.Generic.List": { + "System.Collections.Generic.List": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectData" + "$ref": "#/$defs/AIGD.GameObjectData" } }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectData": { + "AIGD.GameObjectData": { "type": "object", "properties": { "Reference": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef", + "$ref": "#/$defs/AIGD.GameObjectRef", "description": "Find GameObject in opened Prefab or in the active Scene." }, "Data": { @@ -106,16 +152,16 @@ Read the /unity-initial-setup skill for detailed installation instructions. "description": "Bounds of the GameObject." }, "Hierarchy": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectMetadata", + "$ref": "#/$defs/AIGD.GameObjectMetadata", "description": "Hierarchy metadata of the GameObject." }, "Components": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentDataShallow[]", + "$ref": "#/$defs/AIGD.ComponentDataShallow[]", "description": "Attached components shallow data of the GameObject (Read-only, use Component modification tool for modification)." } } }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { @@ -241,7 +287,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. ], "additionalProperties": false }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectMetadata": { + "AIGD.GameObjectMetadata": { "type": "object", "properties": { "instanceID": { @@ -266,7 +312,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "boolean" }, "children": { - "$ref": "#/$defs/System.Collections.Generic.List" + "$ref": "#/$defs/System.Collections.Generic.List" } }, "required": [ @@ -275,19 +321,19 @@ Read the /unity-initial-setup skill for detailed installation instructions. "activeInHierarchy" ] }, - "System.Collections.Generic.List": { + "System.Collections.Generic.List": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectMetadata" + "$ref": "#/$defs/AIGD.GameObjectMetadata" } }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentDataShallow[]": { + "AIGD.ComponentDataShallow[]": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentDataShallow" + "$ref": "#/$defs/AIGD.ComponentDataShallow" } }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.ComponentDataShallow": { + "AIGD.ComponentDataShallow": { "type": "object", "properties": { "instanceID": { @@ -310,11 +356,15 @@ Read the /unity-initial-setup skill for detailed installation instructions. "isEnabled" ] }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.SceneData": { + "AIGD.SceneData": { "type": "object", "properties": { "RootGameObjects": { - "$ref": "#/$defs/System.Collections.Generic.List" + "$ref": "#/$defs/System.Collections.Generic.List" + }, + "Data": { + "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMember", + "description": "Path-scoped read or view-query result, populated when 'paths' or 'viewQuery' is supplied to the scene-get-data tool. Null otherwise." }, "Name": { "type": "string" diff --git a/.agents/skills/scene-list-opened/SKILL.md b/.agents/skills/scene-list-opened/SKILL.md index b23d0786..431728eb 100644 --- a/.agents/skills/scene-list-opened/SKILL.md +++ b/.agents/skills/scene-list-opened/SKILL.md @@ -59,11 +59,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.SceneDataShallow[]" + "$ref": "#/$defs/AIGD.SceneDataShallow[]" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.SceneDataShallow": { + "AIGD.SceneDataShallow": { "type": "object", "properties": { "Name": { @@ -109,10 +109,10 @@ Read the /unity-initial-setup skill for detailed installation instructions. ], "description": "Scene reference. Used to find a Scene." }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.SceneDataShallow[]": { + "AIGD.SceneDataShallow[]": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.SceneDataShallow", + "$ref": "#/$defs/AIGD.SceneDataShallow", "description": "Scene reference. Used to find a Scene." } } diff --git a/.agents/skills/scene-open/SKILL.md b/.agents/skills/scene-open/SKILL.md index 800189e8..3e2c30eb 100644 --- a/.agents/skills/scene-open/SKILL.md +++ b/.agents/skills/scene-open/SKILL.md @@ -46,7 +46,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "sceneRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef" + "$ref": "#/$defs/AIGD.AssetObjectRef" }, "loadSceneMode": { "type": "string", @@ -61,7 +61,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef": { + "AIGD.AssetObjectRef": { "type": "object", "properties": { "instanceID": { @@ -102,11 +102,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.SceneDataShallow[]" + "$ref": "#/$defs/AIGD.SceneDataShallow[]" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.SceneDataShallow": { + "AIGD.SceneDataShallow": { "type": "object", "properties": { "Name": { @@ -152,10 +152,10 @@ Read the /unity-initial-setup skill for detailed installation instructions. ], "description": "Scene reference. Used to find a Scene." }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.SceneDataShallow[]": { + "AIGD.SceneDataShallow[]": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.SceneDataShallow", + "$ref": "#/$defs/AIGD.SceneDataShallow", "description": "Scene reference. Used to find a Scene." } } diff --git a/.agents/skills/scene-set-active/SKILL.md b/.agents/skills/scene-set-active/SKILL.md index d77d417b..2755de41 100644 --- a/.agents/skills/scene-set-active/SKILL.md +++ b/.agents/skills/scene-set-active/SKILL.md @@ -44,14 +44,14 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "sceneRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef" + "$ref": "#/$defs/AIGD.AssetObjectRef" } }, "$defs": { "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef": { + "AIGD.AssetObjectRef": { "type": "object", "properties": { "instanceID": { @@ -92,11 +92,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.SceneDataShallow[]" + "$ref": "#/$defs/AIGD.SceneDataShallow[]" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.SceneDataShallow": { + "AIGD.SceneDataShallow": { "type": "object", "properties": { "Name": { @@ -142,10 +142,10 @@ Read the /unity-initial-setup skill for detailed installation instructions. ], "description": "Scene reference. Used to find a Scene." }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.SceneDataShallow[]": { + "AIGD.SceneDataShallow[]": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.SceneDataShallow", + "$ref": "#/$defs/AIGD.SceneDataShallow", "description": "Scene reference. Used to find a Scene." } } diff --git a/.agents/skills/scene-unload/SKILL.md b/.agents/skills/scene-unload/SKILL.md index 60371466..105f95e5 100644 --- a/.agents/skills/scene-unload/SKILL.md +++ b/.agents/skills/scene-unload/SKILL.md @@ -62,11 +62,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Scene+UnloadSceneResult" + "$ref": "#/$defs/AIGD.UnloadSceneResult" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef": { + "AIGD.AssetObjectRef": { "type": "object", "properties": { "instanceID": { @@ -94,7 +94,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Scene+UnloadSceneResult": { + "AIGD.UnloadSceneResult": { "type": "object", "properties": { "Name": { @@ -102,7 +102,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "description": "Name of the unloaded scene." }, "AssetObjectRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.AssetObjectRef", + "$ref": "#/$defs/AIGD.AssetObjectRef", "description": "Reference to the unloaded scene asset." } } diff --git a/.agents/skills/screenshot-camera/SKILL.md b/.agents/skills/screenshot-camera/SKILL.md index 4d89a34d..10b1e0ab 100644 --- a/.agents/skills/screenshot-camera/SKILL.md +++ b/.agents/skills/screenshot-camera/SKILL.md @@ -48,7 +48,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "cameraRef": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef" + "$ref": "#/$defs/AIGD.GameObjectRef" }, "width": { "type": "integer" @@ -61,7 +61,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "System.Type": { "type": "string" }, - "com.IvanMurzak.Unity.MCP.Runtime.Data.GameObjectRef": { + "AIGD.GameObjectRef": { "type": "object", "properties": { "instanceID": { diff --git a/.agents/skills/script-execute/SKILL.md b/.agents/skills/script-execute/SKILL.md index 6a25b17b..2402b4e0 100644 --- a/.agents/skills/script-execute/SKILL.md +++ b/.agents/skills/script-execute/SKILL.md @@ -1,6 +1,6 @@ --- name: script-execute -description: Compiles and executes C# code dynamically using Roslyn. The provided code must define a class with a static method to execute. +description: "Compiles and executes C# code dynamically using Roslyn. Supports two modes: full code mode (default) requires a complete class definition, while body-only mode (isMethodBody=true) auto-generates the boilerplate so you only provide the method body. Unity objects (GameObject, Component, etc.) can be passed as parameters using their Ref types (GameObjectRef, ComponentRef, etc.) or directly by type." --- # Script / Execute @@ -12,7 +12,8 @@ unity-mcp-cli run-tool script-execute --input '{ "csharpCode": "string_value", "className": "string_value", "methodName": "string_value", - "parameters": "string_value" + "parameters": "string_value", + "isMethodBody": false }' ``` @@ -38,10 +39,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. | Name | Type | Required | Description | |------|------|----------|-------------| -| `csharpCode` | `string` | Yes | C# code that compiles and executes immediately. It won't be stored as a script in the project. It is temporary one shot C# code execution using Roslyn. IMPORTANT: The code must define a class (e.g., 'public class Script') with a static method (e.g., 'public static object Main()'). Do NOT use top-level statements or code outside a class. Top-level statements are not supported and will cause compilation errors. | -| `className` | `string` | No | The name of the class containing the method to execute. | -| `methodName` | `string` | No | The name of the method to execute. It must be a static method in the class provided above. | -| `parameters` | `any` | No | Serialized parameters to pass to the method. If the method does not require parameters, leave this empty. | +| `csharpCode` | `string` | Yes | C# code to compile and execute. In full code mode (default, isMethodBody=false): must define a complete class with a static method. Example: 'using UnityEngine; public class Script { public static void Main() { Debug.Log("Hello"); } }'. Do NOT use top-level statements. In body-only mode (isMethodBody=true): provide only the method body statements. The tool auto-generates usings, class, and method header. Example body: 'go.SetActive(false);'. Custom helper classes can still be defined inline in the body-only string after the main logic, but for complex additional class definitions use full code mode instead. | +| `className` | `string` | No | The name of the class containing the method to execute. In body-only mode this becomes the generated class name. | +| `methodName` | `string` | No | The name of the method to execute. Must be a static method. In body-only mode this becomes the generated method name. | +| `parameters` | `any` | No | Serialized parameters to pass to the method. Each entry must specify 'name' and 'typeName'. Supported parameter types include primitives, strings, and Unity object references: - 'UnityEngine.GameObject': resolves an actual GameObject from value '{"instanceID": N}', '{"name": "..."}', or '{"path": "..."}'. - 'UnityEngine.Component' (or any component subtype): resolves from '{"instanceID": N}'. - 'AIGD.GameObjectRef': passes a GameObjectRef POCO directly; the method body calls goRef.FindGameObject() to resolve it. - 'AIGD.ComponentRef': passes a ComponentRef POCO. - 'AIGD.ObjectRef': passes a base ObjectRef POCO. If the method does not require parameters, leave this empty. | +| `isMethodBody` | `boolean` | No | When true, 'csharpCode' is treated as just the method body. The tool auto-generates standard using directives (System, UnityEngine, AIGD, com.IvanMurzak.Unity.MCP.Runtime.Extensions, UnityEditor), the class definition, and the method signature (void return type). Parameters from the 'parameters' list are automatically added to the method signature using their typeName and name. When false (default), 'csharpCode' must be a complete C# compilation unit with class and method definitions. | ### Input JSON Schema @@ -60,6 +62,9 @@ Read the /unity-initial-setup skill for detailed installation instructions. }, "parameters": { "$ref": "#/$defs/com.IvanMurzak.ReflectorNet.Model.SerializedMemberList" + }, + "isMethodBody": { + "type": "boolean" } }, "$defs": { diff --git a/.agents/skills/tool-list/SKILL.md b/.agents/skills/tool-list/SKILL.md index 31269fbb..5153678c 100644 --- a/.agents/skills/tool-list/SKILL.md +++ b/.agents/skills/tool-list/SKILL.md @@ -83,11 +83,11 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Tool+ToolInfoData[]" + "$ref": "#/$defs/AIGD.ToolInfoData[]" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Tool+ToolInfoData": { + "AIGD.ToolInfoData": { "type": "object", "properties": { "name": { @@ -99,20 +99,20 @@ Read the /unity-initial-setup skill for detailed installation instructions. "description": "Tool description." }, "inputs": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Tool+ToolInputData[]", + "$ref": "#/$defs/AIGD.ToolInputData[]", "description": "Tool input arguments." } }, "description": "MCP tool information." }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Tool+ToolInputData[]": { + "AIGD.ToolInputData[]": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Tool+ToolInputData", + "$ref": "#/$defs/AIGD.ToolInputData", "description": "MCP tool input argument." } }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Tool+ToolInputData": { + "AIGD.ToolInputData": { "type": "object", "properties": { "name": { @@ -126,10 +126,10 @@ Read the /unity-initial-setup skill for detailed installation instructions. }, "description": "MCP tool input argument." }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Tool+ToolInfoData[]": { + "AIGD.ToolInfoData[]": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Tool+ToolInfoData", + "$ref": "#/$defs/AIGD.ToolInfoData", "description": "MCP tool information." } } diff --git a/.agents/skills/tool-set-enabled-state/SKILL.md b/.agents/skills/tool-set-enabled-state/SKILL.md index e20a34ef..81f99a51 100644 --- a/.agents/skills/tool-set-enabled-state/SKILL.md +++ b/.agents/skills/tool-set-enabled-state/SKILL.md @@ -46,14 +46,14 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "tools": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Tool+InputData[]" + "$ref": "#/$defs/AIGD.ToolToggleInput[]" }, "includeLogs": { "$ref": "#/$defs/System.Boolean" } }, "$defs": { - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Tool+InputData": { + "AIGD.ToolToggleInput": { "type": "object", "properties": { "Name": { @@ -69,10 +69,10 @@ Read the /unity-initial-setup skill for detailed installation instructions. "Enabled" ] }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Tool+InputData[]": { + "AIGD.ToolToggleInput[]": { "type": "array", "items": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Tool+InputData" + "$ref": "#/$defs/AIGD.ToolToggleInput" } }, "System.Boolean": { @@ -94,7 +94,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "object", "properties": { "result": { - "$ref": "#/$defs/com.IvanMurzak.Unity.MCP.Editor.API.Tool_Tool+ResultData" + "$ref": "#/$defs/AIGD.ToolToggleResult" } }, "$defs": { @@ -137,7 +137,7 @@ Read the /unity-initial-setup skill for detailed installation instructions. "type": "boolean" } }, - "com.IvanMurzak.Unity.MCP.Editor.API.Tool_Tool+ResultData": { + "AIGD.ToolToggleResult": { "type": "object", "properties": { "Logs": { diff --git a/.agents/skills/unity-skill-create/SKILL.md b/.agents/skills/unity-skill-create/SKILL.md index 45de7be2..b9ea5bac 100644 --- a/.agents/skills/unity-skill-create/SKILL.md +++ b/.agents/skills/unity-skill-create/SKILL.md @@ -5,131 +5,7 @@ description: |- It must be a partial class decorated with [McpPluginToolType]. Each tool method must be decorated with [McpPluginTool]. The class name should match the file name. All Unity API calls must use com.IvanMurzak.ReflectorNet.Utils.MainThread.Instance.Run(). Return a data model for structured output, or void for side-effect-only operations. - Full sample: - ```csharp - #nullable enable - using System; - using System.ComponentModel; - using com.IvanMurzak.McpPlugin; - using com.IvanMurzak.ReflectorNet.Utils; - using com.IvanMurzak.Unity.MCP.Editor.Utils; - using com.IvanMurzak.Unity.MCP.Runtime.Data; - using UnityEditor; - using UnityEngine; - - namespace com.IvanMurzak.Unity.MCP.Editor.API - { - [McpPluginToolType] - public partial class Tool_Sample - { - [McpPluginTool("sample-get", Title = "Sample / Get")] - [Description("Finds a GameObject and returns its ref data.")] - public GameObjectRef Get - ( - [Description("Name of the GameObject to find.")] - string name - ) - { - return MainThread.Instance.Run(() => - { - var go = GameObject.Find(name) - ?? throw new ArgumentException($"GameObject '{name}' not found.", nameof(name)); - - return new GameObjectRef(go); - }); - } - - [McpPluginTool("sample-rename", Title = "Sample / Rename")] - [Description("Renames a GameObject.")] - public void Rename - ( - [Description("Current name of the GameObject.")] - string name, - [Description("New name to assign.")] - string newName - ) - { - MainThread.Instance.Run(() => - { - var go = GameObject.Find(name) - ?? throw new ArgumentException($"GameObject '{name}' not found.", nameof(name)); - - go.name = newName; - EditorUtility.SetDirty(go); - AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport); - EditorUtils.RepaintAllEditorWindows(); - }); - } - } - } - ``` - ## Suggestions - - ### Refresh UI after visual changes - If the skill modifies anything visually in the Unity Editor (GameObjects, components, materials, etc.), call these two lines at the end of the tool method to apply changes to the UI immediately: - ```csharp - AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport); - EditorUtils.RepaintAllEditorWindows(); - ``` - - ### Refresh AssetDatabase after asset or script changes - If the skill creates, modifies, or deletes any asset file or .cs script on disk outside of Unity API, call this inside a `MainThread.Instance.Run()` block to ensure Unity picks up the changes: - ```csharp - MainThread.Instance.Run(() => - { - AssetDatabase.Refresh(ImportAssetOptions.ForceSynchronousImport); - }); - ``` - - ### Use processing mechanic for long-running or domain-reload operations - Some operations take time to complete and may trigger a Unity domain reload (e.g. writing a .cs script, switching play mode, running tests, adding a package). In these cases the tool must NOT block and wait — instead it must: - 1. Accept a `[RequestID] string? requestId` parameter. - 2. Return `ResponseCallTool.Processing("...").SetRequestID(requestId)` immediately. - 3. Schedule the actual work asynchronously via `MainThread.Instance.RunAsync(async () => { await Task.Yield(); ... })`. - 4. When the operation finishes, send the final result by calling: - ```csharp - _ = UnityMcpPluginEditor.NotifyToolRequestCompleted(new RequestToolCompletedData - { - RequestId = requestId, - Result = ResponseCallTool.Success("Operation completed.").SetRequestID(requestId) - }); - ``` - If the operation may survive a domain reload (e.g. a .cs file was saved and Unity will recompile), use `ScriptUtils.SchedulePostCompilationNotification(requestId, filePath, operationType)` instead of calling `NotifyToolRequestCompleted` directly — it persists the pending notification to `SessionState` and sends it automatically after the domain reload completes. For package install/removal or other non-compilation domain reloads use `PackageUtils.SchedulePostDomainReloadNotification(requestId, label, action, expectedResult)` the same way. - - ### Return structured data with a typed response - Prefer returning a structured data model over a plain string so the AI can parse individual fields. Declare a nested class with `[Description]` on each property and use `ResponseCallValueTool` as return type: - ```csharp - // Return type: - public ResponseCallValueTool MyTool(...) - { - return ResponseCallValueTool.Success(new MyResult - { - Name = go.name, - InstanceID = go.GetInstanceID() - }).SetRequestID(requestId); - } - - // Data model: - public class MyResult - { - [Description("Name of the GameObject.")] - public string? Name { get; set; } - - [Description("Unity instance ID of the GameObject.")] - public int InstanceID { get; set; } - } - ``` - For simpler cases that do not need async/processing, you may return the model directly (without `ResponseCallValueTool`) and Unity-MCP will wrap it automatically. - - ### Validate inputs early and throw clearly - Always validate required parameters at the top of the method before any Unity API calls. Throw `ArgumentException` or `InvalidOperationException` with descriptive messages so the AI knows exactly what went wrong and can self-correct: - ```csharp - if (string.IsNullOrEmpty(name)) - throw new ArgumentException("Name cannot be null or empty.", nameof(name)); - ``` - - ### Always use MainThread for Unity API calls - All Unity API calls (including `GameObject.Find`, `AssetDatabase`, `EditorUtility`, etc.) MUST run on the main thread. Wrap them in `MainThread.Instance.Run(() => { ... })` for synchronous operations, or `MainThread.Instance.RunAsync(async () => { ... })` when you need to await inside. + Full sample:… --- # Skill (Tool) / Create diff --git a/Assets/_Project/Animations/Pet/Pet_Devil.controller b/Assets/_Project/Animations/Pet/Pet_Devil.controller index da2c46d6..7b83beab 100644 --- a/Assets/_Project/Animations/Pet/Pet_Devil.controller +++ b/Assets/_Project/Animations/Pet/Pet_Devil.controller @@ -176,7 +176,7 @@ AnimatorState: m_MirrorParameterActive: 0 m_CycleOffsetParameterActive: 0 m_TimeParameterActive: 0 - m_Motion: {fileID: 7400000, guid: 4f5a2cb8f6de4f8bbf3b0d0011aa1002, type: 2} + m_Motion: {fileID: 7400000, guid: c6f058150f954793a59f5f7a42a9f2c1, type: 2} m_Tag: m_SpeedParameter: m_MirrorParameter: @@ -202,7 +202,7 @@ AnimatorState: m_MirrorParameterActive: 0 m_CycleOffsetParameterActive: 0 m_TimeParameterActive: 0 - m_Motion: {fileID: 7400000, guid: 4f5a2cb8f6de4f8bbf3b0d0011aa1003, type: 2} + m_Motion: {fileID: 7400000, guid: 7e58f8b5b54a4918a4d7d1a72f6d2e3c, type: 2} m_Tag: m_SpeedParameter: m_MirrorParameter: diff --git a/Assets/_Project/Animations/Pet/Pet_Devil_Interact_PlayingMusic.anim b/Assets/_Project/Animations/Pet/Pet_Devil_Interact_PlayingMusic.anim new file mode 100644 index 00000000..b3ecbc94 --- /dev/null +++ b/Assets/_Project/Animations/Pet/Pet_Devil_Interact_PlayingMusic.anim @@ -0,0 +1,117 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Pet_Devil_Interact_PlayingMusic + serializedVersion: 7 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: + - serializedVersion: 2 + curve: + - time: 0 + value: {fileID: 21300000, guid: ef760d72dee82114cacb50ddd3f0b9d3, type: 3} + - time: 0.08333333 + value: {fileID: 21300000, guid: 16c30b8fa08cf0a43b03fc227493e6cb, type: 3} + - time: 0.16666667 + value: {fileID: 21300000, guid: c0496b2a2a29848478bfbacb4655f39e, type: 3} + - time: 0.25 + value: {fileID: 21300000, guid: a0d993d82c5dd5f4cb5ef941bc806a16, type: 3} + - time: 0.33333333 + value: {fileID: 21300000, guid: 8f02ebf4f8f36b74cad4dfc8f8e3918c, type: 3} + - time: 0.41666667 + value: {fileID: 21300000, guid: cd047325d73e4ac43afe338e846e48eb, type: 3} + - time: 0.5 + value: {fileID: 21300000, guid: 42ea3a23a511e904aa2299c3e367c87a, type: 3} + - time: 0.58333333 + value: {fileID: 21300000, guid: c35210fe37e892147b2876141d4f4bc6, type: 3} + - time: 0.66666667 + value: {fileID: 21300000, guid: 2db6d7ab445b08040baeb254e3988e95, type: 3} + - time: 0.75 + value: {fileID: 21300000, guid: c7ebc0826fb566f478b4958caf8110c2, type: 3} + - time: 0.83333333 + value: {fileID: 21300000, guid: ed894fed3e1470d4d8316d99a55b95d3, type: 3} + - time: 0.91666667 + value: {fileID: 21300000, guid: f86005c1f19af8546bbf022a4226b631, type: 3} + - time: 1 + value: {fileID: 21300000, guid: b29a7877b0d59f8449df451cae251c1a, type: 3} + - time: 1.08333333 + value: {fileID: 21300000, guid: 4930f61004fb22643b461c95f3586fd0, type: 3} + - time: 1.16666667 + value: {fileID: 21300000, guid: 6aacb8b564e302443b7fd31996cac637, type: 3} + - time: 1.25 + value: {fileID: 21300000, guid: 461a31c47804bb64c9acebf37107ff4f, type: 3} + attribute: m_Sprite + path: + classID: 212 + script: {fileID: 0} + flags: 2 + m_SampleRate: 12 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 0 + script: {fileID: 0} + typeID: 212 + customType: 23 + isPPtrCurve: 1 + isIntCurve: 0 + isSerializeReferenceCurve: 0 + pptrCurveMapping: + - {fileID: 21300000, guid: ef760d72dee82114cacb50ddd3f0b9d3, type: 3} + - {fileID: 21300000, guid: 16c30b8fa08cf0a43b03fc227493e6cb, type: 3} + - {fileID: 21300000, guid: c0496b2a2a29848478bfbacb4655f39e, type: 3} + - {fileID: 21300000, guid: a0d993d82c5dd5f4cb5ef941bc806a16, type: 3} + - {fileID: 21300000, guid: 8f02ebf4f8f36b74cad4dfc8f8e3918c, type: 3} + - {fileID: 21300000, guid: cd047325d73e4ac43afe338e846e48eb, type: 3} + - {fileID: 21300000, guid: 42ea3a23a511e904aa2299c3e367c87a, type: 3} + - {fileID: 21300000, guid: c35210fe37e892147b2876141d4f4bc6, type: 3} + - {fileID: 21300000, guid: 2db6d7ab445b08040baeb254e3988e95, type: 3} + - {fileID: 21300000, guid: c7ebc0826fb566f478b4958caf8110c2, type: 3} + - {fileID: 21300000, guid: ed894fed3e1470d4d8316d99a55b95d3, type: 3} + - {fileID: 21300000, guid: f86005c1f19af8546bbf022a4226b631, type: 3} + - {fileID: 21300000, guid: b29a7877b0d59f8449df451cae251c1a, type: 3} + - {fileID: 21300000, guid: 4930f61004fb22643b461c95f3586fd0, type: 3} + - {fileID: 21300000, guid: 6aacb8b564e302443b7fd31996cac637, type: 3} + - {fileID: 21300000, guid: 461a31c47804bb64c9acebf37107ff4f, type: 3} + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1.3333334 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/_Project/Animations/Pet/Pet_Devil_Interact_PlayingMusic.anim.meta b/Assets/_Project/Animations/Pet/Pet_Devil_Interact_PlayingMusic.anim.meta new file mode 100644 index 00000000..0f5d7074 --- /dev/null +++ b/Assets/_Project/Animations/Pet/Pet_Devil_Interact_PlayingMusic.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c6f058150f954793a59f5f7a42a9f2c1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Animations/Pet/Pet_Devil_Interact_Write.anim b/Assets/_Project/Animations/Pet/Pet_Devil_Interact_Write.anim new file mode 100644 index 00000000..9eb89dd5 --- /dev/null +++ b/Assets/_Project/Animations/Pet/Pet_Devil_Interact_Write.anim @@ -0,0 +1,108 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Pet_Devil_Interact_Write + serializedVersion: 7 + m_Legacy: 0 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: [] + m_FloatCurves: [] + m_PPtrCurves: + - serializedVersion: 2 + curve: + - time: 0 + value: {fileID: 21300000, guid: a66904a2434f15543ba3b397b94a0de7, type: 3} + - time: 0.08333333 + value: {fileID: 21300000, guid: 570259eb15577ae479b7f05f1484cced, type: 3} + - time: 0.16666667 + value: {fileID: 21300000, guid: f4d8430692f21934ab575303e2da7e61, type: 3} + - time: 0.25 + value: {fileID: 21300000, guid: c5420b06c772d0f43b2d931d4b2cdae0, type: 3} + - time: 0.33333333 + value: {fileID: 21300000, guid: cf037572413c8c445847af42379cba15, type: 3} + - time: 0.41666667 + value: {fileID: 21300000, guid: e67f894c2a71dfd42982a087902ecd40, type: 3} + - time: 0.5 + value: {fileID: 21300000, guid: fe8379ad484119249848de6b949289b1, type: 3} + - time: 0.58333333 + value: {fileID: 21300000, guid: a85e16c6c42c2074da0ab6e4b2e68432, type: 3} + - time: 0.66666667 + value: {fileID: 21300000, guid: 33fab30c54c4cc14189215232ac7df64, type: 3} + - time: 0.75 + value: {fileID: 21300000, guid: 756751db2a7a0bb499479ec779ff7eda, type: 3} + - time: 0.83333333 + value: {fileID: 21300000, guid: 74a4285d2e5823a4e8ace6557a232d22, type: 3} + - time: 0.91666667 + value: {fileID: 21300000, guid: f694384d20876cb44bb0d2ef89fb6eac, type: 3} + - time: 1 + value: {fileID: 21300000, guid: b216591779e56e043a37940b32412f61, type: 3} + attribute: m_Sprite + path: + classID: 212 + script: {fileID: 0} + flags: 2 + m_SampleRate: 12 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: + - serializedVersion: 2 + path: 0 + attribute: 0 + script: {fileID: 0} + typeID: 212 + customType: 23 + isPPtrCurve: 1 + isIntCurve: 0 + isSerializeReferenceCurve: 0 + pptrCurveMapping: + - {fileID: 21300000, guid: a66904a2434f15543ba3b397b94a0de7, type: 3} + - {fileID: 21300000, guid: 570259eb15577ae479b7f05f1484cced, type: 3} + - {fileID: 21300000, guid: f4d8430692f21934ab575303e2da7e61, type: 3} + - {fileID: 21300000, guid: c5420b06c772d0f43b2d931d4b2cdae0, type: 3} + - {fileID: 21300000, guid: cf037572413c8c445847af42379cba15, type: 3} + - {fileID: 21300000, guid: e67f894c2a71dfd42982a087902ecd40, type: 3} + - {fileID: 21300000, guid: fe8379ad484119249848de6b949289b1, type: 3} + - {fileID: 21300000, guid: a85e16c6c42c2074da0ab6e4b2e68432, type: 3} + - {fileID: 21300000, guid: 33fab30c54c4cc14189215232ac7df64, type: 3} + - {fileID: 21300000, guid: 756751db2a7a0bb499479ec779ff7eda, type: 3} + - {fileID: 21300000, guid: 74a4285d2e5823a4e8ace6557a232d22, type: 3} + - {fileID: 21300000, guid: f694384d20876cb44bb0d2ef89fb6eac, type: 3} + - {fileID: 21300000, guid: b216591779e56e043a37940b32412f61, type: 3} + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 1.5 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 1 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: [] + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/Assets/_Project/Animations/Pet/Pet_Devil_Interact_Write.anim.meta b/Assets/_Project/Animations/Pet/Pet_Devil_Interact_Write.anim.meta new file mode 100644 index 00000000..7d32465b --- /dev/null +++ b/Assets/_Project/Animations/Pet/Pet_Devil_Interact_Write.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7e58f8b5b54a4918a4d7d1a72f6d2e3c +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272.meta" new file mode 100644 index 00000000..5cf054c5 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272.meta" @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c23bff49ddf173246b462684c64ad7c4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272.meta" new file mode 100644 index 00000000..2e626990 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272.meta" @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a82e0d8ae6936c14fbcea4f3cc997b0a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\345\244\207\346\263\250\357\274\232\346\235\245\345\233\236\345\276\252\347\216\257.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\345\244\207\346\263\250\357\274\232\346\235\245\345\233\236\345\276\252\347\216\257.meta" new file mode 100644 index 00000000..dd4f5f73 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\345\244\207\346\263\250\357\274\232\346\235\245\345\233\236\345\276\252\347\216\257.meta" @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 001059cca8dd0b04dac8446d7a340a3c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 10.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 10.png" new file mode 100644 index 00000000..a9281be2 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 10.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06137641df68778cf79a5f1d780e5922fe7f53ad7f52162ba8151d3859b76631 +size 323511 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 10.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 10.png.meta" new file mode 100644 index 00000000..c24dd33f --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 10.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: c7ebc0826fb566f478b4958caf8110c2 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 11.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 11.png" new file mode 100644 index 00000000..50334a74 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 11.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a342635b4311f53debf53637fde9b30b086db259a8f2f430cb67714c759e9ec7 +size 321624 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 11.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 11.png.meta" new file mode 100644 index 00000000..2c73bfe2 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 11.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: ed894fed3e1470d4d8316d99a55b95d3 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 12.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 12.png" new file mode 100644 index 00000000..6ccd9bd3 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 12.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5382634f94e8dc62ad44f5239bc9e231096fb00d5c6b179348c64e6b83db96bb +size 378849 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 12.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 12.png.meta" new file mode 100644 index 00000000..d87d207c --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 12.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: f86005c1f19af8546bbf022a4226b631 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 13.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 13.png" new file mode 100644 index 00000000..54b9243c --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 13.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ea173662e1ba0bf1af66bdab71d0bde968742b9deb41a97da65077c211b031a +size 373549 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 13.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 13.png.meta" new file mode 100644 index 00000000..343348e0 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 13.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: b29a7877b0d59f8449df451cae251c1a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 14.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 14.png" new file mode 100644 index 00000000..3a3c1ac4 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 14.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8159e16d766c112ce01ebffbf32a964021916e62a035182666f2245e7a27f1f2 +size 382027 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 14.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 14.png.meta" new file mode 100644 index 00000000..44809591 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 14.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 4930f61004fb22643b461c95f3586fd0 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 15.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 15.png" new file mode 100644 index 00000000..c27bde1b --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 15.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0ee9c9f05276ccac9160c933ebcb05b2a7bc1422a49064a19a52d5fba8ead58 +size 379136 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 15.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 15.png.meta" new file mode 100644 index 00000000..fd05acb1 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 15.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 6aacb8b564e302443b7fd31996cac637 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 16.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 16.png" new file mode 100644 index 00000000..a3b3d176 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 16.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:345bf231355d1aa4b17192f87cf123febc1c2f9991bfd0d948919855bfe991b3 +size 373441 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 16.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 16.png.meta" new file mode 100644 index 00000000..6ed7c8a1 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 16.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 461a31c47804bb64c9acebf37107ff4f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 2.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 2.png" new file mode 100644 index 00000000..695f3424 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 2.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c43dfe3b3c538d1546ab4974d649f97e2027a78c222b7bfcc9420ae0ed81abd5 +size 320044 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 2.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 2.png.meta" new file mode 100644 index 00000000..ee55cd67 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 2.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 16c30b8fa08cf0a43b03fc227493e6cb +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 3\357\274\210\344\277\235\346\214\201\345\205\255\345\270\247\357\274\211.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 3\357\274\210\344\277\235\346\214\201\345\205\255\345\270\247\357\274\211.png" new file mode 100644 index 00000000..5ab64fc0 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 3\357\274\210\344\277\235\346\214\201\345\205\255\345\270\247\357\274\211.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:125dfaab2ab2a61f1a53967cdcfe337b967b4d74d3eddeb5cf048ea57d25cfde +size 323876 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 3\357\274\210\344\277\235\346\214\201\345\205\255\345\270\247\357\274\211.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 3\357\274\210\344\277\235\346\214\201\345\205\255\345\270\247\357\274\211.png.meta" new file mode 100644 index 00000000..1a383c95 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 3\357\274\210\344\277\235\346\214\201\345\205\255\345\270\247\357\274\211.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: c0496b2a2a29848478bfbacb4655f39e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 4.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 4.png" new file mode 100644 index 00000000..f65d03be --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 4.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:67793775633ac589a44d91efa206a7121576f780e5d50e2481e9f16a3db692a5 +size 318599 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 4.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 4.png.meta" new file mode 100644 index 00000000..4ff309e6 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 4.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: a0d993d82c5dd5f4cb5ef941bc806a16 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 5.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 5.png" new file mode 100644 index 00000000..6b9c7d10 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 5.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5e61136370827ce1d47348c3c41a9fa646d12f74fe9254bfb61513dbb28f1f7 +size 326613 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 5.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 5.png.meta" new file mode 100644 index 00000000..96ef0ac9 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 5.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 8f02ebf4f8f36b74cad4dfc8f8e3918c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 6.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 6.png" new file mode 100644 index 00000000..7bb46151 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 6.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01f8a0c99bebdf2fcefa19f0eacb799e2d0ff414eeb12f9f88b36fedf80f5214 +size 322423 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 6.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 6.png.meta" new file mode 100644 index 00000000..bbad99bf --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 6.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: cd047325d73e4ac43afe338e846e48eb +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 7.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 7.png" new file mode 100644 index 00000000..b92fe3b0 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 7.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4306069a69fcb2d673d13366c1fd19524e2f103d9f3dca4940dba8265d4b46b9 +size 324287 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 7.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 7.png.meta" new file mode 100644 index 00000000..8da39bb8 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 7.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 42ea3a23a511e904aa2299c3e367c87a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 8.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 8.png" new file mode 100644 index 00000000..fe027508 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 8.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53e54e90296f85cab3f19ef0567a334f772dee880fc5b71563cc1d02423d36b5 +size 320819 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 8.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 8.png.meta" new file mode 100644 index 00000000..ddfc0c15 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 8.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: c35210fe37e892147b2876141d4f4bc6 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 9.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 9.png" new file mode 100644 index 00000000..dd616b1c --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 9.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bf5716a4eaa85af34845f0b2c658acede4ab818daea5363a834aa0c2e6e694d7 +size 321962 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 9.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 9.png.meta" new file mode 100644 index 00000000..a3747ab2 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272 9.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 2db6d7ab445b08040baeb254e3988e95 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272.png" new file mode 100644 index 00000000..ce0df033 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3f8c207e61a2fbfa8b512f2145b43df62c37f059e062107bbb16e043c31729d +size 331703 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272.png.meta" new file mode 100644 index 00000000..3ed6427a --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272/\347\216\251\346\216\214\346\234\272.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: ef760d72dee82114cacb50ddd3f0b9d3 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1).meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1).meta" new file mode 100644 index 00000000..eb66eaa9 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1).meta" @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0b3314e6f12592241b31231a7144b5d2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273.meta" new file mode 100644 index 00000000..43c3a374 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273.meta" @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 534cfdfe5caec584699114a8d959d5d0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\345\244\207\346\263\250\357\274\232\346\235\245\345\233\236\345\276\252\347\216\257.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\345\244\207\346\263\250\357\274\232\346\235\245\345\233\236\345\276\252\347\216\257.meta" new file mode 100644 index 00000000..769e0f93 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\345\244\207\346\263\250\357\274\232\346\235\245\345\233\236\345\276\252\347\216\257.meta" @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d5b1f23062c14c4458990b8a02834823 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 10.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 10.png" new file mode 100644 index 00000000..9edffe72 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 10.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2f81ffebd0f1b5dc8544b6f4714750d1ca81886d0c4eb1aea969f8fb1456b2a +size 352489 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 10.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 10.png.meta" new file mode 100644 index 00000000..5d4f2e5d --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 10.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 756751db2a7a0bb499479ec779ff7eda +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 11.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 11.png" new file mode 100644 index 00000000..dd5597cc --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 11.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bbcf3b07025fc053fb5d6c9f082c26c57f99e269c551db42b6fc53b2f39e1f33 +size 346761 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 11.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 11.png.meta" new file mode 100644 index 00000000..3cc5fc05 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 11.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 74a4285d2e5823a4e8ace6557a232d22 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 12.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 12.png" new file mode 100644 index 00000000..36169384 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 12.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6499aaece4ad1fae04a34af57f37e7132fdf33e3b753ce7bfd607c6c25674446 +size 347683 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 12.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 12.png.meta" new file mode 100644 index 00000000..5ae2007b --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 12.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: f694384d20876cb44bb0d2ef89fb6eac +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 13\357\274\210\344\277\235\346\214\201\345\205\255\345\270\247\357\274\211.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 13\357\274\210\344\277\235\346\214\201\345\205\255\345\270\247\357\274\211.png" new file mode 100644 index 00000000..67f022de --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 13\357\274\210\344\277\235\346\214\201\345\205\255\345\270\247\357\274\211.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b91765c283a1a5fc1a3682e6a88f73a05251d808b9a3a741d9abf5e650712cc +size 344535 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 13\357\274\210\344\277\235\346\214\201\345\205\255\345\270\247\357\274\211.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 13\357\274\210\344\277\235\346\214\201\345\205\255\345\270\247\357\274\211.png.meta" new file mode 100644 index 00000000..591686ec --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 13\357\274\210\344\277\235\346\214\201\345\205\255\345\270\247\357\274\211.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: b216591779e56e043a37940b32412f61 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 2.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 2.png" new file mode 100644 index 00000000..0e2faa3b --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 2.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d99b6c34ff45c1ba4167a53e90e6356334178d81382dc2b08be1bfaf14640017 +size 350747 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 2.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 2.png.meta" new file mode 100644 index 00000000..f84956ec --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 2.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 570259eb15577ae479b7f05f1484cced +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 3.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 3.png" new file mode 100644 index 00000000..239fbfd7 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 3.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91f81a4604ce33ab66e068f11750dd50be9a985898de33cace8a2133cf6472c9 +size 347803 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 3.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 3.png.meta" new file mode 100644 index 00000000..5c5128fd --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 3.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: f4d8430692f21934ab575303e2da7e61 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 4.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 4.png" new file mode 100644 index 00000000..55d61794 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 4.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec3917618dcb471032ef111ca97b71889ac60bcf9765b6ba5eca12648a14869a +size 350320 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 4.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 4.png.meta" new file mode 100644 index 00000000..7470d388 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 4.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: c5420b06c772d0f43b2d931d4b2cdae0 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 5.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 5.png" new file mode 100644 index 00000000..429941b5 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 5.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:37cb5ef67f8bd42b64a0df12f614d6a2af3faf53602db677d6f5f366dd1c3a64 +size 347446 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 5.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 5.png.meta" new file mode 100644 index 00000000..f1188cfc --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 5.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: cf037572413c8c445847af42379cba15 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 6.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 6.png" new file mode 100644 index 00000000..9789e73d --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 6.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4014b258ca59c35edc85e63728433eae78ffb4937210f645af913d2361462685 +size 350787 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 6.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 6.png.meta" new file mode 100644 index 00000000..f8b23947 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 6.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: e67f894c2a71dfd42982a087902ecd40 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 7.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 7.png" new file mode 100644 index 00000000..f6547db5 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 7.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ca6bc5a9d8fd114b503c8f796e12c5aee48784eb58e9a67cbd2898a59eddc880 +size 347510 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 7.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 7.png.meta" new file mode 100644 index 00000000..726d631a --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 7.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: fe8379ad484119249848de6b949289b1 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 8.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 8.png" new file mode 100644 index 00000000..5170bff9 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 8.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0929b3bbc209027d7cd016c1236d930d8f74e297f910c092c7d87900805cec28 +size 350227 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 8.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 8.png.meta" new file mode 100644 index 00000000..b499e1d9 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 8.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: a85e16c6c42c2074da0ab6e4b2e68432 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 9.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 9.png" new file mode 100644 index 00000000..d0add7bf --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 9.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9aff41f28cae89fbfe2c93c7dcf39ca0d1facad4c7ec17e26d76e81a3d02782f +size 354591 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 9.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 9.png.meta" new file mode 100644 index 00000000..fc7cead3 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273 9.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: 33fab30c54c4cc14189215232ac7df64 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273.png" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273.png" new file mode 100644 index 00000000..2e25e27a --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273.png" @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12468c9e10f60530b0db879a3df138bd7d1612976bc832a4104df3294db93a55 +size 347551 diff --git "a/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273.png.meta" "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273.png.meta" new file mode 100644 index 00000000..b95e0199 --- /dev/null +++ "b/Assets/_Project/Art/Sprites/Pet/\346\201\266\351\255\224/Interact/self/\347\224\273\347\224\273(1)/\347\224\273\347\224\273/\347\224\273\347\224\273.png.meta" @@ -0,0 +1,114 @@ +fileFormatVersion: 2 +guid: a66904a2434f15543ba3b397b94a0de7 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Prefabs/README.md b/Assets/_Project/Prefabs/README.md index 22015cdb..3919885c 100644 --- a/Assets/_Project/Prefabs/README.md +++ b/Assets/_Project/Prefabs/README.md @@ -5,7 +5,9 @@ ## 当前真实状态 - `Furniture/` 当前已为 `Assets/_Project/Art/Sprites/Furniture/**/` 下的全部 `49` 个家具 Sprite 资源生成对应 prefab。 -- 这些 prefab 目前主要服务于家具作者化与场景稳态接线;`Pet/`、`UI/`、`Environment/`、`FX/` 仍未落到真实 prefab 交付。 +- `UI/Tarot/` 当前已有 `TarotHistoryEntry.prefab` 与 `TarotGuideCard.prefab` 两个真实 prefab。 +- `UI/Panels/` 与 `UI/Widgets/` 当前已建立 README 工程落点说明,但尚未沉淀正式 UI prefab;本轮不绑定任何具体 UI 美术资源。 +- 这些 prefab 目前主要服务于家具作者化、塔罗小控件与场景稳态接线;`Pet/`、`Environment/`、`FX/` 仍未落到真实 prefab 交付。 ## 子目录规划 diff --git a/Assets/_Project/Prefabs/UI/Panels.meta b/Assets/_Project/Prefabs/UI/Panels.meta new file mode 100644 index 00000000..47149d3b --- /dev/null +++ b/Assets/_Project/Prefabs/UI/Panels.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dbfbd05bfbb540d3ba7c45fb3169434c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Prefabs/UI/Panels/README.md b/Assets/_Project/Prefabs/UI/Panels/README.md new file mode 100644 index 00000000..c5affd5f --- /dev/null +++ b/Assets/_Project/Prefabs/UI/Panels/README.md @@ -0,0 +1,12 @@ +# UI/Panels + +## 当前定位 +这里是 Apartment / Hub UI 面板 prefab 的工程落点。 + +当前阶段只建立目录和收口规则,不在本轮绑定任何 `profile`、`spacesystem`、`tarot` 美术资源,也不把未定稿的场景 UI 强行转成 prefab。 + +## 后续迁移规则 +- `Panel_PetStatus`、`Panel_Tarot`、`Panel_Inventory`、`Panel_Collection`、`Panel_Garden` 后续稳定后迁入本目录。 +- 面板 prefab 根节点应挂对应 `IUIPanel` 实现,例如 `ProfilePanelStub`、`TarotPanelStub`、`InventoryPanelStub`。 +- 面板 prefab 只保存结构、组件引用和可复用行为;最终贴图、立绘和视觉定稿由人工美术作者化后再绑定。 +- 不允许 prefab 引用具体场景里的 GameObject。 diff --git a/Assets/_Project/Prefabs/UI/Panels/README.md.meta b/Assets/_Project/Prefabs/UI/Panels/README.md.meta new file mode 100644 index 00000000..d49776b4 --- /dev/null +++ b/Assets/_Project/Prefabs/UI/Panels/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5ac14c54af184799bfd2f7078cf32cf7 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Prefabs/UI/Widgets.meta b/Assets/_Project/Prefabs/UI/Widgets.meta new file mode 100644 index 00000000..1336de65 --- /dev/null +++ b/Assets/_Project/Prefabs/UI/Widgets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e11a33c243504796a2b00cb6e019f837 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Prefabs/UI/Widgets/README.md b/Assets/_Project/Prefabs/UI/Widgets/README.md new file mode 100644 index 00000000..a949faee --- /dev/null +++ b/Assets/_Project/Prefabs/UI/Widgets/README.md @@ -0,0 +1,12 @@ +# UI/Widgets + +## 当前定位 +这里是可复用 UI 小控件 prefab 的工程落点,例如列表项、页签按钮、Tooltip、塔罗历史条目、塔罗图鉴卡片等。 + +当前阶段只建立目录和收口规则,不在本轮制作或绑定任何新的美术资源。 + +## 后续迁移规则 +- `TarotHistoryEntry`、`TarotGuideCard` 后续可从 `UI/Tarot` 逐步归并到本目录或保留为 Tarot 子域 prefab。 +- Inventory slot、Collection entry、Garden plot / seed button 等运行时生成控件,稳定后可以沉淀为 prefab。 +- Widget prefab 必须通过序列化字段接收数据,不直接依赖场景对象名。 +- Widget 的视觉贴图、颜色与最终样式由人工美术作者化后再绑定。 diff --git a/Assets/_Project/Prefabs/UI/Widgets/README.md.meta b/Assets/_Project/Prefabs/UI/Widgets/README.md.meta new file mode 100644 index 00000000..5ab0bb80 --- /dev/null +++ b/Assets/_Project/Prefabs/UI/Widgets/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 26fb0bdda8ea46a0913c4f2d8be1aa2b +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Scenes/Apartment/Apartment_Main.unity b/Assets/_Project/Scenes/Apartment/Apartment_Main.unity index ee7986be..1ff8e494 100644 --- a/Assets/_Project/Scenes/Apartment/Apartment_Main.unity +++ b/Assets/_Project/Scenes/Apartment/Apartment_Main.unity @@ -3663,6 +3663,7 @@ MonoBehaviour: _expandedX: 0 _collapsedX: -200 _tabPetStatus: {fileID: 841398878} + _tabSpaceSys: {fileID: 969092514} _tabTarot: {fileID: 1672408446} _tabCollection: {fileID: 1295035279} _tabInventory: {fileID: 100503146} @@ -11354,6 +11355,89 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 634076964} m_CullTransparentMesh: 1 +--- !u!1 &635666493 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 635666495} + - component: {fileID: 635666494} + m_Layer: 0 + m_Name: ApartmentViewportCamera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!20 &635666494 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 635666493} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 2 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 1 + orthographic size: 10.2 + m_Depth: -2 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 8400000, guid: 3f4553a986a14dd6a783e0fef4b361c0, type: 2} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &635666495 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 635666493} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -0.02, y: 0, z: -20} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &639369233 PrefabInstance: m_ObjectHideFlags: 0 @@ -13980,6 +14064,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 259764009} + - {fileID: 1616570318} m_Father: {fileID: 1044771794} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -26660,6 +26745,82 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1610705090} m_CullTransparentMesh: 1 +--- !u!1 &1616570317 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1616570318} + - component: {fileID: 1616570321} + - component: {fileID: 1616570320} + m_Layer: 0 + m_Name: ApartmentViewportHost + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1616570318 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1616570317} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1972623425} + m_Father: {fileID: 780270976} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.04, y: 0.08} + m_AnchorMax: {x: 0.96, y: 0.92} + m_AnchoredPosition: {x: -72.88483, y: 0.000030517578} + m_SizeDelta: {x: 145.7695, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1616570320 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1616570317} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.06, g: 0.08, b: 0.12, a: 0.96} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1616570321 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1616570317} + m_CullTransparentMesh: 1 --- !u!1 &1620238039 GameObject: m_ObjectHideFlags: 0 @@ -31465,6 +31626,7 @@ MonoBehaviour: _tooltipName: {fileID: 46605157} _tooltipCategory: {fileID: 1653503910} _tooltipText: {fileID: 1560996562} + _emptyHint: {fileID: 0} _catalog: {fileID: 0} --- !u!1 &1896173037 GameObject: @@ -32598,6 +32760,94 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1971721613} m_CullTransparentMesh: 1 +--- !u!1 &1972623424 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1972623425} + - component: {fileID: 1972623427} + - component: {fileID: 1972623426} + - component: {fileID: 1972623428} + m_Layer: 0 + m_Name: ApartmentViewportImage + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1972623425 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972623424} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1616570318} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 2.3319702, y: 4.664093} + m_SizeDelta: {x: 52.292, y: 199.2079} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1972623426 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972623424} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1344c3c82d62a2a41a3576d8abb8e3ea, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Texture: {fileID: 8400000, guid: 3f4553a986a14dd6a783e0fef4b361c0, type: 2} + m_UVRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 +--- !u!222 &1972623427 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972623424} + m_CullTransparentMesh: 1 +--- !u!114 &1972623428 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1972623424} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ce28ebe5ec5e4c46b1d6363d2a6466bd, type: 3} + m_Name: + m_EditorClassIdentifier: + _viewportImage: {fileID: 1972623426} + _viewportCamera: {fileID: 635666494} + _worldPlaneZ: 0 --- !u!1 &1972798584 GameObject: m_ObjectHideFlags: 0 @@ -35931,3 +36181,4 @@ SceneRoots: - {fileID: 1544442451} - {fileID: 185508288} - {fileID: 1418780265} + - {fileID: 635666495} diff --git a/Assets/_Project/Scripts/Editor/SceneBootstrap/ApartmentSidebarAuthoring.cs b/Assets/_Project/Scripts/Editor/SceneBootstrap/ApartmentSidebarAuthoring.cs index 052cf092..6cc66746 100644 --- a/Assets/_Project/Scripts/Editor/SceneBootstrap/ApartmentSidebarAuthoring.cs +++ b/Assets/_Project/Scripts/Editor/SceneBootstrap/ApartmentSidebarAuthoring.cs @@ -86,6 +86,7 @@ public static void Author() var toggleBtn = MakeTab(sidebarGo, uiLayer, "Btn_Toggle", "<<"); var petStatusBtn = MakeTab(sidebarGo, uiLayer, "Btn_PetStatus", "Status"); + var spaceSysBtn = MakeTab(sidebarGo, uiLayer, "Btn_SpaceSys", "Space"); var tarotBtn = MakeTab(sidebarGo, uiLayer, "Btn_Tarot", "Tarot"); var collectionBtn = MakeTab(sidebarGo, uiLayer, "Btn_Collection", "Collection"); var inventoryBtn = MakeTab(sidebarGo, uiLayer, "Btn_Inventory", "Inventory"); @@ -98,14 +99,16 @@ public static void Author() so.FindProperty("_expandedX").floatValue = 0f; so.FindProperty("_collapsedX").floatValue = -200f; so.FindProperty("_tabPetStatus").objectReferenceValue = petStatusBtn; + so.FindProperty("_tabSpaceSys").objectReferenceValue = spaceSysBtn; so.FindProperty("_tabTarot").objectReferenceValue = tarotBtn; so.FindProperty("_tabCollection").objectReferenceValue = collectionBtn; so.FindProperty("_tabInventory").objectReferenceValue = inventoryBtn; so.FindProperty("_tabGarden").objectReferenceValue = gardenBtn; so.ApplyModifiedProperties(); - // 5 panels — stretch fullscreen (anchor 0,0→1,1) + // 6 panels — stretch fullscreen (anchor 0,0→1,1) CreateStubPanel(canvasGo, uiLayer, "Panel_PetStatus", "Profile"); + CreateStubPanel(canvasGo, uiLayer, "Panel_SpaceSys", "Space System"); CreateStubPanel(canvasGo, uiLayer, "Panel_Tarot", "Tarot (WIP)"); CreateStubPanel(canvasGo, uiLayer, "Panel_Collection", "Collection (WIP)"); CreateStubPanel(canvasGo, uiLayer, "Panel_Inventory", "Inventory (WIP)"); @@ -144,7 +147,7 @@ public static void Author() EditorSceneManager.MarkSceneDirty(scene); EditorSceneManager.SaveScene(scene); - Debug.LogWarning("[ApartmentSidebarAuthoring] Sidebar + 5 panels + portal 已重建(全屏面板 + 子 Canvas 分层)。" + + Debug.LogWarning("[ApartmentSidebarAuthoring] Sidebar + 6 panels + portal 已重建(全屏面板 + 子 Canvas 分层)。" + "各 Panel 现为占位 stub,如需恢复真实 UI 请依次重跑 " + "Author Inventory + Collection Panels / Author Garden Panel。"); } diff --git a/Assets/_Project/Scripts/Modules/Furniture/BuildModeController.cs b/Assets/_Project/Scripts/Modules/Furniture/BuildModeController.cs index d4218916..adfe3b4e 100644 --- a/Assets/_Project/Scripts/Modules/Furniture/BuildModeController.cs +++ b/Assets/_Project/Scripts/Modules/Furniture/BuildModeController.cs @@ -1,6 +1,7 @@ #nullable enable using System.Collections.Generic; using UnityEngine; +using UnityEngine.EventSystems; namespace GeminiLab.Modules.Furniture { @@ -15,6 +16,8 @@ public sealed class BuildModeController : MonoBehaviour private bool _isBuildMode; private int _selectedIndex; + public bool IsBuildModeEnabled => _isBuildMode; + private void Awake() { _furnitureService = FindFirstObjectByType(); @@ -57,15 +60,43 @@ private void Update() ? Vector2.zero : Camera.main.ScreenToWorldPoint(Input.mousePosition); + // When pointer is over the UI viewport, the viewport bridge owns the click + // and forwards the translated world point back into build mode. + if (EventSystem.current != null && EventSystem.current.IsPointerOverGameObject()) + { + return; + } + if (Input.GetMouseButtonDown(0)) { - FurnitureDefinitionSO selected = palette[Mathf.Clamp(_selectedIndex, 0, palette.Count - 1)]; - _ = _furnitureService.TryPlaceFurniture(selected, world, 0f, out Furniture? _, out string _); + _ = TryHandleViewportWorldPoint(world, isPrimaryAction: true); } else if (Input.GetMouseButtonDown(1)) { - _ = _furnitureService.TryRemoveNearestFurniture(world, 1.2f, out string _); + _ = TryHandleViewportWorldPoint(world, isPrimaryAction: false); + } + } + + public bool TryHandleViewportWorldPoint(Vector2 worldPoint, bool isPrimaryAction) + { + if (!_isBuildMode || _furnitureService is null) + { + return false; + } + + IReadOnlyList palette = _furnitureService.GetBuildPalette(); + if (palette.Count == 0) + { + return false; } + + if (isPrimaryAction) + { + FurnitureDefinitionSO selected = palette[Mathf.Clamp(_selectedIndex, 0, palette.Count - 1)]; + return _furnitureService.TryPlaceFurniture(selected, worldPoint, 0f, out Furniture? _, out string _); + } + + return _furnitureService.TryRemoveNearestFurniture(worldPoint, 1.2f, out string _); } } } diff --git a/Assets/_Project/Scripts/Modules/HubUI/ApartmentViewportInputBridge.cs b/Assets/_Project/Scripts/Modules/HubUI/ApartmentViewportInputBridge.cs new file mode 100644 index 00000000..4c6d3555 --- /dev/null +++ b/Assets/_Project/Scripts/Modules/HubUI/ApartmentViewportInputBridge.cs @@ -0,0 +1,164 @@ +#nullable enable +using GeminiLab.Modules.Furniture; +using GeminiLab.Modules.Pet; +using UnityEngine; +using UnityEngine.EventSystems; +using UnityEngine.UI; + +namespace GeminiLab.Modules.HubUI +{ + /// + /// Bridges pointer clicks from a RawImage viewport into Apartment world-space interaction. + /// Current version forwards pet clicks first, then falls back to pet furniture interaction. + /// + [DisallowMultipleComponent] + [RequireComponent(typeof(RectTransform))] + public sealed class ApartmentViewportInputBridge : MonoBehaviour, IPointerClickHandler + { + [SerializeField] private RawImage? _viewportImage; + [SerializeField] private Camera? _viewportCamera; + [SerializeField] private float _worldPlaneZ; + + public void OnPointerClick(PointerEventData eventData) + { + if (!TryScreenPointToWorldPoint( + eventData.position, + eventData.pressEventCamera, + out Vector2 worldPoint, + out _)) + { + return; + } + + if (TryHandleBuildMode(worldPoint, eventData.button)) + { + return; + } + + PetClickReactionController[] petClicks = Object.FindObjectsByType( + FindObjectsInactive.Exclude, + FindObjectsSortMode.None); + + for (int i = 0; i < petClicks.Length; i++) + { + PetClickReactionController petClick = petClicks[i]; + if (petClick != null && petClick.TryHandleWorldPoint(worldPoint)) + { + return; + } + } + + PetPlayerFurnitureInteractionController[] furnitureInteractions = Object.FindObjectsByType( + FindObjectsInactive.Exclude, + FindObjectsSortMode.None); + + for (int i = 0; i < furnitureInteractions.Length; i++) + { + PetPlayerFurnitureInteractionController interaction = furnitureInteractions[i]; + if (interaction != null && interaction.TryHandleWorldPoint(worldPoint)) + { + return; + } + } + } + + public bool TryScreenPointToWorldPoint( + Vector2 screenPoint, + Camera? eventCamera, + out Vector2 worldPoint, + out Vector2 viewportPoint) + { + worldPoint = default; + viewportPoint = default; + + if (_viewportCamera == null) + { + return false; + } + + RectTransform targetRect = _viewportImage != null + ? _viewportImage.rectTransform + : (RectTransform)transform; + + if (!RectTransformUtility.ScreenPointToLocalPointInRectangle( + targetRect, + screenPoint, + eventCamera, + out Vector2 localPoint)) + { + return false; + } + + Rect rect = targetRect.rect; + if (!TryLocalPointToViewportPoint(localPoint, rect, out viewportPoint)) + { + return false; + } + + float cameraDepth = _worldPlaneZ - _viewportCamera.transform.position.z; + if (_viewportCamera.orthographic) + { + cameraDepth = 0f; + } + else if (cameraDepth < _viewportCamera.nearClipPlane) + { + cameraDepth = _viewportCamera.nearClipPlane; + } + + Vector3 worldPoint3 = _viewportCamera.ViewportToWorldPoint(new Vector3( + viewportPoint.x, + viewportPoint.y, + cameraDepth)); + worldPoint = new Vector2(worldPoint3.x, worldPoint3.y); + return true; + } + + public static bool TryLocalPointToViewportPoint(Vector2 localPoint, Rect rect, out Vector2 viewportPoint) + { + viewportPoint = default; + + if (rect.width <= 0.001f || rect.height <= 0.001f) + { + return false; + } + + if (localPoint.x < rect.xMin || localPoint.x > rect.xMax || + localPoint.y < rect.yMin || localPoint.y > rect.yMax) + { + return false; + } + + viewportPoint = new Vector2( + Mathf.InverseLerp(rect.xMin, rect.xMax, localPoint.x), + Mathf.InverseLerp(rect.yMin, rect.yMax, localPoint.y)); + return true; + } + + private static bool TryHandleBuildMode(Vector2 worldPoint, PointerEventData.InputButton button) + { + if (button != PointerEventData.InputButton.Left && button != PointerEventData.InputButton.Right) + { + return false; + } + + BuildModeController[] buildControllers = Object.FindObjectsByType( + FindObjectsInactive.Exclude, + FindObjectsSortMode.None); + + for (int i = 0; i < buildControllers.Length; i++) + { + BuildModeController buildController = buildControllers[i]; + if (buildController == null || !buildController.IsBuildModeEnabled) + { + continue; + } + + bool isPrimaryAction = button == PointerEventData.InputButton.Left; + _ = buildController.TryHandleViewportWorldPoint(worldPoint, isPrimaryAction); + return true; + } + + return false; + } + } +} diff --git a/Assets/_Project/Scripts/Modules/UI/SpaceSystemPrototypeView.cs.meta b/Assets/_Project/Scripts/Modules/HubUI/ApartmentViewportInputBridge.cs.meta similarity index 74% rename from Assets/_Project/Scripts/Modules/UI/SpaceSystemPrototypeView.cs.meta rename to Assets/_Project/Scripts/Modules/HubUI/ApartmentViewportInputBridge.cs.meta index 80bc01ee..e08e0b97 100644 --- a/Assets/_Project/Scripts/Modules/UI/SpaceSystemPrototypeView.cs.meta +++ b/Assets/_Project/Scripts/Modules/HubUI/ApartmentViewportInputBridge.cs.meta @@ -1,5 +1,5 @@ -fileFormatVersion: 2 -guid: 4b78a8d6f5ab4ab9a57f8d36f6bc1001 +fileFormatVersion: 2 +guid: ce28ebe5ec5e4c46b1d6363d2a6466bd MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Assets/_Project/Scripts/Modules/HubUI/GeminiLab.Modules.HubUI.asmdef b/Assets/_Project/Scripts/Modules/HubUI/GeminiLab.Modules.HubUI.asmdef index 9bbec33f..418dc844 100644 --- a/Assets/_Project/Scripts/Modules/HubUI/GeminiLab.Modules.HubUI.asmdef +++ b/Assets/_Project/Scripts/Modules/HubUI/GeminiLab.Modules.HubUI.asmdef @@ -4,6 +4,7 @@ "references": [ "GeminiLab.Core", "GeminiLab.Modules.UI", + "GeminiLab.Modules.Furniture", "GeminiLab.Modules.Pet", "GeminiLab.Modules.Pet.Chat", "GeminiLab.Modules.Pet.Personality", diff --git a/Assets/_Project/Scripts/Modules/HubUI/Panels/InventoryPanelStub.cs b/Assets/_Project/Scripts/Modules/HubUI/Panels/InventoryPanelStub.cs index 0f4fc8c3..a1b0e4a7 100644 --- a/Assets/_Project/Scripts/Modules/HubUI/Panels/InventoryPanelStub.cs +++ b/Assets/_Project/Scripts/Modules/HubUI/Panels/InventoryPanelStub.cs @@ -28,6 +28,7 @@ public sealed class InventoryPanelStub : StubPanelBase [SerializeField] private TMP_Text? _tooltipName; [SerializeField] private TMP_Text? _tooltipCategory; [SerializeField] private TMP_Text? _tooltipText; + [SerializeField] private TMP_Text? _emptyHint; [Header("道具目录")] [SerializeField] private ItemCatalogSO? _catalog; @@ -85,12 +86,20 @@ private void Refresh() } _spawned.Clear(); - if (_service == null) return; + if (_service == null) + { + SetEmptyHint("物品栏服务尚未注册。"); + return; + } + int count = 0; foreach (var stack in _service.GetAllStacks()) { SpawnSlot(stack); + count++; } + + SetEmptyHint(count == 0 ? "物品栏暂时为空。" : string.Empty); } private void SpawnSlot(ItemStack stack) @@ -180,5 +189,31 @@ internal void HideTooltip() { if (_tooltipRoot != null) _tooltipRoot.SetActive(false); } + + private void SetEmptyHint(string message) + { + if (_emptyHint != null) + { + _emptyHint.text = message; + _emptyHint.gameObject.SetActive(!string.IsNullOrWhiteSpace(message)); + return; + } + + if (_tooltipRoot == null) + { + return; + } + + bool hasMessage = !string.IsNullOrWhiteSpace(message); + _tooltipRoot.SetActive(hasMessage); + if (!hasMessage) + { + return; + } + + if (_tooltipName != null) _tooltipName.text = "物品栏"; + if (_tooltipCategory != null) _tooltipCategory.text = string.Empty; + if (_tooltipText != null) _tooltipText.text = message; + } } } diff --git a/Assets/_Project/Scripts/Modules/HubUI/Panels/ProfilePanelStub.cs b/Assets/_Project/Scripts/Modules/HubUI/Panels/ProfilePanelStub.cs index 4709fd76..29b8160f 100644 --- a/Assets/_Project/Scripts/Modules/HubUI/Panels/ProfilePanelStub.cs +++ b/Assets/_Project/Scripts/Modules/HubUI/Panels/ProfilePanelStub.cs @@ -124,7 +124,16 @@ private void RefreshPet(PetId id, TMP_Text? moodText, TMP_Text? energyText, if (energyText != null) energyText.text = Mathf.RoundToInt(data.Energy).ToString(); if (energyFill != null) energyFill.fillAmount = data.Energy / 100f; } + else + { + SetUnavailableText(moodText, energyText); + } + } + else + { + SetUnavailableText(moodText, energyText); } + if (relationText != null) relationText.text = "--"; if (radar != null && ServiceLocator.TryResolve(out IPersonalityEvolutionService? evolution) && evolution != null) @@ -142,5 +151,11 @@ private void RefreshPet(PetId id, TMP_Text? moodText, TMP_Text? energyText, radar.SetValues(new List { 0f, 0f, 0f, 0f, 0f, 0f, 0f }); } } + + private static void SetUnavailableText(TMP_Text? moodText, TMP_Text? energyText) + { + if (moodText != null) moodText.text = "--"; + if (energyText != null) energyText.text = "--"; + } } } diff --git a/Assets/_Project/Scripts/Modules/HubUI/Panels/StubPanelBase.cs b/Assets/_Project/Scripts/Modules/HubUI/Panels/StubPanelBase.cs index 978ec109..86b0cc1e 100644 --- a/Assets/_Project/Scripts/Modules/HubUI/Panels/StubPanelBase.cs +++ b/Assets/_Project/Scripts/Modules/HubUI/Panels/StubPanelBase.cs @@ -1,6 +1,6 @@ #nullable enable -using System.Collections; using GeminiLab.Core; +using GeminiLab.Core.Events; using GeminiLab.Core.UI; using UnityEngine; using UnityEngine.UI; @@ -13,7 +13,6 @@ public abstract class StubPanelBase : MonoBehaviour, IUIPanel [SerializeField] private Button? _closeButton; private IUIRouter? _router; - private bool _registered; public abstract PanelId Id { get; } protected virtual void Awake() @@ -23,7 +22,8 @@ protected virtual void Awake() _content.SetActive(false); } - TryRegister(); + _router = ResolveOrCreateRouter(); + _router.Register(this); if (_closeButton is not null) { @@ -31,29 +31,13 @@ protected virtual void Awake() } } - protected virtual void Start() - { - StartCoroutine(DelayedRegister()); - } - - private IEnumerator DelayedRegister() - { - yield return null; - TryRegister(); - } - - private void TryRegister() - { - if (_registered) return; - if (!ServiceLocator.TryResolve(out IUIRouter? router) || router is null) return; - _router = router; - _router.Register(this); - _registered = true; - } - protected virtual void OnDestroy() { - if (ServiceLocator.TryResolve(out IUIRouter? router)) + if (_router is not null) + { + _router.Unregister(Id); + } + else if (ServiceLocator.TryResolve(out IUIRouter? router)) { router.Unregister(Id); } @@ -79,5 +63,23 @@ protected void CloseSelf() { _router?.Close(Id); } + + private static IUIRouter ResolveOrCreateRouter() + { + if (ServiceLocator.TryResolve(out IUIRouter? router) && router is not null) + { + return router; + } + + if (!ServiceLocator.TryResolve(out EventBus? eventBus) || eventBus is null) + { + eventBus = new EventBus(); + ServiceLocator.Register(eventBus); + } + + router = new UIRouter(eventBus); + ServiceLocator.Register(router); + return router; + } } } diff --git a/Assets/_Project/Scripts/Modules/HubUI/SidebarController.cs b/Assets/_Project/Scripts/Modules/HubUI/SidebarController.cs index 109b1b31..74c920e9 100644 --- a/Assets/_Project/Scripts/Modules/HubUI/SidebarController.cs +++ b/Assets/_Project/Scripts/Modules/HubUI/SidebarController.cs @@ -19,6 +19,7 @@ public sealed class SidebarController : MonoBehaviour [Header("Tab 按钮")] [SerializeField] private Button? _tabPetStatus; + [SerializeField] private Button? _tabSpaceSys; [SerializeField] private Button? _tabTarot; [SerializeField] private Button? _tabCollection; [SerializeField] private Button? _tabInventory; @@ -31,6 +32,7 @@ public sealed class SidebarController : MonoBehaviour private IUIRouter? _router; private EventBus? _eventBus; private IDisposable? _panelClosedSub; + private IDisposable? _panelOpenedSub; private bool _expanded = true; private PanelId? _activePanelId; @@ -39,13 +41,10 @@ public sealed class SidebarController : MonoBehaviour private void Awake() { - ServiceLocator.TryResolve(out _router); - ServiceLocator.TryResolve(out _eventBus); - - if (_eventBus is not null) - { - _panelClosedSub = _eventBus.Subscribe(OnPanelClosed); - } + _router = ResolveOrCreateRouter(); + _eventBus = ResolveOrCreateEventBus(); + _panelClosedSub = _eventBus.Subscribe(OnPanelClosed); + _panelOpenedSub = _eventBus.Subscribe(OnPanelOpened); BuildTabMap(); @@ -56,6 +55,8 @@ private void Awake() if (_tabPetStatus is not null) _tabPetStatus.onClick.AddListener(() => OpenPanel(PanelId.PetStatus)); + if (_tabSpaceSys is not null) + _tabSpaceSys.onClick.AddListener(() => OpenPanel(PanelId.SpaceSys)); if (_tabTarot is not null) _tabTarot.onClick.AddListener(() => OpenPanel(PanelId.Tarot)); if (_tabCollection is not null) @@ -71,6 +72,7 @@ private void Awake() private void OnDestroy() { _panelClosedSub?.Dispose(); + _panelOpenedSub?.Dispose(); } public void Toggle() @@ -82,6 +84,7 @@ public void Toggle() private void BuildTabMap() { AddTab(PanelId.PetStatus, _tabPetStatus); + AddTab(PanelId.SpaceSys, _tabSpaceSys); AddTab(PanelId.Tarot, _tabTarot); AddTab(PanelId.Collection, _tabCollection); AddTab(PanelId.Inventory, _tabInventory); @@ -98,11 +101,7 @@ private void AddTab(PanelId id, Button? btn) private void OpenPanel(PanelId id) { - if (_router is null && !ServiceLocator.TryResolve(out _router)) - { - Debug.LogWarning($"[Sidebar] 未找到 IUIRouter,无法打开 {id}"); - return; - } + _router ??= ResolveOrCreateRouter(); if (_activePanelId == id) { @@ -115,8 +114,25 @@ private void OpenPanel(PanelId id) _router!.Close(_activePanelId.Value); } - _router!.Open(id); - _activePanelId = id; + if (_router!.Open(id)) + { + _activePanelId = id; + RefreshTabHighlight(); + } + else + { + Debug.LogWarning($"[Sidebar] 面板尚未注册,无法打开 {id}"); + } + } + + private void OnPanelOpened(UIPanelOpenedEvent e) + { + if (!_tabMap.ContainsKey(e.Id)) + { + return; + } + + _activePanelId = e.Id; RefreshTabHighlight(); } @@ -149,5 +165,30 @@ private void ApplyState(bool instant) _panelRoot.anchoredPosition = pos; _ = instant; } + + private static EventBus ResolveOrCreateEventBus() + { + if (ServiceLocator.TryResolve(out EventBus? eventBus) && eventBus is not null) + { + return eventBus; + } + + eventBus = new EventBus(); + ServiceLocator.Register(eventBus); + return eventBus; + } + + private static IUIRouter ResolveOrCreateRouter() + { + if (ServiceLocator.TryResolve(out IUIRouter? router) && router is not null) + { + return router; + } + + EventBus eventBus = ResolveOrCreateEventBus(); + router = new UIRouter(eventBus); + ServiceLocator.Register(router); + return router; + } } } diff --git a/Assets/_Project/Scripts/Modules/Pet/PetClickReactionController.cs b/Assets/_Project/Scripts/Modules/Pet/PetClickReactionController.cs index 581e040d..9f4afd14 100644 --- a/Assets/_Project/Scripts/Modules/Pet/PetClickReactionController.cs +++ b/Assets/_Project/Scripts/Modules/Pet/PetClickReactionController.cs @@ -1,6 +1,7 @@ #nullable enable using System; using UnityEngine; +using UnityEngine.EventSystems; namespace GeminiLab.Modules.Pet { @@ -80,6 +81,11 @@ private void Update() HideBubbleImmediate(); } + if (EventSystem.current != null && EventSystem.current.IsPointerOverGameObject()) + { + return; + } + if (!isActiveAndEnabled || !Input.GetMouseButtonDown(0)) { return; @@ -125,9 +131,19 @@ private void TryHandleLeftClick() Vector3 screenPoint = Input.mousePosition; Vector3 worldPoint3 = Camera.main.ScreenToWorldPoint(screenPoint); Vector2 worldPoint = new(worldPoint3.x, worldPoint3.y); - if (!_clickCollider.OverlapPoint(worldPoint)) + _ = TryHandleWorldPoint(worldPoint); + } + + public bool TryHandleWorldPoint(Vector2 worldPoint) + { + if (_clickCollider == null) { - return; + EnsureClickCollider(); + } + + if (_clickCollider == null || !_clickCollider.OverlapPoint(worldPoint)) + { + return false; } _playerInputController ??= GetComponent(); @@ -135,7 +151,7 @@ private void TryHandleLeftClick() if (!_enableClickReaction) { - return; + return true; } string expression = ResolveCurrentExpression(); @@ -147,6 +163,7 @@ private void TryHandleLeftClick() Debug.Log($"[PetClickReaction] Pending click animation state: {animatorStateName}"); } ShowBubble(response); + return true; } private void EnsureBubbleVisuals() diff --git a/Assets/_Project/Scripts/Modules/Pet/PetPlayerFurnitureInteractionController.cs b/Assets/_Project/Scripts/Modules/Pet/PetPlayerFurnitureInteractionController.cs index b0cf8a04..e406470e 100644 --- a/Assets/_Project/Scripts/Modules/Pet/PetPlayerFurnitureInteractionController.cs +++ b/Assets/_Project/Scripts/Modules/Pet/PetPlayerFurnitureInteractionController.cs @@ -149,6 +149,50 @@ private void Update() _ = _petController.TryStartPlayerInteraction(request); } + public bool TryHandleWorldPoint(Vector2 worldPoint) + { + if (!_enableInteraction || !isActiveAndEnabled) + { + return false; + } + + if (_petController == null) + { + _petController = GetComponent(); + } + + if (_petController == null || !_petController.IsPlayerControlEnabled) + { + return false; + } + + if (!TryGetBindingForWorldPoint(transform.position, worldPoint, out InteractionBinding? binding, out string targetName, out GameObject? targetObject)) + { + return false; + } + + PetPlayerInteractionRequest request = new( + targetName: !string.IsNullOrWhiteSpace(binding.Label) ? binding.Label : targetName, + category: binding.Category, + interactionType: binding.InteractionType, + animationVariant: ResolveAnimationVariant(binding), + animatorStateNameOverride: ResolveAnimatorStateOverride(binding), + hideTargetWhileInteracting: binding.HideTargetWhileInteracting, + visualHideTarget: binding.HideTargetWhileInteracting ? targetObject : null, + additionalVisualHideTargets: binding.AdditionalHideTargets, + useTargetSortingWhileInteracting: binding.UseTargetSortingWhileInteracting, + visualSortingTarget: binding.UseTargetSortingWhileInteracting ? targetObject : null, + usePetPoseOverride: binding.UsePetPoseOverride, + useTargetPositionForPetPose: binding.UseTargetPositionForPetPose, + petInteractionLocalOffset: binding.PetInteractionLocalOffset, + petInteractionWorldPoint: binding.PetInteractionWorldPoint, + petInteractionScale: binding.PetInteractionScale, + interactionDurationSeconds: binding.InteractionDurationSeconds); + + Debug.Log($"[PetPlayerFurnitureInteraction] Viewport binding label='{binding.Label}' target='{targetName}' variant='{request.AnimationVariant}' animatorState='{request.AnimatorStateNameOverride}'."); + return _petController.TryStartPlayerInteraction(request); + } + private bool TryGetClosestBinding(Vector2 petPosition, out InteractionBinding? bestBinding, out string bestTargetName, out GameObject? bestTargetObject) { bestBinding = null; @@ -179,6 +223,51 @@ private bool TryGetClosestBinding(Vector2 petPosition, out InteractionBinding? b return bestBinding != null && !string.IsNullOrWhiteSpace(bestTargetName); } + private bool TryGetBindingForWorldPoint( + Vector2 petPosition, + Vector2 worldPoint, + out InteractionBinding? bestBinding, + out string bestTargetName, + out GameObject? bestTargetObject) + { + bestBinding = null; + bestTargetName = string.Empty; + bestTargetObject = null; + float bestScore = float.MaxValue; + + for (int i = 0; i < _bindings.Length; i++) + { + InteractionBinding binding = _bindings[i]; + if (!TryResolveInteractionPoint(binding, out Vector2 interactionPoint, out string targetName, out GameObject? targetObject)) + { + continue; + } + + float petDistance = Vector2.Distance(petPosition, interactionPoint); + if (petDistance > binding.ActivationDistance) + { + continue; + } + + if (!DoesWorldPointMatchBinding(binding, worldPoint, interactionPoint, targetObject, out float score)) + { + continue; + } + + if (score >= bestScore) + { + continue; + } + + bestScore = score; + bestBinding = binding; + bestTargetName = targetName; + bestTargetObject = targetObject; + } + + return bestBinding != null && !string.IsNullOrWhiteSpace(bestTargetName); + } + private static string ResolveAnimationVariant(InteractionBinding binding) { return binding.TryGetPreferredAnimation(out _, out string variantKey) && @@ -290,6 +379,32 @@ private static bool TryResolveInteractionPoint(InteractionBinding binding, out V targetObject = null; return false; } + + private static bool DoesWorldPointMatchBinding( + InteractionBinding binding, + Vector2 worldPoint, + Vector2 interactionPoint, + GameObject? targetObject, + out float score) + { + if (targetObject != null) + { + Collider2D[] colliders = targetObject.GetComponentsInChildren(true); + for (int i = 0; i < colliders.Length; i++) + { + Collider2D collider = colliders[i]; + if (collider != null && collider.OverlapPoint(worldPoint)) + { + score = 0f; + return true; + } + } + } + + float hitRadius = Mathf.Max(0.35f, binding.ActivationDistance * 0.5f); + score = Vector2.Distance(worldPoint, interactionPoint); + return score <= hitRadius; + } } public readonly struct PetPlayerInteractionRequest diff --git a/Assets/_Project/Scripts/Modules/Tarot/TarotService.cs b/Assets/_Project/Scripts/Modules/Tarot/TarotService.cs index b0d7709c..7d4f422e 100644 --- a/Assets/_Project/Scripts/Modules/Tarot/TarotService.cs +++ b/Assets/_Project/Scripts/Modules/Tarot/TarotService.cs @@ -36,7 +36,7 @@ public TarotSession CreateSession(string? question) var session = new TarotSession { Question = question ?? string.Empty, - SessionDateIso = System.DateTime.Now.ToString("yyyy-MM-dd"), + SessionDateIso = System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), CandidateCards = PickRandomCards(11) }; return session; diff --git a/Assets/_Project/Scripts/Modules/UI/SpaceSystemPrototypeView.cs b/Assets/_Project/Scripts/Modules/UI/SpaceSystemPrototypeView.cs deleted file mode 100644 index fdc3e996..00000000 --- a/Assets/_Project/Scripts/Modules/UI/SpaceSystemPrototypeView.cs +++ /dev/null @@ -1,377 +0,0 @@ -#nullable enable -using UnityEngine; -using UnityEngine.UI; -using TMPro; - -namespace GeminiLab.Modules.UI -{ - /// - /// 在 Apartment_Main 场景内生成“空间系统”主体 UI 原型。 - /// 布局尽量贴近参考图:上方双角色纸卡,中间共享空间主视觉,底部统一信息条。 - /// - [ExecuteAlways] - public sealed class SpaceSystemPrototypeView : MonoBehaviour - { - [SerializeField] private Sprite? _angelSpaceSprite; - [SerializeField] private Sprite? _demonSpaceSprite; - [SerializeField] private Sprite? _angelPortraitSprite; - [SerializeField] private Sprite? _demonPortraitSprite; - - private const string RootName = "SpaceSystemPrototypeRoot"; - - private void Awake() - { - EnsurePrototype(); - } - - private void OnEnable() - { - EnsurePrototype(); - } - - private void OnValidate() - { - EnsurePrototype(); - } - - private void EnsurePrototype() - { - if (!isActiveAndEnabled) - { - return; - } - - if (Application.isPlaying) - { - BuildPrototype(); - return; - } - - Transform existing = transform.Find(RootName); - if (existing != null) - { - DestroyImmediate(existing.gameObject); - } - - BuildPrototype(); - } - - private void BuildPrototype() - { - Transform existing = transform.Find(RootName); - if (existing != null) - { - return; - } - - GameObject root = CreateUIObject(RootName, transform); - RectTransform rootRect = root.GetComponent(); - rootRect.anchorMin = new Vector2(0.18f, 0.08f); - rootRect.anchorMax = new Vector2(0.96f, 0.95f); - rootRect.offsetMin = Vector2.zero; - rootRect.offsetMax = Vector2.zero; - - BuildCharacterCards(root.transform); - BuildSharedSceneBoard(root.transform); - BuildBottomStrip(root.transform); - } - - private void BuildCharacterCards(Transform parent) - { - GameObject top = CreateUIObject("CharacterCards", parent); - RectTransform rect = top.GetComponent(); - rect.anchorMin = new Vector2(0.12f, 0.72f); - rect.anchorMax = new Vector2(0.88f, 0.98f); - rect.offsetMin = Vector2.zero; - rect.offsetMax = Vector2.zero; - - BuildPaperCard( - top.transform, - "DemonCard", - new Vector2(0f, 0.02f), - new Vector2(0.46f, 1f), - new Color(0.94f, 0.87f, 0.75f, 0.98f), - new Color(0.55f, 0.20f, 0.22f, 1f), - "恶魔·咪咪", - _demonPortraitSprite, - moodText: "心情", - energyText: "能量 85/100"); - - BuildPaperCard( - top.transform, - "AngelCard", - new Vector2(0.54f, 0.02f), - new Vector2(1f, 1f), - new Color(0.95f, 0.89f, 0.78f, 0.98f), - new Color(0.22f, 0.40f, 0.58f, 1f), - "天使·露露", - _angelPortraitSprite, - moodText: "心情", - energyText: "能量 95/100"); - - GameObject bond = CreateUIObject("BondHeart", top.transform); - RectTransform bondRect = bond.GetComponent(); - bondRect.anchorMin = new Vector2(0.47f, 0.3f); - bondRect.anchorMax = new Vector2(0.53f, 0.7f); - bondRect.offsetMin = Vector2.zero; - bondRect.offsetMax = Vector2.zero; - Image heartBg = bond.AddComponent(); - heartBg.color = new Color(0.78f, 0.29f, 0.32f, 0.95f); - BuildTextFull(bond.transform, "HeartText", "♥", 42, TextAlignmentOptions.Center, new Color(1f, 0.96f, 0.92f, 1f)); - } - - private void BuildPaperCard( - Transform parent, - string name, - Vector2 anchorMin, - Vector2 anchorMax, - Color paperColor, - Color accentColor, - string title, - Sprite? portrait, - string moodText, - string energyText) - { - GameObject card = CreateUIObject(name, parent); - RectTransform rect = card.GetComponent(); - rect.anchorMin = anchorMin; - rect.anchorMax = anchorMax; - rect.offsetMin = Vector2.zero; - rect.offsetMax = Vector2.zero; - rect.localRotation = Quaternion.Euler(0f, 0f, name.Contains("Demon") ? -2f : 2f); - - Image paper = card.AddComponent(); - paper.color = paperColor; - - GameObject titleBand = CreateUIObject("TitleBand", card.transform); - RectTransform titleRect = titleBand.GetComponent(); - titleRect.anchorMin = new Vector2(0.04f, 0.70f); - titleRect.anchorMax = new Vector2(0.96f, 0.96f); - titleRect.offsetMin = Vector2.zero; - titleRect.offsetMax = Vector2.zero; - Image titleBg = titleBand.AddComponent(); - titleBg.color = accentColor; - BuildTextFull(titleBand.transform, "Title", title, 28, TextAlignmentOptions.Center, new Color(1f, 0.96f, 0.88f, 1f)); - - GameObject portraitNode = CreateUIObject("Portrait", card.transform); - RectTransform portraitRect = portraitNode.GetComponent(); - portraitRect.anchorMin = new Vector2(0.04f, 0.12f); - portraitRect.anchorMax = new Vector2(0.34f, 0.7f); - portraitRect.offsetMin = Vector2.zero; - portraitRect.offsetMax = Vector2.zero; - Image portraitImage = portraitNode.AddComponent(); - portraitImage.color = portrait != null ? Color.white : new Color(1f, 0.9f, 0.82f, 0.9f); - portraitImage.sprite = portrait; - portraitImage.preserveAspect = true; - - GameObject info = CreateUIObject("Info", card.transform); - RectTransform infoRect = info.GetComponent(); - infoRect.anchorMin = new Vector2(0.36f, 0.12f); - infoRect.anchorMax = new Vector2(0.96f, 0.66f); - infoRect.offsetMin = Vector2.zero; - infoRect.offsetMax = Vector2.zero; - - BuildText(info.transform, "MoodLabel", moodText, 22, TextAlignmentOptions.TopLeft, new Color(0.26f, 0.16f, 0.1f, 1f), new Vector2(0f, -8f), new Vector2(1f, 1f), new Vector2(0f, 1f), new Vector2(0f, -34f)); - CreateBar(info.transform, "MoodBar", new Vector2(0f, -42f), new Vector2(0.82f, 18f), new Color(0.24f, 0.72f, 0.42f, 1f), 0.82f); - BuildText(info.transform, "EnergyLabel", energyText, 22, TextAlignmentOptions.TopLeft, new Color(0.26f, 0.16f, 0.1f, 1f), new Vector2(0f, -78f), new Vector2(1f, 1f), new Vector2(0f, 1f), new Vector2(0f, -34f)); - CreateBar(info.transform, "EnergyBar", new Vector2(0f, -112f), new Vector2(0.88f, 18f), new Color(0.88f, 0.58f, 0.18f, 1f), 0.74f); - } - - private void BuildSharedSceneBoard(Transform parent) - { - GameObject board = CreateUIObject("SharedSceneBoard", parent); - RectTransform rect = board.GetComponent(); - rect.anchorMin = new Vector2(0.06f, 0.23f); - rect.anchorMax = new Vector2(0.94f, 0.71f); - rect.offsetMin = Vector2.zero; - rect.offsetMax = Vector2.zero; - - Image boardBg = board.AddComponent(); - boardBg.color = new Color(0.15f, 0.11f, 0.08f, 0.93f); - - GameObject sceneFrame = CreateUIObject("SceneFrame", board.transform); - RectTransform frameRect = sceneFrame.GetComponent(); - frameRect.anchorMin = new Vector2(0.04f, 0.08f); - frameRect.anchorMax = new Vector2(0.96f, 0.92f); - frameRect.offsetMin = Vector2.zero; - frameRect.offsetMax = Vector2.zero; - Image frameBg = sceneFrame.AddComponent(); - frameBg.color = new Color(0.90f, 0.81f, 0.67f, 0.98f); - - GameObject joinedScene = CreateUIObject("JoinedScene", sceneFrame.transform); - RectTransform joinedRect = joinedScene.GetComponent(); - joinedRect.anchorMin = new Vector2(0.02f, 0.02f); - joinedRect.anchorMax = new Vector2(0.98f, 0.98f); - joinedRect.offsetMin = Vector2.zero; - joinedRect.offsetMax = Vector2.zero; - - GameObject demonZone = CreateUIObject("DemonZone", joinedScene.transform); - RectTransform demonRect = demonZone.GetComponent(); - demonRect.anchorMin = new Vector2(0f, 0f); - demonRect.anchorMax = new Vector2(0.52f, 1f); - demonRect.offsetMin = Vector2.zero; - demonRect.offsetMax = Vector2.zero; - Image demonBg = demonZone.AddComponent(); - demonBg.color = new Color(0.32f, 0.14f, 0.15f, 0.82f); - if (_demonSpaceSprite != null) - { - demonBg.sprite = _demonSpaceSprite; - demonBg.type = Image.Type.Simple; - demonBg.preserveAspect = false; - } - - GameObject angelZone = CreateUIObject("AngelZone", joinedScene.transform); - RectTransform angelRect = angelZone.GetComponent(); - angelRect.anchorMin = new Vector2(0.48f, 0f); - angelRect.anchorMax = new Vector2(1f, 1f); - angelRect.offsetMin = Vector2.zero; - angelRect.offsetMax = Vector2.zero; - Image angelBg = angelZone.AddComponent(); - angelBg.color = new Color(0.58f, 0.73f, 0.86f, 0.88f); - if (_angelSpaceSprite != null) - { - angelBg.sprite = _angelSpaceSprite; - angelBg.type = Image.Type.Simple; - angelBg.preserveAspect = false; - } - - CreatePaperTag(joinedScene.transform, "DemonTag", "恶魔区", new Vector2(0.02f, 0.84f), new Vector2(0.28f, 0.98f), new Color(0.52f, 0.18f, 0.20f, 0.96f)); - CreatePaperTag(joinedScene.transform, "AngelTag", "天使区", new Vector2(0.72f, 0.84f), new Vector2(0.98f, 0.98f), new Color(0.21f, 0.43f, 0.64f, 0.96f)); - CreateAlertBadge(joinedScene.transform, "DemonAlert", new Vector2(0.31f, 0.88f)); - CreateAlertBadge(joinedScene.transform, "AngelAlert", new Vector2(0.69f, 0.88f)); - } - - private void BuildBottomStrip(Transform parent) - { - GameObject bottom = CreateUIObject("BottomInfoStrip", parent); - RectTransform rect = bottom.GetComponent(); - rect.anchorMin = new Vector2(0.12f, 0.05f); - rect.anchorMax = new Vector2(0.88f, 0.18f); - rect.offsetMin = Vector2.zero; - rect.offsetMax = Vector2.zero; - - Image bg = bottom.AddComponent(); - bg.color = new Color(0.93f, 0.86f, 0.72f, 0.97f); - - BuildText(bottom.transform, "ComfortLabel", "舒适度", 26, TextAlignmentOptions.TopLeft, new Color(0.29f, 0.18f, 0.10f, 1f), new Vector2(18f, -10f), new Vector2(0.3f, 1f), new Vector2(0f, 1f), new Vector2(0f, -30f)); - BuildText(bottom.transform, "ComfortHearts", "♥ ♥ ♥ ♥ ♥", 28, TextAlignmentOptions.TopLeft, new Color(0.74f, 0.29f, 0.34f, 1f), new Vector2(18f, -42f), new Vector2(0.3f, 1f), new Vector2(0f, 1f), new Vector2(0f, -34f)); - BuildText(bottom.transform, "Desc", "双宠共居空间:温暖、陪伴、风格共生", 22, TextAlignmentOptions.MidlineLeft, new Color(0.32f, 0.20f, 0.12f, 1f), new Vector2(0f, 0f), new Vector2(0.76f, 1f), new Vector2(0.28f, 0f), new Vector2(0f, 0f)); - - GameObject preview = CreateUIObject("DecorPreviewButton", bottom.transform); - RectTransform previewRect = preview.GetComponent(); - previewRect.anchorMin = new Vector2(0.78f, 0.18f); - previewRect.anchorMax = new Vector2(0.97f, 0.82f); - previewRect.offsetMin = Vector2.zero; - previewRect.offsetMax = Vector2.zero; - Image previewBg = preview.AddComponent(); - previewBg.color = new Color(0.78f, 0.64f, 0.36f, 1f); - BuildTextFull(preview.transform, "Label", "装饰预览", 22, TextAlignmentOptions.Center, new Color(0.24f, 0.14f, 0.08f, 1f)); - } - - private void CreatePaperTag(Transform parent, string name, string text, Vector2 anchorMin, Vector2 anchorMax, Color color) - { - GameObject tag = CreateUIObject(name, parent); - RectTransform rect = tag.GetComponent(); - rect.anchorMin = anchorMin; - rect.anchorMax = anchorMax; - rect.offsetMin = Vector2.zero; - rect.offsetMax = Vector2.zero; - Image bg = tag.AddComponent(); - bg.color = color; - BuildTextFull(tag.transform, "Label", text, 24, TextAlignmentOptions.Center, new Color(1f, 0.95f, 0.88f, 1f)); - } - - private void CreateAlertBadge(Transform parent, string name, Vector2 anchor) - { - GameObject badge = CreateUIObject(name, parent); - RectTransform rect = badge.GetComponent(); - rect.anchorMin = anchor; - rect.anchorMax = anchor; - rect.sizeDelta = new Vector2(36f, 36f); - rect.anchoredPosition = Vector2.zero; - Image bg = badge.AddComponent(); - bg.color = new Color(0.86f, 0.36f, 0.14f, 0.98f); - BuildTextFull(badge.transform, "Mark", "!", 26, TextAlignmentOptions.Center, Color.white); - } - - private static void CreateBar(Transform parent, string name, Vector2 anchoredPosition, Vector2 size, Color fillColor, float fill) - { - GameObject bar = CreateUIObject(name, parent); - RectTransform rect = bar.GetComponent(); - rect.anchorMin = new Vector2(0f, 1f); - rect.anchorMax = new Vector2(0f, 1f); - rect.pivot = new Vector2(0f, 1f); - rect.anchoredPosition = anchoredPosition; - rect.sizeDelta = size; - Image bg = bar.AddComponent(); - bg.color = new Color(0.22f, 0.18f, 0.14f, 0.9f); - - GameObject fillNode = CreateUIObject(name + "Fill", bar.transform); - RectTransform fillRect = fillNode.GetComponent(); - fillRect.anchorMin = new Vector2(0f, 0f); - fillRect.anchorMax = new Vector2(fill, 1f); - fillRect.offsetMin = new Vector2(3f, 3f); - fillRect.offsetMax = new Vector2(-3f, -3f); - Image fillBg = fillNode.AddComponent(); - fillBg.color = fillColor; - } - - private static GameObject CreateUIObject(string name, Transform parent) - { - GameObject go = new(name); - RectTransform rect = go.AddComponent(); - rect.SetParent(parent, false); - rect.localScale = Vector3.one; - rect.localRotation = Quaternion.identity; - return go; - } - - private static void BuildTextFull(Transform parent, string name, string text, float fontSize, TextAlignmentOptions alignment, Color color) - { - GameObject go = CreateUIObject(name, parent); - RectTransform rect = go.GetComponent(); - rect.anchorMin = Vector2.zero; - rect.anchorMax = Vector2.one; - rect.offsetMin = Vector2.zero; - rect.offsetMax = Vector2.zero; - TextMeshProUGUI label = go.AddComponent(); - label.text = text; - label.fontSize = fontSize; - label.alignment = alignment; - label.color = color; - label.raycastTarget = false; - } - - private static void BuildText( - Transform parent, - string name, - string text, - float fontSize, - TextAlignmentOptions alignment, - Color color, - Vector2 anchoredPosition, - Vector2 anchorMax, - Vector2 anchorMin, - Vector2 sizeDelta) - { - GameObject go = CreateUIObject(name, parent); - RectTransform rect = go.GetComponent(); - rect.anchorMin = anchorMin; - rect.anchorMax = anchorMax; - rect.anchoredPosition = anchoredPosition; - rect.offsetMin = Vector2.zero; - rect.offsetMax = Vector2.zero; - if (sizeDelta != Vector2.zero) - { - rect.sizeDelta = sizeDelta; - } - - TextMeshProUGUI label = go.AddComponent(); - label.text = text; - label.fontSize = fontSize; - label.alignment = alignment; - label.color = color; - label.raycastTarget = false; - } - } -} diff --git a/Assets/_Project/Settings/RenderTextures.meta b/Assets/_Project/Settings/RenderTextures.meta new file mode 100644 index 00000000..e8b1d772 --- /dev/null +++ b/Assets/_Project/Settings/RenderTextures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: af1b4f875a554dd3aadc2004d339d5bf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Settings/RenderTextures/ApartmentViewport_RT.renderTexture b/Assets/_Project/Settings/RenderTextures/ApartmentViewport_RT.renderTexture new file mode 100644 index 00000000..189c2dd3 --- /dev/null +++ b/Assets/_Project/Settings/RenderTextures/ApartmentViewport_RT.renderTexture @@ -0,0 +1,40 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!84 &8400000 +RenderTexture: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: ApartmentViewport_RT + m_ImageContentsHash: + serializedVersion: 2 + Hash: 00000000000000000000000000000000 + m_ForcedFallbackFormat: 4 + m_DownscaleFallback: 0 + m_IsAlphaChannelOptional: 0 + serializedVersion: 5 + m_Width: 1920 + m_Height: 1080 + m_AntiAliasing: 1 + m_MipCount: -1 + m_DepthStencilFormat: 0 + m_ColorFormat: 75 + m_MipMap: 0 + m_GenerateMips: 0 + m_SRGB: 1 + m_UseDynamicScale: 0 + m_BindMS: 0 + m_EnableCompatibleFormat: 1 + m_EnableRandomWrite: 0 + m_TextureSettings: + serializedVersion: 2 + m_FilterMode: 1 + m_Aniso: 0 + m_MipBias: 0 + m_WrapU: 1 + m_WrapV: 1 + m_WrapW: 1 + m_Dimension: 2 + m_VolumeDepth: 1 + m_ShadowSamplingMode: 2 diff --git a/Assets/_Project/Settings/RenderTextures/ApartmentViewport_RT.renderTexture.meta b/Assets/_Project/Settings/RenderTextures/ApartmentViewport_RT.renderTexture.meta new file mode 100644 index 00000000..75dcc2a3 --- /dev/null +++ b/Assets/_Project/Settings/RenderTextures/ApartmentViewport_RT.renderTexture.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3f4553a986a14dd6a783e0fef4b361c0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 8400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Tests/EditMode/ApartmentViewportInputBridgeTests.cs b/Assets/_Project/Tests/EditMode/ApartmentViewportInputBridgeTests.cs new file mode 100644 index 00000000..7089fb38 --- /dev/null +++ b/Assets/_Project/Tests/EditMode/ApartmentViewportInputBridgeTests.cs @@ -0,0 +1,50 @@ +#nullable enable +using GeminiLab.Modules.HubUI; +using NUnit.Framework; +using UnityEngine; + +namespace GeminiLab.Tests.EditMode +{ + public sealed class ApartmentViewportInputBridgeTests + { + [Test] + public void TryLocalPointToViewportPoint_Center_ReturnsHalfCoordinates() + { + Rect rect = new(-100f, -50f, 200f, 100f); + + bool ok = ApartmentViewportInputBridge.TryLocalPointToViewportPoint( + Vector2.zero, + rect, + out Vector2 viewportPoint); + + Assert.IsTrue(ok); + Assert.AreEqual(new Vector2(0.5f, 0.5f), viewportPoint); + } + + [Test] + public void TryLocalPointToViewportPoint_OutsideRect_ReturnsFalse() + { + Rect rect = new(-100f, -50f, 200f, 100f); + + bool ok = ApartmentViewportInputBridge.TryLocalPointToViewportPoint( + new Vector2(120f, 0f), + rect, + out _); + + Assert.IsFalse(ok); + } + + [Test] + public void TryLocalPointToViewportPoint_InvalidRect_ReturnsFalse() + { + Rect rect = new(0f, 0f, 0f, 100f); + + bool ok = ApartmentViewportInputBridge.TryLocalPointToViewportPoint( + Vector2.zero, + rect, + out _); + + Assert.IsFalse(ok); + } + } +} diff --git a/Assets/_Project/Tests/EditMode/ApartmentViewportInputBridgeTests.cs.meta b/Assets/_Project/Tests/EditMode/ApartmentViewportInputBridgeTests.cs.meta new file mode 100644 index 00000000..3975605e --- /dev/null +++ b/Assets/_Project/Tests/EditMode/ApartmentViewportInputBridgeTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 623cd0b2567b4843b30b18910f1fe911 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Tests/EditMode/GeminiLab.Tests.EditMode.asmdef b/Assets/_Project/Tests/EditMode/GeminiLab.Tests.EditMode.asmdef index 237de7b3..13a5e1d9 100644 --- a/Assets/_Project/Tests/EditMode/GeminiLab.Tests.EditMode.asmdef +++ b/Assets/_Project/Tests/EditMode/GeminiLab.Tests.EditMode.asmdef @@ -11,7 +11,8 @@ "GeminiLab.Modules.UI", "GeminiLab.Modules.DesktopOverlay", "GeminiLab.Modules.Travel", - "GeminiLab.Modules.Tarot" + "GeminiLab.Modules.Tarot", + "GeminiLab.Modules.HubUI" ], "optionalUnityReferences": [ "TestAssemblies" diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 1b1027b4..80a7fa44 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -61,7 +61,7 @@ "com.unity.modules.animation": "1.0.0", "com.unity.modules.uielements": "1.0.0" }, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "com.unity.2d.aseprite": { "version": "1.1.9", @@ -73,7 +73,7 @@ "com.unity.mathematics": "1.2.6", "com.unity.modules.animation": "1.0.0" }, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "com.unity.2d.common": { "version": "8.1.0", @@ -86,7 +86,7 @@ "com.unity.modules.animation": "1.0.0", "com.unity.modules.uielements": "1.0.0" }, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "com.unity.2d.pixel-perfect": { "version": "5.1.0", @@ -95,7 +95,7 @@ "dependencies": { "com.unity.modules.imgui": "1.0.0" }, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "com.unity.2d.psdimporter": { "version": "8.1.0", @@ -106,7 +106,7 @@ "com.unity.2d.sprite": "1.0.0", "com.unity.2d.animation": "9.2.0" }, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "com.unity.2d.sprite": { "version": "1.0.0", @@ -123,7 +123,7 @@ "com.unity.mathematics": "1.1.0", "com.unity.modules.physics2d": "1.0.0" }, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "com.unity.2d.tilemap": { "version": "1.0.0", @@ -144,7 +144,7 @@ "com.unity.modules.tilemap": "1.0.0", "com.unity.modules.jsonserialize": "1.0.0" }, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "com.unity.ai.navigation": { "version": "1.1.5", @@ -153,7 +153,7 @@ "dependencies": { "com.unity.modules.ai": "1.0.0" }, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "com.unity.burst": { "version": "1.8.21", @@ -163,14 +163,14 @@ "com.unity.mathematics": "1.2.1", "com.unity.modules.jsonserialize": "1.0.0" }, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "com.unity.collab-proxy": { "version": "2.12.4", "depth": 0, "source": "registry", "dependencies": {}, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "com.unity.collections": { "version": "1.2.4", @@ -180,14 +180,14 @@ "com.unity.burst": "1.6.6", "com.unity.test-framework": "1.1.31" }, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "com.unity.ext.nunit": { "version": "1.0.6", "depth": 1, "source": "registry", "dependencies": {}, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "com.unity.feature.2d": { "version": "2.0.1", @@ -211,7 +211,7 @@ "dependencies": { "com.unity.ext.nunit": "1.0.6" }, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "com.unity.ide.visualstudio": { "version": "2.0.22", @@ -220,21 +220,21 @@ "dependencies": { "com.unity.test-framework": "1.1.9" }, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "com.unity.mathematics": { "version": "1.2.6", "depth": 2, "source": "registry", "dependencies": {}, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "com.unity.nuget.newtonsoft-json": { "version": "3.2.1", "depth": 1, "source": "registry", "dependencies": {}, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "com.unity.probuilder": { "version": "5.2.4", @@ -245,14 +245,14 @@ "com.unity.modules.physics": "1.0.0", "com.unity.settings-manager": "1.0.3" }, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "com.unity.settings-manager": { "version": "2.1.0", "depth": 2, "source": "registry", "dependencies": {}, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "com.unity.test-framework": { "version": "1.1.33", @@ -263,7 +263,7 @@ "com.unity.modules.imgui": "1.0.0", "com.unity.modules.jsonserialize": "1.0.0" }, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "com.unity.textmeshpro": { "version": "3.0.7", @@ -272,7 +272,7 @@ "dependencies": { "com.unity.ugui": "1.0.0" }, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "com.unity.timeline": { "version": "1.7.7", @@ -284,7 +284,7 @@ "com.unity.modules.animation": "1.0.0", "com.unity.modules.particlesystem": "1.0.0" }, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "com.unity.ugui": { "version": "1.0.0", @@ -303,7 +303,7 @@ "com.unity.ugui": "1.0.0", "com.unity.modules.jsonserialize": "1.0.0" }, - "url": "https://packages.unity.com" + "url": "https://packages.unity.cn" }, "extensions.unity.playerprefsex": { "version": "2.1.3", diff --git a/ProjectSettings/PackageManagerSettings.asset b/ProjectSettings/PackageManagerSettings.asset index edd920c8..a926ec97 100644 --- a/ProjectSettings/PackageManagerSettings.asset +++ b/ProjectSettings/PackageManagerSettings.asset @@ -21,7 +21,7 @@ MonoBehaviour: m_Registries: - m_Id: main m_Name: - m_Url: https://packages.unity.com + m_Url: https://packages.unity.cn m_Scopes: [] m_IsDefault: 1 m_Capabilities: 7 diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index 587f809d..11e271c4 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2022.3.62f3 -m_EditorVersionWithRevision: 2022.3.62f3 (96770f904ca7) +m_EditorVersion: 2022.3.62f3c1 +m_EditorVersionWithRevision: 2022.3.62f3c1 (1623fc0bbb97) diff --git a/docs/ai-memory/gemini-lab-memory-main.md b/docs/ai-memory/gemini-lab-memory-main.md index bb198171..9f05b4ea 100644 --- a/docs/ai-memory/gemini-lab-memory-main.md +++ b/docs/ai-memory/gemini-lab-memory-main.md @@ -1,6 +1,6 @@ # Gemini-Lab Memory Main -Updated: 2026-05-20 +Updated: 2026-05-27 ## 定位 这份文档是 Gemini-Lab 的长期项目记忆总览。 @@ -168,12 +168,18 @@ Updated: 2026-05-20 - 新增 `Pet_Angel_Sleep.anim` - `Pet_Angel.controller` 新增 `Idle_Front / Idle_Back / Idle_Side / Sleep` - `PetController` 当前会在静止时切到 `Idle_*`,在 `SleepingState` 时切到 `Sleep` -- `2026-05-21` 已清理 `Apartment_Main.unity` 中旧的占位 UI: +- `2026-05-26` 已完成 Apartment UI 的 P0 清理收口:`Apartment_Main.unity` 中旧的占位 UI 残留已从场景真实移除: - 已移除 `TopLeft_StatusPanel` - 已移除 `Right_InventoryPanel` - 已移除 `BottomRight_PersonalityRadar` - 已移除旧的 `SpaceSystemPrototypeRoot` 原型 UI - - 后续 UI 制作改用 `Assets/_Project/Art/UI/` 下的新美术资源重新搭建 + - 当前保留的新主界面骨架包括 `Panel_PetStatus`、`Panel_SpaceSys`、`Sidebar`、`SidebarOverlay`、`ApartmentViewportHost`、`ApartmentViewportImage` 与 `ApartmentViewportCamera` + - 公寓 viewport 当前归属 `Panel_SpaceSys`,不再挂在 `Profile / Panel_PetStatus` + - 后续 UI 制作继续改用 `Assets/_Project/Art/UI/` 下的新美术资源做正式作者化 +- `2026-05-26` 已撤回 Apartment UI 的 `P1 + P3` 资料卡美术资源绑定尝试: + - `Apartment_Main.unity` 中 `Panel_PetStatus` 不再保留刚才绑定的 `profile` 贴图、宠物正面待机预览 Sprite、雷达配色与尺寸微调 + - 具体 UI 美术资源选择、贴图映射与最终视觉作者化后续由人工完成 + - AI 后续只继续承接弱视觉或非美术资源相关的逻辑、结构、输入桥接、验证与文档任务 - `2026-05-22` 已把 `Pet_Devil` 接入 `Apartment_Main.unity`: - 公寓场景里的 `Pet` 根节点现在包含 `Pet_Angel` 与 `Pet_Devil` - `Pet_Devil` 已接入自己的 `Pet_Devil.controller` 与恶魔 `Move / Idle / Sleep` 动画资源 @@ -184,6 +190,24 @@ Updated: 2026-05-20 - 新增 `Assets/_Project/Animations/Pet/Pet_Devil_Interact_BesideDoor.anim` - `Pet_Devil.controller` 的 `Interact_BesideDoor` 已改接恶魔自己的 clip,不再继续引用天使门边动画 - `Apartment_Main.unity` 中恶魔现有 `门边 / Interact_BesideDoor / beside door` 触发方式保持不变 +- `2026-05-27` 已把恶魔两条新的自交互动画接入 Apartment 原型: + - 新增 `Assets/_Project/Animations/Pet/Pet_Devil_Interact_Write.anim` + - 新增 `Assets/_Project/Animations/Pet/Pet_Devil_Interact_PlayingMusic.anim` + - `Pet_Devil.controller` 的 `Interact_Write` 与 `Interact_PlayingMusic` 已改接恶魔自己的 clip,不再继续引用天使对应交互动画像 + - `Apartment_Main.unity` 中恶魔现有玩家交互绑定已改成 `画画 / 玩掌机`:`画画` 对应 `家具_休闲_画架_恶魔_01` 的交互点并坐到 `家具_装饰_椅子_恶魔_01`,`玩掌机` 坐到 `家具_装饰_沙发_恶魔_02` + - 为保证这两条交互时恶魔不会被指定家具遮挡,当前场景绑定已关闭它们的 `UseTargetSortingWhileInteracting`,沿用恶魔自身较高的默认排序层 +- `2026-05-25` 已为 Apartment 场景补出第一版 viewport 结构骨架: + - `Panel_SpaceSys/Content` 下新增 `ApartmentViewportHost` + - 其下新增 `ApartmentViewportImage`,当前引用 `Assets/_Project/Settings/RenderTextures/ApartmentViewport_RT.renderTexture` + - `ArtGenerated` 下新增独立 `ApartmentViewportCamera`,不再依赖挂在 `Pet_Angel` 下的主相机来承担未来视窗职责 + - 后续已补最小输入桥接:当前 `ApartmentViewportInputBridge` 会先转发桌宠点击,再尝试转发到 `PetPlayerFurnitureInteractionController` 的家具交互入口 + - 后续已继续补建造模式桥接:当 `BuildModeController` 开启时,viewport 内左键/右键会优先转发到放置/删除家具入口,并屏蔽旧的全屏 `Camera.main` 鼠标链路双触发 + - `2026-05-26` 已对非美术 UI 技术链路做一轮收口:viewport 坐标转换抽成可测试方法,点击只在 RawImage 矩形内生效,建造模式开启时会吞掉 viewport 点击并优先交给 `BuildModeController` + - `2026-05-26` 已补 `HubUI` 对 `Furniture` 的 asmdef 显式依赖,并新增 `ApartmentViewportInputBridgeTests` 覆盖坐标转换基础规则 + - `2026-05-26` 已补 `SidebarController` / `StubPanelBase` 的 `IUIRouter` / `EventBus` 兜底注册,便于直接打开 `Apartment_Main` 调试时面板切换仍可工作 + - `2026-05-26` 已补 `ProfilePanelStub`、`TarotPanelStub`、`InventoryPanelStub` 的服务缺失 / 空数据兜底;其中 `InventoryPanelStub` 未绑定 `_emptyHint` 时会复用 Tooltip 区域显示空状态 + - `2026-05-26` 已建立 `Assets/_Project/Prefabs/UI/Panels` 与 `Assets/_Project/Prefabs/UI/Widgets` 的 README 工程落点;本轮未绑定任何新 UI 美术资源,也未制作正式 UI prefab + - 本轮 `git diff --check` 通过;由于当前 shell 找不到 Unity Editor / `unity-mcp-cli`,Unity Test Runner 与 PlayMode 仍需在 Unity 内补验,结果已写入 `docs/manual-validation-checklist.md` - `Assets/_Project/Prefabs/` 与 `Assets/_Project/ScriptableObjects/` 现在都不再是完全空目录,且 `Furniture` / `FurnitureConfig` 这条线已覆盖当前全部家具 Sprite 资源;其他模块仍未完成资产作者化。 - README 系列文档描述的目标状态仍然大于当前实现范围,阅读时必须显式区分“已实现事实”和“规划目标”。 - 项目本地 skill 目录当前仍保持 `.agents/skills/` 与 `.cursor/skills/` 镜像关系,当前统计为 `72` 项。 diff --git a/docs/ai-memory/gemini-lab-project-file-guide.md b/docs/ai-memory/gemini-lab-project-file-guide.md index 6cae6323..2fbe169e 100644 --- a/docs/ai-memory/gemini-lab-project-file-guide.md +++ b/docs/ai-memory/gemini-lab-project-file-guide.md @@ -1,6 +1,6 @@ # Gemini-Lab Project File Guide -Updated: 2026-05-20 +Updated: 2026-05-27 ## 入口文件 - `AGENTS.md` @@ -169,12 +169,13 @@ Updated: 2026-05-20 4. `Assets/_Project/ScriptableObjects/` 已开始落地实际 `.asset` 配置,当前 `FurnitureConfig/` 已覆盖全部家具 Sprite 资源;很多其他 SO 类型仍只存在于代码层。 5. `Assets/_Project/Scripts/Modules/Desktop/README.md` 仍承载桌面模块的设计说明,但当前真实运行时代码目录是 `Assets/_Project/Scripts/Modules/DesktopOverlay/`。 6. 多个系统当前依赖运行时兜底或 Mock 配置,看到“能跑起来”不等于“资产作者化已完成”。 -7. `2026-05-21` 起,Apartment 场景里旧的占位 UI(`TopLeft_StatusPanel`、`Right_InventoryPanel`、`BottomRight_PersonalityRadar`)以及旧的 `SpaceSystemPrototypeRoot` 原型 UI 已从 `Apartment_Main.unity` 移除;后续 UI 制作改用 `Assets/_Project/Art/UI/` 下的新美术资源重新搭建。 +7. `2026-05-26` 起,Apartment 场景里的旧占位 UI 残留(`TopLeft_StatusPanel`、`Right_InventoryPanel`、`BottomRight_PersonalityRadar`)已从 `Apartment_Main.unity` 真实移除;旧的 `SpaceSystemPrototypeRoot` 原型 UI 也不再作为后续 UI 制作基础。当前保留的新主界面骨架为 `Panel_PetStatus`、`Panel_SpaceSys`、`Sidebar`、`SidebarOverlay`、`ApartmentViewportHost`、`ApartmentViewportImage` 与 `ApartmentViewportCamera`。此前尝试绑定到 `Panel_PetStatus` 的 `profile` 贴图、宠物正面待机预览 Sprite、雷达配色与尺寸微调已撤回;当前公寓 viewport 已改挂到 `Panel_SpaceSys`,`Profile` 重新只承担双宠资料展示。具体 UI 美术资源选择、贴图映射与最终视觉作者化后续由人工完成,AI 后续只继续承接弱视觉或非美术资源相关的逻辑、结构、输入桥接、验证与文档任务。同日已完成一轮非美术 UI 技术收口:`ApartmentViewportInputBridge` 增加矩形内点击判定与可测试坐标转换,`SidebarController` / `StubPanelBase` 增加 `IUIRouter` / `EventBus` 兜底注册,`ProfilePanelStub` / `TarotPanelStub` / `InventoryPanelStub` 增加服务缺失或空数据兜底;`Assets/_Project/Prefabs/UI/Panels` 与 `Assets/_Project/Prefabs/UI/Widgets` 已建立目录说明但尚无正式 UI prefab。 8. `2026-05-22` 起,Apartment 场景中的 `Pet` 根节点已同时包含 `Pet_Angel` 与 `Pet_Devil`;当前玩家控制方式为“默认天使可控,点击恶魔后切换恶魔主控”,不再是简单复制输入组件后让双宠同时吃同一套方向键;未被选中的桌宠当前会保持待机,不再继续跑自动睡觉链路。当前 `Pet_Angel` 与 `Pet_Devil` 也不再共用同一个移动边界:恶魔已切到左侧专用 `PetMovementBounds_Devil`。 -9. `Assets/_Project/Animations/Pet/` 当前除 3 个 move clip 外,已新增 `Pet_Angel_Interact_Read.anim` 与 `Pet_Angel_Interact_BesideDoor.anim`,并新增 `Pet_Devil_Move_* / Pet_Devil_Idle_* / Pet_Devil_Sleep.anim` 与 `Pet_Devil_Interact_BesideDoor.anim`;但恶魔其他完整交互动画仍未补齐。 -10. `Assets/_Project/Art/Sprites/Pet/Frames/Move/` 当前已经从旧的平铺命名,切换为 `正面 / 背面 / 侧面` 三个子目录;对应导入链路由 `PetMoveAnimationSetupEditor` 兼容新旧两套来源。 -11. `Assets/_Project/Art/Sprites/Pet/Frames/Interact/` 当前两组交互帧已经统一改为规范命名:`Pet_Angel_Interact_Read_0001...` 与 `Pet_Angel_Interact_BesideDoor_0001...`,不再使用 `IMG_986x.PNG`。 -11. `Apartment_Main.unity` 当前并不是所有“看起来像家具”的对象都天然进入家具逻辑;首轮显式接线通过 `ApartmentSceneFurnitureBindings` 给关键对象补 `Furniture` / `InteractionAnchor` / `SceneFurnitureDefinitionHint`。 +9. `Assets/_Project/Animations/Pet/` 当前除 3 个 move clip 外,已新增 `Pet_Angel_Interact_Read.anim` 与 `Pet_Angel_Interact_BesideDoor.anim`,并新增 `Pet_Devil_Move_* / Pet_Devil_Idle_* / Pet_Devil_Sleep.anim`、`Pet_Devil_Interact_BesideDoor.anim`、`Pet_Devil_Interact_Write.anim` 与 `Pet_Devil_Interact_PlayingMusic.anim`;但恶魔其余完整交互动画仍未补齐。 +10. `2026-05-25` 起,Apartment 场景已开始搭第一版 `viewport` 结构:当前 `ApartmentViewportHost` 与 `ApartmentViewportImage` 已归属 `Panel_SpaceSys/Content`,并新增 `ArtGenerated/ApartmentViewportCamera`;当前 `RenderTexture` 资产路径为 `Assets/_Project/Settings/RenderTextures/ApartmentViewport_RT.renderTexture`。同日已补 `ApartmentViewportInputBridge`,当前可把 viewport 内点击先桥接到桌宠点击,再桥接到当前宠物的家具交互链路;当 `BuildModeController` 开启时,也会优先桥接到建造模式的放置/删除家具入口。 +11. `Assets/_Project/Art/Sprites/Pet/Frames/Move/` 当前已经从旧的平铺命名,切换为 `正面 / 背面 / 侧面` 三个子目录;对应导入链路由 `PetMoveAnimationSetupEditor` 兼容新旧两套来源。 +12. `Assets/_Project/Art/Sprites/Pet/Frames/Interact/` 当前两组交互帧已经统一改为规范命名:`Pet_Angel_Interact_Read_0001...` 与 `Pet_Angel_Interact_BesideDoor_0001...`,不再使用 `IMG_986x.PNG`。 +13. `Apartment_Main.unity` 当前并不是所有“看起来像家具”的对象都天然进入家具逻辑;首轮显式接线通过 `ApartmentSceneFurnitureBindings` 给关键对象补 `Furniture` / `InteractionAnchor` / `SceneFurnitureDefinitionHint`。 12. `ApartmentSceneFurnitureBindings` 当前已经覆盖公寓场景里主要可交互对象,但仍要注意两类现实区别: - 有些对象已经进入对象级交互类型,却未必已经摆进 `Apartment_Main.unity` - 场景绑定里的定义 ID、类别和交互类型需要持续与真实 Sprite 资源名保持一致,不能把 `WorkDesk` 类资源误绑成装饰类 @@ -185,6 +186,7 @@ Updated: 2026-05-20 - 当前 Apartment 原型还新增了 `PetClickReactionController`,用于鼠标左键点击桌宠后输出表情 Debug,并显示本地语料气泡回复 - 当场景里同时存在 `Pet_Angel` 与 `Pet_Devil` 时,点击桌宠不仅会触发气泡回应,也会显式切换当前键盘控制对象 - 当前恶魔的 `门边` 交互已沿用天使同一条 `Interact_BesideDoor` 触发链路,但 controller 已切到恶魔自己的 `Pet_Devil_Interact_BesideDoor.anim` + - `2026-05-27` 起,恶魔当前还额外拥有两条玩家自交互接线:`画画` 会对着 `家具_休闲_画架_恶魔_01` 触发并坐到 `家具_装饰_椅子_恶魔_01`,`玩掌机` 会坐到 `家具_装饰_沙发_恶魔_02` 13. `Apartment_Main.unity` 当前会用 `StaticFurnitureDecorOnly` 承载一部分“已有独立 Sprite、但不直接走原始关卡对象”的静态家具;这类对象进入交互系统时,也要同步补进 `ApartmentSceneFurnitureBindings`,避免出现“场景有图但无交互绑定”或“绑定有定义但 `_target` 为空”。 14. 当前工作流已开始显式区分三层记忆: - `L1`:`docs/current-task-card.md` diff --git a/docs/ai-memory/memory-index.paths.txt b/docs/ai-memory/memory-index.paths.txt index e20e259e..1c7067b7 100644 --- a/docs/ai-memory/memory-index.paths.txt +++ b/docs/ai-memory/memory-index.paths.txt @@ -1,5 +1,5 @@ # Gemini-Lab AI memory index -# Updated: 2026-05-23 +# Updated: 2026-05-27 AGENTS.md docs/current-task-card.md @@ -41,6 +41,8 @@ Assets/_Project/Scenes/Apartment/Apartment_Main.unity Assets/_Project/Scenes/Desktop/Desktop_Overlay.unity Assets/_Project/Prefabs/README.md Assets/_Project/Prefabs/Furniture +Assets/_Project/Prefabs/UI/Panels/README.md +Assets/_Project/Prefabs/UI/Widgets/README.md Assets/_Project/ScriptableObjects/README.md Assets/_Project/ScriptableObjects/FurnitureConfig Assets/_Project/Art/README.md @@ -49,6 +51,16 @@ Assets/_Project/Art/Sprites/Pet/README.md Assets/_Project/Animations/Pet/Pet_Angel.controller Assets/_Project/Animations/Pet/Pet_Devil.controller Assets/_Project/Animations/Pet/Pet_Devil_Interact_BesideDoor.anim +Assets/_Project/Animations/Pet/Pet_Devil_Interact_Write.anim +Assets/_Project/Animations/Pet/Pet_Devil_Interact_PlayingMusic.anim +Assets/_Project/Settings/RenderTextures/ApartmentViewport_RT.renderTexture +Assets/_Project/Scripts/Modules/HubUI/GeminiLab.Modules.HubUI.asmdef +Assets/_Project/Scripts/Modules/HubUI/ApartmentViewportInputBridge.cs +Assets/_Project/Scripts/Modules/HubUI/SidebarController.cs +Assets/_Project/Scripts/Modules/HubUI/Panels/StubPanelBase.cs +Assets/_Project/Scripts/Modules/HubUI/Panels/ProfilePanelStub.cs +Assets/_Project/Scripts/Modules/HubUI/Panels/TarotPanelStub.cs +Assets/_Project/Scripts/Modules/HubUI/Panels/InventoryPanelStub.cs Assets/_Project/Art/Sprites/Environment/ApartmentScene_Extracted/README.md Assets/_Project/Audio/README.md Assets/_Project/Settings/README.md @@ -74,6 +86,7 @@ Assets/_Project/Scripts/Modules/Furniture/ApartmentSceneFurnitureBindings.cs Assets/_Project/Scripts/Modules/Furniture/SceneFurnitureDefinitionHint.cs Assets/_Project/Scripts/Modules/UI/StatusPanelController.cs Assets/_Project/Tests/EditMode/GeminiLab.Tests.EditMode.asmdef +Assets/_Project/Tests/EditMode/ApartmentViewportInputBridgeTests.cs Assets/_Project/Tests/EditMode/PetPlayerInputControllerTests.cs Assets/_Project/Tests/EditMode/PetPlayerFurnitureInteractionControllerTests.cs Assets/_Project/Tests/EditMode/PetClickResponseLibraryTests.cs diff --git a/docs/manual-validation-checklist.md b/docs/manual-validation-checklist.md index 4e3efd6b..3f43f5d2 100644 --- a/docs/manual-validation-checklist.md +++ b/docs/manual-validation-checklist.md @@ -1,6 +1,6 @@ # Gemini-Lab 人工验证清单 -Updated: 2026-05-11 +Updated: 2026-05-27 ## 使用方式 - 人工验证后直接在“结果”列填写:`通过` / `不通过` / `未验证` @@ -142,6 +142,9 @@ Updated: 2026-05-11 | `SceneFurnitureDefinitionHint` 配置的类别和 Buff 会优先于名称推断生效 | | | | 睡眠交互 / 装饰观察 / 休闲交互 三种交互类型会正确传递到运行时摘要与状态面板 | | | | 镜子 / 地毯 / 沙发 / 凳子 / 椅子 / 画架 / 照片板 已进入对象级交互链路,且在场景中位置可达、不会明显错位 | | | +| 当前主控切到 `Pet_Devil` 后,靠近恶魔画架或点击其附近交互点并按 `F`,会播放 `画画` 并坐到 `家具_装饰_椅子_恶魔_01` | | | +| 当前主控切到 `Pet_Devil` 后,靠近恶魔沙发或点击其附近交互点并按 `F`,会播放 `玩掌机` 并停在 `家具_装饰_沙发_恶魔_02` | | | +| 恶魔播放 `画画` 与 `玩掌机` 时,人物始终显示在对应家具上方,不会被椅子 / 画架 / 沙发遮挡 | | | | 窗台 / 床上玩偶 / 沙发上枕头 已使用更贴近对象语义的交互类型,而不是继续借用植物或沙发语义 | | | ## D. Phase 3 Gateway 与 AI 交互(后续规划) @@ -166,6 +169,25 @@ Updated: 2026-05-11 | 相册与旅行小记可展示 | | | | 公寓模式与 Overlay 模式切换正常 | | | +## E2. Apartment UI 非美术技术收口(2026-05-26) +适用范围: +- 本节只验证非美术技术链路,不验证 `profile`、`spacesystem`、`tarot` 美术资源落图。 +- 当前脚本级静态检查已执行:`git diff --check` 通过。 +- 当前未能在本机调用 Unity Editor / `unity-mcp-cli` 实跑 Unity Test Runner,EditMode / PlayMode 结果需在 Unity 内补验。 + +| 检查项 | 结果 | 备注 | +| :--- | :--- | :--- | +| `ApartmentViewportInputBridge.TryLocalPointToViewportPoint` 对视窗中心点、越界点、无效 Rect 有 EditMode 测试覆盖 | 未验证 | 已新增测试文件,但需在 Unity Test Runner 中运行确认 | +| viewport 点击只在点落入 `ApartmentViewportImage` 矩形内时转换到世界坐标 | 未验证 | 需在 PlayMode 点击视窗四角和视窗外区域 | +| 建造模式开启时,viewport 左键/右键优先交给 `BuildModeController`,不再继续触发桌宠或家具点击链路 | 未验证 | 需在 PlayMode 分别验证放置、删除、非建造模式点击 | +| 侧边栏在直接打开 `Apartment_Main` 调试时仍能解析或创建 `IUIRouter` / `EventBus` | 未验证 | 需在不经 Boot 直接 Play 的场景中验证 | +| 侧边栏切换 `PetStatus`、`SpaceSys`、`Tarot`、`Inventory` 时,高亮状态与面板开关同步 | 未验证 | 需在 PlayMode 逐项点击侧边栏 | +| `PetStatus` 在 `IPetRoster` 未就绪或缺宠物数据时显示 `--`,不残留旧值 | 未验证 | 需在服务缺失或调试场景中验证 | +| `Tarot` 在 `ITarotService` / `ICollectionService` 未就绪时给出明确提示或 Warning | 未验证 | 需在 Boot 缺失和正常 Boot 两种路径验证 | +| `Inventory` 在物品栏为空或服务未注册时显示明确空状态,且不依赖新美术资源 | 未验证 | 当前未绑定 `_emptyHint` 时会复用 Tooltip 文本区域 | +| `Assets/_Project/Prefabs/UI/Panels` 与 `Assets/_Project/Prefabs/UI/Widgets` 已建立工程落点说明 | 通过 | 只建立 README 与 `.meta`,未制作实际 UI prefab | +| `GeminiLab.Modules.HubUI.asmdef` 已显式引用 `GeminiLab.Modules.Furniture` | 通过 | 解决 viewport 桥接引用 `BuildModeController` 的工程依赖 | + ## F. 美术与资源替换 | 检查项 | 结果 | 备注 | | :--- | :--- | :--- | diff --git a/docs/project-structure-overview.md b/docs/project-structure-overview.md index a5a7adfc..dffad85a 100644 --- a/docs/project-structure-overview.md +++ b/docs/project-structure-overview.md @@ -1,6 +1,6 @@ # Gemini-Lab 项目结构总览 -Updated: 2026-05-20 +Updated: 2026-05-27 ## 这份文档怎么看 这不是“理想中的最终目录图”,而是“当前仓库已经有什么,以及这些目录将来分别负责什么”的说明。 @@ -85,9 +85,13 @@ AI 协作工具链目录。 - `Apartment_Main.unity` 当前也是玩家控制宠物移动的主验证场景;`Pet_Angel` 已开始通过 `WASD` / 方向键直接控制 - `2026-05-22` 起,`Apartment_Main.unity` 的 `Pet` 根节点已包含 `Pet_Angel` 与 `Pet_Devil`;当前双宠输入方式为“默认天使可控,点击恶魔后切换恶魔主控”,且未被选中的桌宠保持 `Idle`,不继续自动睡觉 - `2026-05-22` 起,`Apartment_Main.unity` 中双宠也不再共用同一个移动边界;左侧恶魔区域已新增 `PetMovementBounds_Devil`,供 `Pet_Devil` 单独使用 +- `2026-05-25` 起,`Apartment_Main.unity` 已开始搭建“公寓世界作为 UI 视窗显示”的第一版骨架:当前 `ApartmentViewportHost` / `ApartmentViewportImage` 已归属 `Panel_SpaceSys/Content`,并新增独立 `ApartmentViewportCamera` 与 `RenderTexture` 引用落点;当前已补最小输入桥接,支持 viewport 内的桌宠点击、当前宠物的家具交互尝试,以及建造模式开启时的放置/删除家具桥接 - `Apartment_Main.unity` 当前除可交互家具对象外,还可能包含一个仅承载纯静态补景家具的 `StaticFurnitureDecorOnly` 子节点 - `StaticFurnitureDecorOnly` 当前不只用于“纯视觉补景”,也开始承载一部分已有独立 Sprite 家具对象;这些对象若需要进入交互系统,必须同步补场景显式绑定,不能只把 Sprite 摆进场景 -- `2026-05-21` 已从 `Apartment_Main.unity` 移除旧的截图式 / 占位 UI 节点与 `SpaceSystemPrototypeRoot` 原型 UI;后续 Apartment UI 需要基于 `Assets/_Project/Art/UI/` 下的新美术资源重新作者化。 +- `2026-05-26` 已完成 Apartment UI 的 P0 清理:`Apartment_Main.unity` 中旧的 `TopLeft_StatusPanel`、`Right_InventoryPanel`、`BottomRight_PersonalityRadar` 残留节点已移除;当前新主界面骨架保留 `Panel_PetStatus`、`Panel_SpaceSys`、`Sidebar`、`SidebarOverlay`、`ApartmentViewportHost`、`ApartmentViewportImage` 与 `ApartmentViewportCamera`,其中公寓 viewport 已改挂到 `Panel_SpaceSys`,后续 Apartment UI 继续基于 `Assets/_Project/Art/UI/` 下的新美术资源重新作者化。 +- `2026-05-26` 已撤回此前对 `Panel_PetStatus` 的 `profile` 资料卡美术绑定尝试;场景不再保留刚才绑定的 `profile` 贴图、宠物正面待机预览 Sprite、雷达配色与尺寸微调。具体 UI 美术资源选择、贴图映射与最终视觉作者化后续由人工完成。 +- `2026-05-26` 已完成 Apartment UI 的非美术技术收口:`ApartmentViewportInputBridge` 现在只处理落在 RawImage 矩形内的点击,并暴露可测试的坐标转换;`SidebarController` / `StubPanelBase` 可在直接打开 Apartment 调试时兜底创建 `IUIRouter` / `EventBus`;`ProfilePanelStub`、`TarotPanelStub`、`InventoryPanelStub` 已补服务缺失或空数据提示。 +- 本轮未能在当前 shell 直接运行 Unity Editor / `unity-mcp-cli`,所以 viewport 点击、Sidebar 面板切换、建造模式桥接仍需在 Unity PlayMode 中按 `docs/manual-validation-checklist.md` 的 E2 章节补验。 ### `Assets/_Project/Tests/` 当前已存在: @@ -102,6 +106,8 @@ Prefab 结构规划已写明,而且当前已经开始落地真实 `.prefab` 当前真实状态: - `Assets/_Project/Prefabs/Furniture/**` 当前已覆盖 `Art/Sprites/Furniture/**/` 下的全部家具 Sprite 资源 +- `Assets/_Project/Prefabs/UI/Tarot/**` 当前已有 `TarotHistoryEntry.prefab` 与 `TarotGuideCard.prefab` +- `Assets/_Project/Prefabs/UI/Panels/README.md` 与 `Assets/_Project/Prefabs/UI/Widgets/README.md` 已建立 UI prefab 工程落点说明;但 `Panels` / `Widgets` 下尚无正式 UI prefab 交付 - 当前 prefab 化仍主要集中在 `Furniture` 这条线,`Pet / UI / Environment / FX` 仍未收口 ### `Assets/_Project/ScriptableObjects/` @@ -123,6 +129,8 @@ SO 分类规划已写明,而且当前已经开始落地实际 `.asset` 文件 - `Art/Sprites/Furniture/` 下已开始承接从 `公寓场景.psd` 派生出来、准备进入家具系统接线的独立 Sprite,后续按中文语义命名维护 - 宠物动画片段与 Animator Controller - `2026-05-23` 起,恶魔也已拥有自己的门边交互动画 `Pet_Devil_Interact_BesideDoor.anim`,当前通过 `Pet_Devil.controller` 的 `Interact_BesideDoor` 状态接入 +- `2026-05-27` 起,恶魔还新增 `Pet_Devil_Interact_Write.anim` 与 `Pet_Devil_Interact_PlayingMusic.anim`,当前分别通过 `Pet_Devil.controller` 的 `Interact_Write` 与 `Interact_PlayingMusic` 状态接入 +- `2026-05-27` 起,`Apartment_Main.unity` 中恶魔现有玩家交互绑定已把旧的天使竖琴 / 写字目标替换为恶魔 `玩掌机 / 画画`:`玩掌机` 坐到 `家具_装饰_沙发_恶魔_02`,`画画` 对着 `家具_休闲_画架_恶魔_01` 触发并坐到 `家具_装饰_椅子_恶魔_01` ### `Assets/_Project/Audio/` 当前仍主要是目录规范与 README,真实音频资产尚未开始落地。