mirror of
https://github.com/kuhyx/praca_magisterska.git
synced 2026-07-04 15:03:07 +02:00
284 lines
4.6 KiB
Markdown
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)
|