praca_magisterska/games/unreal/tutorial/appendix-c-unity-conversion.md

284 lines
4.6 KiB
Markdown

# Appendix C: Unity to Unreal Conversion Notes
[← Appendix B: Troubleshooting](appendix-b-troubleshooting.md) | [Back to Index](README.md)
---
## Scale Conversion
| Unity | Unreal | Notes |
| ---------------- | --------------------- | ---------------------------- |
| 1 unit = 1 meter | 1 unit = 1 centimeter | Multiply Unity values by 100 |
**Example:**
- Unity speed: `7.5` → Unreal speed: `750`
- Unity position: `(5, 10, 0)` → Unreal position: `(500, 1000, 0)`
---
## Coordinate System
| Axis | Unity | Unreal |
| ------- | ----- | ------ |
| Up | Y | Z |
| Forward | Z | X |
| Right | X | Y |
**For 2D top-down games:**
- Both use X for horizontal
- Y/Z swap for vertical
---
## Common Operations Comparison
### Input
**Unity:**
```csharp
float h = Input.GetAxisRaw("Horizontal");
float v = Input.GetAxisRaw("Vertical");
```
**Unreal (Enhanced Input):**
1. Create Input Action (IA_Move) with Axis2D type
2. Create Input Mapping Context with key bindings
3. Add Mapping Context in BeginPlay
4. Use "Get Action Value" node to read input
---
### Instantiate / Spawn
**Unity:**
```csharp
Instantiate(prefab, position, rotation);
```
**Unreal:**
```
Spawn Actor from Class
├── Class: YourBlueprintClass
├── Spawn Transform Location: position
└── Spawn Transform Rotation: rotation
```
---
### Destroy
**Unity:**
```csharp
Destroy(gameObject);
```
**Unreal:**
```
Destroy Actor
└── Target: Self (or reference)
```
---
### Delta Time
**Unity:**
```csharp
Time.deltaTime
```
**Unreal:**
```
Get World Delta Seconds
```
---
### Find Objects
**Unity:**
```csharp
FindObjectOfType<PlayerController>();
FindObjectsOfType<Enemy>();
```
**Unreal:**
```
Get All Actors of Class
├── Actor Class: BP_Player
└── Out Actors: (array)
Then: Get (a ref) → index 0
```
---
### Singleton Pattern
**Unity:**
```csharp
public static GameManager Instance { get; private set; }
void Awake() {
Instance = this;
}
```
**Unreal Options:**
1. **Game Instance** - Persists across levels
2. **Subsystem** - Engine-managed singleton
3. **Get All Actors of Class** - Find at runtime
---
### Coroutines vs Timers
**Unity:**
```csharp
StartCoroutine(DelayedAction());
IEnumerator DelayedAction() {
yield return new WaitForSeconds(2.0f);
DoSomething();
}
```
**Unreal:**
```
Set Timer by Function Name
├── Function Name: "DelayedAction"
├── Time: 2.0
└── Looping: false
```
Or use **Delay** node in blueprints.
---
### Physics Layers vs Collision Channels
**Unity:**
- Layer-based collision matrix
- `Physics.IgnoreLayerCollision()`
**Unreal:**
- Collision Channels (Object Types)
- Collision Presets
- Per-component collision settings
---
### Tags
**Unity:**
```csharp
if (other.CompareTag("Enemy")) { }
```
**Unreal:**
```
Actor Has Tag
├── Target: Other Actor
└── Tag: "Enemy"
```
Or use **Cast To** for type checking (preferred).
---
### Vector Math
| Operation | Unity | Unreal |
| ------------- | --------------------- | -------------------- |
| Normalize | `vector.normalized` | `Normalize` node |
| Magnitude | `vector.magnitude` | `Vector Length` node |
| Dot Product | `Vector3.Dot(a, b)` | `Dot Product` node |
| Cross Product | `Vector3.Cross(a, b)` | `Cross Product` node |
---
### Random
**Unity:**
```csharp
Random.Range(0f, 1f);
Random.Range(0, 10); // int, exclusive max
```
**Unreal:**
```
Random Float in Range
├── Min: 0.0
└── Max: 1.0
Random Integer in Range
├── Min: 0
└── Max: 9 // inclusive!
```
> ⚠️ **Note:** Unreal's integer range is INCLUSIVE on both ends!
---
### Debug
**Unity:**
```csharp
Debug.Log("Message");
Debug.DrawLine(start, end, Color.red);
```
**Unreal:**
```
Print String
└── In String: "Message"
Draw Debug Line
├── Line Start: start
├── Line End: end
└── Line Color: Red
```
---
## Quick Reference Table
| Concept | Unity | Unreal |
| --------- | ---------------- | --------------------- |
| Script | C# MonoBehaviour | Blueprint / C++ Actor |
| Prefab | .prefab asset | Blueprint Class |
| Scene | .unity scene | Level (.umap) |
| Inspector | Inspector window | Details panel |
| Hierarchy | Hierarchy window | Outliner |
| Project | Project window | Content Browser |
| Console | Console window | Output Log |
| Play | Play button | Play (Alt+P) |
---
[← Appendix B: Troubleshooting](appendix-b-troubleshooting.md) | [Back to Index](README.md)