mirror of
https://github.com/kuhyx/praca_magisterska.git
synced 2026-07-04 16:23:11 +02:00
4.6 KiB
4.6 KiB
Appendix C: Unity to Unreal Conversion Notes
← Appendix B: Troubleshooting | Back to Index
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:
float h = Input.GetAxisRaw("Horizontal");
float v = Input.GetAxisRaw("Vertical");
Unreal (Enhanced Input):
- Create Input Action (IA_Move) with Axis2D type
- Create Input Mapping Context with key bindings
- Add Mapping Context in BeginPlay
- Use "Get Action Value" node to read input
Instantiate / Spawn
Unity:
Instantiate(prefab, position, rotation);
Unreal:
Spawn Actor from Class
├── Class: YourBlueprintClass
├── Spawn Transform Location: position
└── Spawn Transform Rotation: rotation
Destroy
Unity:
Destroy(gameObject);
Unreal:
Destroy Actor
└── Target: Self (or reference)
Delta Time
Unity:
Time.deltaTime
Unreal:
Get World Delta Seconds
Find Objects
Unity:
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:
public static GameManager Instance { get; private set; }
void Awake() {
Instance = this;
}
Unreal Options:
- Game Instance - Persists across levels
- Subsystem - Engine-managed singleton
- Get All Actors of Class - Find at runtime
Coroutines vs Timers
Unity:
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:
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:
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:
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) |