claude-code-arcane 2.3.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/README.md +54 -6
- package/agents/game/ue-blueprint-specialist.md +125 -0
- package/agents/game/ue-gas-specialist.md +133 -0
- package/agents/game/ue-umg-specialist.md +131 -0
- package/dist/cli.js +5 -0
- package/docs/SKILLS-CATALOG.md +42 -3
- package/docs/USER-GUIDE.md +2 -2
- package/hooks/detect-unreal.sh +90 -0
- package/package.json +1 -1
- package/profiles/unreal-dev.yaml +97 -0
- package/rules/gamedev/unreal-code.md +125 -0
- package/skills/install-mcp/SKILL.md +135 -46
- package/skills/install-mcp/references/unreal-operations.md +55 -0
- package/skills/ue-actor-component-architecture/SKILL.md +509 -0
- package/skills/ue-actor-component-architecture/references/actor-lifecycle.md +301 -0
- package/skills/ue-actor-component-architecture/references/component-types.md +592 -0
- package/skills/ue-ai-navigation/SKILL.md +526 -0
- package/skills/ue-ai-navigation/references/behavior-tree-patterns.md +392 -0
- package/skills/ue-ai-navigation/references/behavior-tree-workflow.md +107 -0
- package/skills/ue-ai-navigation/references/custom-bttask.md +104 -0
- package/skills/ue-ai-navigation/references/eqs-reference.md +423 -0
- package/skills/ue-animation-system/SKILL.md +521 -0
- package/skills/ue-animation-system/references/anim-notify-reference.md +486 -0
- package/skills/ue-animation-system/references/locomotion-setup.md +550 -0
- package/skills/ue-async-threading/SKILL.md +433 -0
- package/skills/ue-async-threading/references/thread-safety-guide.md +213 -0
- package/skills/ue-async-threading/references/threading-patterns.md +345 -0
- package/skills/ue-audio-system/SKILL.md +527 -0
- package/skills/ue-audio-system/references/audio-setup-patterns.md +700 -0
- package/skills/ue-blueprints/SKILL.md +134 -0
- package/skills/ue-blueprints/references/communication.md +82 -0
- package/skills/ue-character-movement/SKILL.md +475 -0
- package/skills/ue-character-movement/references/cmc-extension-patterns.md +335 -0
- package/skills/ue-character-movement/references/movement-pipeline.md +189 -0
- package/skills/ue-cpp-foundations/SKILL.md +533 -0
- package/skills/ue-cpp-foundations/references/components-and-gc.md +107 -0
- package/skills/ue-cpp-foundations/references/container-patterns.md +544 -0
- package/skills/ue-cpp-foundations/references/delegate-patterns.md +497 -0
- package/skills/ue-cpp-foundations/references/gameplay-classes-cpp.md +136 -0
- package/skills/ue-cpp-foundations/references/property-specifiers.md +306 -0
- package/skills/ue-data-assets-tables/SKILL.md +527 -0
- package/skills/ue-data-assets-tables/references/asset-loading-patterns.md +306 -0
- package/skills/ue-data-assets-tables/references/data-driven-design.md +378 -0
- package/skills/ue-editor-tools/SKILL.md +523 -0
- package/skills/ue-editor-tools/references/detail-customization-patterns.md +395 -0
- package/skills/ue-editor-tools/references/editor-module-setup.md +480 -0
- package/skills/ue-game-features/SKILL.md +477 -0
- package/skills/ue-game-features/references/experience-system.md +222 -0
- package/skills/ue-game-features/references/game-feature-patterns.md +308 -0
- package/skills/ue-gameplay-abilities/SKILL.md +518 -0
- package/skills/ue-gameplay-abilities/references/ability-task-reference.md +391 -0
- package/skills/ue-gameplay-abilities/references/gameplay-effect-reference.md +397 -0
- package/skills/ue-gameplay-abilities/references/gas-setup-patterns.md +369 -0
- package/skills/ue-gameplay-framework/SKILL.md +466 -0
- package/skills/ue-gameplay-framework/references/framework-class-map.md +243 -0
- package/skills/ue-input-system/SKILL.md +394 -0
- package/skills/ue-input-system/references/cpp-setup.md +131 -0
- package/skills/ue-input-system/references/enhanced-input-workflow.md +117 -0
- package/skills/ue-input-system/references/input-action-reference.md +731 -0
- package/skills/ue-mass-entity/SKILL.md +476 -0
- package/skills/ue-mass-entity/references/mass-entity-patterns.md +319 -0
- package/skills/ue-mass-entity/references/mass-fragment-reference.md +119 -0
- package/skills/ue-materials-rendering/SKILL.md +526 -0
- package/skills/ue-materials-rendering/references/material-parameter-reference.md +216 -0
- package/skills/ue-materials-rendering/references/post-process-settings.md +383 -0
- package/skills/ue-module-build-system/SKILL.md +487 -0
- package/skills/ue-module-build-system/references/build-cs-reference.md +418 -0
- package/skills/ue-module-build-system/references/common-build-errors.md +381 -0
- package/skills/ue-naming-conventions/SKILL.md +142 -0
- package/skills/ue-naming-conventions/references/asset-name-modifiers.md +233 -0
- package/skills/ue-naming-conventions/references/content-structure.md +83 -0
- package/skills/ue-networking-replication/SKILL.md +452 -0
- package/skills/ue-networking-replication/references/replication-patterns.md +526 -0
- package/skills/ue-networking-replication/references/rpc-decision-guide.md +393 -0
- package/skills/ue-niagara-effects/SKILL.md +531 -0
- package/skills/ue-niagara-effects/references/niagara-data-interfaces.md +491 -0
- package/skills/ue-niagara-effects/references/niagara-parameter-types.md +153 -0
- package/skills/ue-niagara-effects/references/niagara-workflow.md +115 -0
- package/skills/ue-packaging/SKILL.md +116 -0
- package/skills/ue-physics-collision/SKILL.md +423 -0
- package/skills/ue-physics-collision/references/collision-channel-setup.md +218 -0
- package/skills/ue-physics-collision/references/trace-patterns.md +499 -0
- package/skills/ue-procedural-generation/SKILL.md +505 -0
- package/skills/ue-procedural-generation/references/pcg-node-reference.md +381 -0
- package/skills/ue-procedural-generation/references/procedural-mesh-patterns.md +940 -0
- package/skills/ue-project-context/SKILL.md +305 -0
- package/skills/ue-sequencer-cinematics/SKILL.md +506 -0
- package/skills/ue-sequencer-cinematics/references/sequencer-patterns.md +629 -0
- package/skills/ue-serialization-savegames/SKILL.md +524 -0
- package/skills/ue-serialization-savegames/references/save-system-architecture.md +705 -0
- package/skills/ue-state-trees/SKILL.md +489 -0
- package/skills/ue-state-trees/references/state-tree-mass-integration.md +184 -0
- package/skills/ue-state-trees/references/state-tree-patterns.md +321 -0
- package/skills/ue-testing-debugging/SKILL.md +520 -0
- package/skills/ue-testing-debugging/references/automation-test-patterns.md +387 -0
- package/skills/ue-testing-debugging/references/profiling-commands.md +357 -0
- package/skills/ue-ui-umg-slate/SKILL.md +431 -0
- package/skills/ue-ui-umg-slate/references/common-ui-setup.md +484 -0
- package/skills/ue-ui-umg-slate/references/widget-types.md +487 -0
- package/skills/ue-world-level-streaming/SKILL.md +518 -0
- package/skills/ue-world-level-streaming/references/streaming-patterns.md +414 -0
- package/templates/gamedev/unreal-project-context.md +107 -0
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# Collision Channel Setup Reference
|
|
2
|
+
|
|
3
|
+
Reference for configuring custom collision channels, object types, and collision profiles in Unreal Engine 5 projects using the Chaos physics backend.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Channel Slots Available
|
|
8
|
+
|
|
9
|
+
UE reserves the first 14 channels for built-in engine use. Projects have 18 custom slots:
|
|
10
|
+
|
|
11
|
+
| Enum | INI Key | Typical Use |
|
|
12
|
+
|------------------------|-------------------|-------------------------|
|
|
13
|
+
| `ECC_GameTraceChannel1` | `TraceTypeQuery1` | Custom trace channel 1 |
|
|
14
|
+
| `ECC_GameTraceChannel2` | `TraceTypeQuery2` | Custom trace channel 2 |
|
|
15
|
+
| ...through... | ... | ... |
|
|
16
|
+
| `ECC_GameTraceChannel18` | `TraceTypeQuery18`| Custom trace channel 18 |
|
|
17
|
+
|
|
18
|
+
The same slots serve as object type channels when `bTraceType=False`.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## DefaultEngine.ini Configuration
|
|
23
|
+
|
|
24
|
+
All custom channels and profiles go in `Config/DefaultEngine.ini` under `[/Script/Engine.CollisionProfile]`.
|
|
25
|
+
|
|
26
|
+
### Declaring a Custom Trace Channel
|
|
27
|
+
|
|
28
|
+
```ini
|
|
29
|
+
[/Script/Engine.CollisionProfile]
|
|
30
|
+
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel1,DefaultResponse=ECR_Ignore,bTraceType=True,bStaticObject=False,Name="Weapon")
|
|
31
|
+
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel2,DefaultResponse=ECR_Ignore,bTraceType=True,bStaticObject=False,Name="Interaction")
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
- `bTraceType=True` — this is a trace channel (used in `LineTraceSingleByChannel`, `SweepSingleByChannel`)
|
|
35
|
+
- `DefaultResponse` — response all components have unless overridden
|
|
36
|
+
|
|
37
|
+
### Declaring a Custom Object Type Channel
|
|
38
|
+
|
|
39
|
+
```ini
|
|
40
|
+
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel3,DefaultResponse=ECR_Block,bTraceType=False,bStaticObject=False,Name="Interactable")
|
|
41
|
+
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel4,DefaultResponse=ECR_Block,bTraceType=False,bStaticObject=True,Name="HazardZone")
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
- `bTraceType=False` — object channel (what an object IS, not what a trace uses)
|
|
45
|
+
- `bStaticObject=True` — object is non-moving (WorldStatic category behavior)
|
|
46
|
+
|
|
47
|
+
### Declaring Custom Profiles
|
|
48
|
+
|
|
49
|
+
```ini
|
|
50
|
+
; Weapon/projectile — blocks WorldStatic, WorldDynamic, Pawn; ignores triggers
|
|
51
|
+
+Profiles=(Name="Projectile",CollisionEnabled=QueryAndPhysics,ObjectTypeName="WorldDynamic",CustomResponses=(\
|
|
52
|
+
(Channel="WorldStatic",Response=ECR_Block),\
|
|
53
|
+
(Channel="WorldDynamic",Response=ECR_Block),\
|
|
54
|
+
(Channel="Pawn",Response=ECR_Block),\
|
|
55
|
+
(Channel="PhysicsBody",Response=ECR_Block),\
|
|
56
|
+
(Channel="Weapon",Response=ECR_Ignore),\
|
|
57
|
+
(Channel="Interaction",Response=ECR_Ignore)))
|
|
58
|
+
|
|
59
|
+
; Trigger volume — overlaps pawns, ignores everything else
|
|
60
|
+
+Profiles=(Name="TriggerPawn",CollisionEnabled=QueryOnly,ObjectTypeName="WorldDynamic",CustomResponses=(\
|
|
61
|
+
(Channel="Pawn",Response=ECR_Overlap),\
|
|
62
|
+
(Channel="WorldStatic",Response=ECR_Ignore),\
|
|
63
|
+
(Channel="WorldDynamic",Response=ECR_Ignore),\
|
|
64
|
+
(Channel="PhysicsBody",Response=ECR_Ignore)))
|
|
65
|
+
|
|
66
|
+
; Interactable object — visible to interaction traces, blocks world
|
|
67
|
+
+Profiles=(Name="Interactable",CollisionEnabled=QueryAndPhysics,ObjectTypeName="Interactable",CustomResponses=(\
|
|
68
|
+
(Channel="WorldStatic",Response=ECR_Block),\
|
|
69
|
+
(Channel="WorldDynamic",Response=ECR_Block),\
|
|
70
|
+
(Channel="Pawn",Response=ECR_Block),\
|
|
71
|
+
(Channel="Interaction",Response=ECR_Block),\
|
|
72
|
+
(Channel="Weapon",Response=ECR_Ignore),\
|
|
73
|
+
(Channel="Visibility",Response=ECR_Block)))
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## Common Profile Setups
|
|
79
|
+
|
|
80
|
+
### Shooter Game — Standard Channels
|
|
81
|
+
|
|
82
|
+
```ini
|
|
83
|
+
; Weapon trace — hits everything physical, ignores other weapon traces
|
|
84
|
+
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel1,DefaultResponse=ECR_Block,bTraceType=True,bStaticObject=False,Name="Weapon")
|
|
85
|
+
|
|
86
|
+
; Interaction trace — used by player to find interactable objects
|
|
87
|
+
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel2,DefaultResponse=ECR_Ignore,bTraceType=True,bStaticObject=False,Name="Interaction")
|
|
88
|
+
|
|
89
|
+
; Interactable object type
|
|
90
|
+
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel3,DefaultResponse=ECR_Block,bTraceType=False,bStaticObject=False,Name="Interactable")
|
|
91
|
+
|
|
92
|
+
; Damage volume object type
|
|
93
|
+
+DefaultChannelResponses=(Channel=ECC_GameTraceChannel4,DefaultResponse=ECR_Ignore,bTraceType=False,bStaticObject=False,Name="DamageVolume")
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Corresponding Profiles
|
|
97
|
+
|
|
98
|
+
```ini
|
|
99
|
+
; Player character — responds to weapon hits, can interact
|
|
100
|
+
+Profiles=(Name="PlayerPawn",CollisionEnabled=QueryAndPhysics,ObjectTypeName="Pawn",CustomResponses=(\
|
|
101
|
+
(Channel="WorldStatic",Response=ECR_Block),\
|
|
102
|
+
(Channel="WorldDynamic",Response=ECR_Block),\
|
|
103
|
+
(Channel="Weapon",Response=ECR_Block),\
|
|
104
|
+
(Channel="Interaction",Response=ECR_Block),\
|
|
105
|
+
(Channel="Interactable",Response=ECR_Ignore),\
|
|
106
|
+
(Channel="DamageVolume",Response=ECR_Overlap)))
|
|
107
|
+
|
|
108
|
+
; Pickup item — not hit by weapons, visible to interaction traces
|
|
109
|
+
+Profiles=(Name="Pickup",CollisionEnabled=QueryOnly,ObjectTypeName="Interactable",CustomResponses=(\
|
|
110
|
+
(Channel="Pawn",Response=ECR_Overlap),\
|
|
111
|
+
(Channel="WorldStatic",Response=ECR_Block),\
|
|
112
|
+
(Channel="Weapon",Response=ECR_Ignore),\
|
|
113
|
+
(Channel="Interaction",Response=ECR_Block),\
|
|
114
|
+
(Channel="Visibility",Response=ECR_Block)))
|
|
115
|
+
|
|
116
|
+
; NPC enemy — blocks weapons and pawns
|
|
117
|
+
+Profiles=(Name="EnemyPawn",CollisionEnabled=QueryAndPhysics,ObjectTypeName="Pawn",CustomResponses=(\
|
|
118
|
+
(Channel="WorldStatic",Response=ECR_Block),\
|
|
119
|
+
(Channel="WorldDynamic",Response=ECR_Block),\
|
|
120
|
+
(Channel="Pawn",Response=ECR_Block),\
|
|
121
|
+
(Channel="Weapon",Response=ECR_Block),\
|
|
122
|
+
(Channel="Interaction",Response=ECR_Ignore),\
|
|
123
|
+
(Channel="Camera",Response=ECR_Ignore)))
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Applying Profiles in C++
|
|
129
|
+
|
|
130
|
+
```cpp
|
|
131
|
+
// Apply a named profile — sets ObjectType, CollisionEnabled, and all channel responses at once
|
|
132
|
+
MyMesh->SetCollisionProfileName(TEXT("PlayerPawn"));
|
|
133
|
+
MyMesh->SetCollisionProfileName(TEXT("Projectile"));
|
|
134
|
+
MyMesh->SetCollisionProfileName(TEXT("NoCollision"));
|
|
135
|
+
|
|
136
|
+
// Get the current profile name
|
|
137
|
+
FName ProfileName = MyMesh->GetCollisionProfileName();
|
|
138
|
+
|
|
139
|
+
// Override individual channel responses after setting a profile
|
|
140
|
+
MyMesh->SetCollisionResponseToChannel(ECC_Camera, ECR_Ignore);
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## Referencing Custom Channels in C++
|
|
146
|
+
|
|
147
|
+
Custom trace channels map to `ETraceTypeQuery` for Blueprint functions and `ECollisionChannel` for C++ world queries.
|
|
148
|
+
|
|
149
|
+
```cpp
|
|
150
|
+
// Use the generated enum values — confirmed by checking Project Settings > Collision
|
|
151
|
+
// ECC_GameTraceChannel1 = "Weapon" (in our setup)
|
|
152
|
+
// ECC_GameTraceChannel2 = "Interaction"
|
|
153
|
+
|
|
154
|
+
FHitResult Hit;
|
|
155
|
+
FCollisionQueryParams Params;
|
|
156
|
+
Params.AddIgnoredActor(this);
|
|
157
|
+
|
|
158
|
+
// Weapon trace — using ECC directly
|
|
159
|
+
GetWorld()->LineTraceSingleByChannel(Hit, Start, End, ECC_GameTraceChannel1, Params);
|
|
160
|
+
|
|
161
|
+
// Interaction trace
|
|
162
|
+
GetWorld()->LineTraceSingleByChannel(Hit, Start, End, ECC_GameTraceChannel2, Params);
|
|
163
|
+
|
|
164
|
+
// Interaction trace by object type (finds Interactable objects)
|
|
165
|
+
FCollisionObjectQueryParams ObjectParams;
|
|
166
|
+
ObjectParams.AddObjectTypesToQuery(ECC_GameTraceChannel3); // Interactable type
|
|
167
|
+
GetWorld()->LineTraceSingleByObjectType(Hit, Start, End, ObjectParams, Params);
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## ECollisionEnabled Quick Reference
|
|
173
|
+
|
|
174
|
+
| Value | Query (Traces) | Physics (Forces/Sweep) | Typical Use |
|
|
175
|
+
|--------------------|---------------|------------------------|---------------------------------|
|
|
176
|
+
| `NoCollision` | No | No | Ghost/invisible actors |
|
|
177
|
+
| `QueryOnly` | Yes | No | Trigger volumes, sensors |
|
|
178
|
+
| `PhysicsOnly` | No | Yes | Invisible physics blockers |
|
|
179
|
+
| `QueryAndPhysics` | Yes | Yes | Most gameplay objects |
|
|
180
|
+
| `ProbeOnly` | Probe only | No | Contact data only (no query hits, no physics forces) |
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Physics Settings (Project Settings > Physics)
|
|
185
|
+
|
|
186
|
+
These values live in `Config/DefaultEngine.ini` under `[/Script/Engine.PhysicsSettings]` and map to `UPhysicsSettingsCore`:
|
|
187
|
+
|
|
188
|
+
```ini
|
|
189
|
+
[/Script/Engine.PhysicsSettings]
|
|
190
|
+
DefaultGravityZ=-980.000000
|
|
191
|
+
BounceThresholdVelocity=200.000000
|
|
192
|
+
FrictionCombineMode=Average
|
|
193
|
+
RestitutionCombineMode=Average
|
|
194
|
+
MaxAngularVelocity=3600.000000
|
|
195
|
+
MaxDepenetrationVelocity=0.000000
|
|
196
|
+
ContactOffsetMultiplier=0.020000
|
|
197
|
+
MinContactOffset=2.000000
|
|
198
|
+
MaxContactOffset=8.000000
|
|
199
|
+
bSimulateSkeletalMeshOnDedicatedServer=True
|
|
200
|
+
DefaultShapeComplexity=CTF_UseDefault
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
`DefaultShapeComplexity` accepts: `CTF_UseDefault`, `CTF_UseSimpleAndComplex`, `CTF_UseSimpleAsComplex`, `CTF_UseComplexAsSimple`.
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Collision Setup Checklist
|
|
208
|
+
|
|
209
|
+
When collision is not working as expected, verify in order:
|
|
210
|
+
|
|
211
|
+
1. **Both components have collision enabled** — `GetCollisionEnabled() != NoCollision`
|
|
212
|
+
2. **Response matrix is symmetric** — if A blocks B, B must block A for events
|
|
213
|
+
3. **Profile vs manual responses** — `SetCollisionProfileName` resets all manual responses; set per-channel overrides after the profile call
|
|
214
|
+
4. **Overlap events flag** — `bGenerateOverlapEvents` must be `true` on BOTH components for overlap events
|
|
215
|
+
5. **Hit events flag** — `bNotifyRigidBodyCollision` must be `true` for `OnComponentHit` to fire
|
|
216
|
+
6. **Physics enabled** — `bSimulatePhysics = true` required for physics-driven hits (`NormalImpulse` will be non-zero)
|
|
217
|
+
7. **Channel type** — trace channels vs object type channels use different query functions; mixing them gives no results
|
|
218
|
+
8. **Query layer** — `QueryOnly` components are invisible to physics-only queries and vice versa
|