feat: long live unity

This commit is contained in:
Krzysztof kuhy Rudnicki 2025-10-12 20:40:04 +02:00
parent ea288f5b1f
commit 0e60cbd402
73 changed files with 6898 additions and 37 deletions

104
games/unity/.gitignore vendored
View File

@ -312,3 +312,107 @@ TSWLatexianTemp*
# Uncomment the next line to have this generated file ignored.
#*Notes.bib
# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib
# option is specified. Footnotes are the stored in a file with suffix Notes.bib.
# Uncomment the next line to have this generated file ignored.
#*Notes.bib
# This .gitignore file should be placed at the root of your Unity project directory
#
# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore
#
.utmp/
/[Ll]ibrary/
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
/[Bb]uilds/
/[Ll]ogs/
/[Uu]ser[Ss]ettings/
*.log
# By default unity supports Blender asset imports, *.blend1 blender files do not need to be commited to version control.
*.blend1
*.blend1.meta
# MemoryCaptures can get excessive in size.
# They also could contain extremely sensitive data
/[Mm]emoryCaptures/
# Recordings can get excessive in size
/[Rr]ecordings/
# Uncomment this line if you wish to ignore the asset store tools plugin
# /[Aa]ssets/AssetStoreTools*
# Autogenerated Jetbrains Rider plugin
/[Aa]ssets/Plugins/Editor/JetBrains*
# Jetbrains Rider personal-layer settings
*.DotSettings.user
# Visual Studio cache directory
.vs/
# Gradle cache directory
.gradle/
# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.mdb
*.opendb
*.VC.db
# Unity3D generated meta files
*.pidb.meta
*.pdb.meta
*.mdb.meta
# Unity3D generated file on crash reports
sysinfo.txt
# Mono auto generated files
mono_crash.*
# Builds
*.apk
*.aab
*.unitypackage
*.unitypackage.meta
*.app
# Crashlytics generated file
crashlytics-build.properties
# TestRunner generated files
InitTestScene*.unity*
# Addressables default ignores, before user customizations
/ServerData
/[Aa]ssets/StreamingAssets/aa*
/[Aa]ssets/AddressableAssetsData/link.xml*
/[Aa]ssets/Addressables_Temp*
# By default, Addressables content builds will generate addressables_content_state.bin
# files in platform-specific subfolders, for example:
# /Assets/AddressableAssetsData/OSX/addressables_content_state.bin
/[Aa]ssets/AddressableAssetsData/*/*.bin*
# Visual Scripting auto-generated files
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Flow/UnitOptions.db
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Flow/UnitOptions.db.meta
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Core/Property Providers
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Core/Property Providers.meta
# Auto-generated scenes by play mode tests
/[Aa]ssets/[Ii]nit[Tt]est[Ss]cene*.unity*

View File

@ -0,0 +1,21 @@
using UnityEngine;
public class AutoDestroy : MonoBehaviour
{
[SerializeField] private float lifetime = 1.5f;
private void OnEnable()
{
Invoke(nameof(DestroySelf), lifetime);
}
private void OnDisable()
{
CancelInvoke();
}
private void DestroySelf()
{
Destroy(gameObject);
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 70d41ee73b19902cd8a62a320dbde7d9

View File

@ -0,0 +1,26 @@
using UnityEngine;
public class BackgroundScroller : MonoBehaviour
{
[SerializeField] private float scrollSpeed = 2f;
[SerializeField] private float tileSizeY = 20f;
[SerializeField] private bool randomizeOffset;
private Vector3 startPosition;
private void Start()
{
startPosition = transform.position;
if (randomizeOffset)
{
float initialOffset = Random.Range(0f, tileSizeY);
startPosition -= Vector3.up * initialOffset;
}
}
private void Update()
{
float newPosition = Mathf.Repeat(Time.time * scrollSpeed, tileSizeY);
transform.position = startPosition + Vector3.down * newPosition;
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: d043389e784a98769b85b475b19a08c3

View File

@ -1,23 +1,123 @@
using System.Collections.Generic;
using UnityEngine;
public class Bullet : MonoBehaviour
{
public float speed = 10f;
public static readonly List<Bullet> ActiveEnemyProjectiles = new List<Bullet>();
void Update()
[SerializeField] private float defaultSpeed = 12f;
[SerializeField] private float defaultLifetime = 4f;
[SerializeField] private int defaultDamage = 1;
[SerializeField] private GameObject impactEffectPrefab;
private Vector2 travelDirection = Vector2.up;
private float travelSpeed;
private float remainingLifetime;
private bool isEnemyProjectile;
private int damage;
private void OnEnable()
{
transform.Translate(Vector3.up * speed * Time.deltaTime);
if (transform.position.y > 10) Destroy(gameObject); // Out of bounds
remainingLifetime = Mathf.Max(0.1f, defaultLifetime);
travelSpeed = Mathf.Max(1f, defaultSpeed);
damage = Mathf.Max(1, defaultDamage);
}
void OnTriggerEnter2D(Collider2D other)
private void Update()
{
Debug.Log($"Bullet hit: {other.name} with tag: {other.tag}");
if (other.gameObject.GetComponent<Enemy>() != null)
float step = travelSpeed * Time.deltaTime;
transform.position += (Vector3)(travelDirection * step);
remainingLifetime -= Time.deltaTime;
if (remainingLifetime <= 0f)
{
Debug.Log("Enemy destroyed!");
Destroy(other.gameObject);
Recycle();
}
}
public void Initialize(Vector2 direction, float speed, bool enemyProjectile, float lifetime, int damageValue = 1)
{
travelDirection = direction.sqrMagnitude > 0f ? direction.normalized : Vector2.up;
travelSpeed = speed > 0f ? speed : defaultSpeed;
remainingLifetime = lifetime > 0f ? lifetime : defaultLifetime;
damage = Mathf.Max(1, damageValue);
if (isEnemyProjectile && !enemyProjectile)
{
ActiveEnemyProjectiles.Remove(this);
}
isEnemyProjectile = enemyProjectile;
if (isEnemyProjectile && !ActiveEnemyProjectiles.Contains(this))
{
ActiveEnemyProjectiles.Add(this);
}
}
private void OnTriggerEnter2D(Collider2D collision)
{
if (isEnemyProjectile)
{
PlayerController player = collision.GetComponent<PlayerController>();
if (player != null)
{
SpawnImpact();
player.TakeHit(damage, transform.position);
Recycle();
}
}
else
{
Enemy enemy = collision.GetComponent<Enemy>();
if (enemy != null)
{
SpawnImpact();
enemy.ApplyDamage(damage);
Recycle();
}
}
}
private void SpawnImpact()
{
if (impactEffectPrefab != null)
{
Instantiate(impactEffectPrefab, transform.position, Quaternion.identity);
}
}
private void OnDestroy()
{
if (isEnemyProjectile)
{
ActiveEnemyProjectiles.Remove(this);
}
}
private void Recycle()
{
if (isEnemyProjectile)
{
ActiveEnemyProjectiles.Remove(this);
}
Destroy(gameObject);
}
public static void ClearEnemyProjectilesWithEffect()
{
if (ActiveEnemyProjectiles.Count == 0) return;
Bullet[] snapshot = ActiveEnemyProjectiles.ToArray();
ActiveEnemyProjectiles.Clear();
for (int i = 0; i < snapshot.Length; i++)
{
Bullet projectile = snapshot[i];
if (projectile == null) continue;
projectile.SpawnImpact();
Destroy(projectile.gameObject);
}
}
}

View File

@ -1,21 +1,168 @@
using System.Collections.Generic;
using UnityEngine;
public class Enemy : MonoBehaviour
{
public float speed = 2f;
public static readonly List<Enemy> ActiveEnemies = new List<Enemy>();
void Update()
[Header("Durability")]
[SerializeField] private int maxHealth = 12;
[SerializeField] private int scoreValue = 50;
[Header("Movement")]
[SerializeField] private float verticalSpeed = 2.2f;
[SerializeField] private float horizontalAmplitude = 2.5f;
[SerializeField] private float horizontalFrequency = 1.8f;
[SerializeField] private float despawnY = -7.5f;
[SerializeField] private float despawnX = 14f;
[Header("Weaponry")]
[SerializeField] private Bullet enemyBulletPrefab;
[SerializeField] private Transform[] muzzlePoints;
[SerializeField] private float fireInterval = 0.35f;
[SerializeField] private int bulletsPerBurst = 20;
[SerializeField] private float burstSpread = 360f;
[SerializeField] private float enemyBulletSpeed = 10f;
[SerializeField] private float enemyBulletLifetime = 6f;
[Header("VFX")]
[SerializeField] private GameObject hitEffectPrefab;
[SerializeField] private GameObject deathEffectPrefab;
private int currentHealth;
private float baseX;
private float waveSeed;
private float fireTimer;
private bool isDying;
private void OnEnable()
{
transform.Translate(Vector3.down * speed * Time.deltaTime);
if (transform.position.y < -10) Destroy(gameObject); // Out of bounds
currentHealth = Mathf.Max(1, maxHealth);
baseX = transform.position.x;
waveSeed = Random.Range(0f, Mathf.PI * 2f);
fireTimer = Random.Range(0f, fireInterval);
isDying = false;
if (!ActiveEnemies.Contains(this))
{
ActiveEnemies.Add(this);
}
}
void OnTriggerEnter2D(Collider2D other)
private void OnDisable()
{
Debug.Log($"Enemy hit: {other.name} with tag: {other.tag}");
if (other.gameObject.GetComponent<Player>() != null)
ActiveEnemies.Remove(this);
}
private void Update()
{
Destroy(other.gameObject);
AdvanceMovement();
HandleFiring();
CheckBounds();
}
private void AdvanceMovement()
{
Vector3 position = transform.position;
position.y -= verticalSpeed * Time.deltaTime;
position.x = baseX + Mathf.Sin((Time.time + waveSeed) * horizontalFrequency) * horizontalAmplitude;
transform.position = position;
}
private void HandleFiring()
{
if (enemyBulletPrefab == null) return;
fireTimer -= Time.deltaTime;
if (fireTimer > 0f) return;
fireTimer = Mathf.Max(0.05f, fireInterval);
if (muzzlePoints != null && muzzlePoints.Length > 0)
{
for (int i = 0; i < muzzlePoints.Length; i++)
{
EmitBurst(muzzlePoints[i].position);
}
}
else
{
EmitBurst(transform.position);
}
}
private void EmitBurst(Vector3 worldPosition)
{
int count = Mathf.Max(1, bulletsPerBurst);
float angleStep = burstSpread >= 360f ? 360f / count : burstSpread / Mathf.Max(1, count - 1);
float startAngle = burstSpread >= 360f ? 0f : -burstSpread * 0.5f;
for (int i = 0; i < count; i++)
{
float degrees = startAngle + i * angleStep;
Vector2 direction = Quaternion.Euler(0f, 0f, degrees) * Vector2.down;
Bullet projectile = Instantiate(enemyBulletPrefab, worldPosition, Quaternion.identity);
projectile.Initialize(direction, enemyBulletSpeed, true, enemyBulletLifetime);
}
}
private void CheckBounds()
{
Vector3 position = transform.position;
if (position.y < despawnY || Mathf.Abs(position.x) > despawnX)
{
Destroy(gameObject);
}
}
public void ApplyDamage(int amount)
{
currentHealth -= Mathf.Max(1, amount);
if (hitEffectPrefab != null)
{
Instantiate(hitEffectPrefab, transform.position, Quaternion.identity);
}
if (currentHealth <= 0 && !isDying)
{
HandleDeath();
}
}
private void HandleDeath()
{
if (isDying) return;
isDying = true;
ScoreManager.Instance?.AddScore(scoreValue);
if (deathEffectPrefab != null)
{
Instantiate(deathEffectPrefab, transform.position, Quaternion.identity);
}
Destroy(gameObject);
}
private void OnTriggerEnter2D(Collider2D other)
{
PlayerController player = other.GetComponent<PlayerController>();
if (player == null) return;
player.TakeHit(1, transform.position);
HandleDeath();
}
public static void DestroyAllEnemies()
{
if (ActiveEnemies.Count == 0) return;
Enemy[] snapshot = ActiveEnemies.ToArray();
for (int i = 0; i < snapshot.Length; i++)
{
Enemy enemy = snapshot[i];
if (enemy == null) continue;
enemy.HandleDeath();
}
}
}

View File

@ -1,19 +1,79 @@
using System.Collections;
using UnityEngine;
public class EnemySpawner : MonoBehaviour
{
public GameObject enemyPrefab;
public float spawnInterval = 1f;
public float xRange = 8f;
[SerializeField] private GameObject enemyPrefab;
[SerializeField] private Transform[] spawnPoints;
[SerializeField] private float spawnAreaHalfWidth = 9f;
[SerializeField] private float gameDuration = 300f;
[SerializeField] private AnimationCurve spawnPerSecond = AnimationCurve.Linear(0f, 0.4f, 1f, 4.5f);
[SerializeField] private int maxSimultaneousEnemies = 120;
void Start()
private bool spawningActive;
private void Start()
{
InvokeRepeating("SpawnEnemy", 1f, spawnInterval);
spawningActive = true;
StartCoroutine(SpawnLoop());
}
void SpawnEnemy()
private IEnumerator SpawnLoop()
{
float xPos = Random.Range(-xRange, xRange);
Instantiate(enemyPrefab, new Vector3(xPos, 6, 0), Quaternion.identity);
if (enemyPrefab == null)
{
yield break;
}
float elapsed = 0f;
while (spawningActive && elapsed < gameDuration)
{
float normalized = gameDuration > 0f ? Mathf.Clamp01(elapsed / gameDuration) : 1f;
float spawnsPerSecond = Mathf.Max(0.05f, spawnPerSecond.Evaluate(normalized));
float waitTime = 1f / spawnsPerSecond;
if (Enemy.ActiveEnemies.Count < maxSimultaneousEnemies)
{
SpawnWave(normalized);
}
elapsed += waitTime;
yield return new WaitForSeconds(waitTime);
}
}
private void SpawnWave(float normalizedTime)
{
int baseCount = Mathf.Clamp(Mathf.RoundToInt(1f + normalizedTime * 6f), 1, 8);
int burstSize = Mathf.Clamp(baseCount + Random.Range(0, 3), 1, 12);
for (int i = 0; i < burstSize; i++)
{
SpawnEnemy();
}
}
private void SpawnEnemy()
{
Vector3 spawnPosition = transform.position;
if (spawnPoints != null && spawnPoints.Length > 0)
{
Transform pick = spawnPoints[Random.Range(0, spawnPoints.Length)];
spawnPosition = pick.position;
}
else
{
spawnPosition.x = Random.Range(-spawnAreaHalfWidth, spawnAreaHalfWidth);
}
Instantiate(enemyPrefab, spawnPosition, Quaternion.identity);
}
public void StopSpawning()
{
spawningActive = false;
StopAllCoroutines();
}
}

View File

@ -0,0 +1,67 @@
using UnityEngine;
public class GameDirector : MonoBehaviour
{
public static GameDirector Instance { get; private set; }
[SerializeField] private EnemySpawner enemySpawner;
[SerializeField] private PlayerController player;
[SerializeField] private float gameDuration = 300f;
private float elapsedTime;
private bool gameActive;
public float GameDuration => gameDuration;
private void Awake()
{
if (Instance != null && Instance != this)
{
Destroy(gameObject);
return;
}
Instance = this;
gameActive = true;
}
private void Start()
{
elapsedTime = 0f;
if (enemySpawner == null)
{
enemySpawner = FindObjectOfType<EnemySpawner>();
}
if (player == null)
{
player = FindObjectOfType<PlayerController>();
}
ScoreManager.Instance?.RegisterGameStart(player != null ? player.CurrentLives : 0, gameDuration);
}
private void Update()
{
if (!gameActive) return;
elapsedTime += Time.deltaTime;
float remaining = Mathf.Max(0f, gameDuration - elapsedTime);
ScoreManager.Instance?.UpdateTimer(remaining);
if (elapsedTime >= gameDuration)
{
gameActive = false;
enemySpawner?.StopSpawning();
ScoreManager.Instance?.HandleGameClear();
}
}
public void HandlePlayerDeath()
{
if (!gameActive) return;
gameActive = false;
enemySpawner?.StopSpawning();
ScoreManager.Instance?.HandleGameOver();
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: ad1d35ccb49f4d6e8bdf15be87950a2d

View File

@ -1,20 +1,153 @@
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public GameObject bulletPrefab;
public Transform shootPoint;
public float speed = 5f;
[Header("Movement")]
[SerializeField] private float moveSpeed = 7.5f;
[SerializeField] private Vector2 boundsMin = new Vector2(-8.5f, -4.5f);
[SerializeField] private Vector2 boundsMax = new Vector2(8.5f, 4.5f);
void Update()
[Header("Primary Fire")]
[SerializeField] private Bullet playerBulletPrefab;
[SerializeField] private Transform[] firePoints;
[SerializeField, Range(0.02f, 0.5f)] private float fireInterval = 0.08f;
[SerializeField, Range(1, 9)] private int volleySize = 3;
[SerializeField, Range(0f, 45f)] private float volleySpread = 12f;
[SerializeField] private float playerBulletSpeed = 22f;
[SerializeField] private float playerBulletLifetime = 3f;
[SerializeField] private bool allowMouseFire = true;
[Header("Special Ability")]
[SerializeField] private KeyCode specialKey = KeyCode.X;
[SerializeField] private GameObject specialEffectPrefab;
[Header("Durability")]
[SerializeField] private int maxLives = 3;
[SerializeField] private GameObject hitEffectPrefab;
[SerializeField] private GameObject deathEffectPrefab;
private float fireTimer;
private int currentLives;
private bool specialUsed;
public int MaxLives => maxLives;
public int CurrentLives => currentLives;
private void Awake()
{
float moveX = Input.GetAxis("Horizontal");
float moveY = Input.GetAxis("Vertical");
transform.position += new Vector3(moveX, moveY, 0) * speed * Time.deltaTime;
if (Input.GetKeyDown(KeyCode.Space))
{
Instantiate(bulletPrefab, shootPoint.position, Quaternion.identity);
currentLives = Mathf.Max(1, maxLives);
}
private void Update()
{
HandleMovement();
HandlePrimaryFire();
HandleSpecial();
}
private void HandleMovement()
{
Vector2 input = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
Vector3 velocity = input.normalized * moveSpeed * Time.deltaTime;
Vector3 candidate = transform.position + velocity;
candidate.x = Mathf.Clamp(candidate.x, boundsMin.x, boundsMax.x);
candidate.y = Mathf.Clamp(candidate.y, boundsMin.y, boundsMax.y);
transform.position = candidate;
}
private void HandlePrimaryFire()
{
bool wantsToFire = Input.GetKey(KeyCode.Z) || (allowMouseFire && Input.GetMouseButton(0));
if (!wantsToFire || playerBulletPrefab == null || firePoints == null || firePoints.Length == 0)
{
fireTimer = Mathf.Max(0f, fireTimer - Time.deltaTime);
return;
}
fireTimer -= Time.deltaTime;
if (fireTimer > 0f) return;
fireTimer = Mathf.Max(0.02f, fireInterval);
foreach (Transform firePoint in firePoints)
{
EmitVolleyFrom(firePoint.position);
}
}
private void EmitVolleyFrom(Vector3 origin)
{
int burstCount = Mathf.Max(1, volleySize);
if (burstCount == 1)
{
SpawnPlayerBullet(origin, Vector2.up);
return;
}
float spreadTotal = volleySpread * (burstCount - 1);
float startAngle = -spreadTotal * 0.5f;
for (int i = 0; i < burstCount; i++)
{
float angle = startAngle + i * volleySpread;
Vector2 direction = Quaternion.Euler(0f, 0f, angle) * Vector2.up;
SpawnPlayerBullet(origin, direction.normalized);
}
}
private void SpawnPlayerBullet(Vector3 position, Vector2 direction)
{
Bullet bulletInstance = Instantiate(playerBulletPrefab, position, Quaternion.identity);
bulletInstance.Initialize(direction, playerBulletSpeed, false, playerBulletLifetime);
}
private void HandleSpecial()
{
if (specialUsed) return;
bool activated = Input.GetKeyDown(specialKey) || Input.GetMouseButtonDown(1);
if (!activated) return;
specialUsed = true;
if (specialEffectPrefab != null)
{
Instantiate(specialEffectPrefab, transform.position, Quaternion.identity);
}
Bullet.ClearEnemyProjectilesWithEffect();
Enemy.DestroyAllEnemies();
ScoreManager.Instance?.RegisterBombUse();
}
public void TakeHit(int damage, Vector3 hitWorldPosition)
{
currentLives -= Mathf.Max(1, damage);
currentLives = Mathf.Max(0, currentLives);
if (hitEffectPrefab != null)
{
Instantiate(hitEffectPrefab, hitWorldPosition, Quaternion.identity);
}
ScoreManager.Instance?.SetLives(currentLives);
if (currentLives <= 0)
{
HandleDeath();
}
}
private void OnEnable()
{
ScoreManager.Instance?.SetLives(currentLives);
}
private void HandleDeath()
{
if (deathEffectPrefab != null)
{
Instantiate(deathEffectPrefab, transform.position, Quaternion.identity);
}
gameObject.SetActive(false);
GameDirector.Instance?.HandlePlayerDeath();
}
}

View File

@ -0,0 +1,190 @@
using UnityEngine;
using UnityEngine.UI;
public class ScoreManager : MonoBehaviour
{
public static ScoreManager Instance { get; private set; }
[SerializeField] private Text scoreText;
[SerializeField] private Text livesText;
[SerializeField] private Text timerText;
private int score;
private int currentLives;
private float cachedDuration;
private float bombMessageTimer;
private const float BombMessageDuration = 2.5f;
private void Awake()
{
if (Instance != null && Instance != this)
{
Destroy(gameObject);
return;
}
Instance = this;
DontDestroyOnLoad(gameObject);
EnsureUiReferences();
RefreshLabels();
}
private void Update()
{
if (bombMessageTimer <= 0f || timerText == null) return;
bombMessageTimer -= Time.deltaTime;
if (bombMessageTimer <= 0f)
{
timerText.text = FormatTime(cachedDuration);
}
}
public void RegisterGameStart(int initialLives, float duration)
{
currentLives = Mathf.Max(0, initialLives);
cachedDuration = Mathf.Max(0f, duration);
score = 0;
bombMessageTimer = 0f;
RefreshLabels();
}
public void AddScore(int amount)
{
score += Mathf.Max(0, amount);
UpdateScoreLabel();
}
public void SetLives(int lives)
{
currentLives = Mathf.Max(0, lives);
UpdateLivesLabel();
}
public void UpdateTimer(float timeRemaining)
{
cachedDuration = Mathf.Max(0f, timeRemaining);
if (bombMessageTimer > 0f) return;
if (timerText == null) return;
timerText.text = FormatTime(timeRemaining);
}
public void HandleGameOver()
{
if (timerText != null)
{
timerText.text = "Game Over";
}
}
public void HandleGameClear()
{
if (timerText != null)
{
timerText.text = "Mission Complete";
}
}
public void RegisterBombUse()
{
if (timerText == null) return;
timerText.text = "Screen Clear Deployed";
bombMessageTimer = BombMessageDuration;
}
private void EnsureUiReferences()
{
if (scoreText != null && livesText != null && timerText != null) return;
Canvas canvas = FindObjectOfType<Canvas>();
if (canvas == null)
{
canvas = BuildRuntimeCanvas();
}
if (scoreText == null)
{
scoreText = CreateLabel(canvas.transform, "ScoreText", new Vector2(20f, -20f));
}
if (livesText == null)
{
livesText = CreateLabel(canvas.transform, "LivesText", new Vector2(20f, -60f));
}
if (timerText == null)
{
timerText = CreateLabel(canvas.transform, "TimerText", new Vector2(20f, -100f));
}
}
private Canvas BuildRuntimeCanvas()
{
GameObject canvasObject = new GameObject("HUDCanvas");
DontDestroyOnLoad(canvasObject);
Canvas canvas = canvasObject.AddComponent<Canvas>();
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
canvasObject.AddComponent<CanvasScaler>();
canvasObject.AddComponent<GraphicRaycaster>();
return canvas;
}
private Text CreateLabel(Transform parent, string name, Vector2 anchoredOffset)
{
GameObject go = new GameObject(name);
go.transform.SetParent(parent);
RectTransform rectTransform = go.AddComponent<RectTransform>();
rectTransform.anchorMin = new Vector2(0f, 1f);
rectTransform.anchorMax = new Vector2(0f, 1f);
rectTransform.pivot = new Vector2(0f, 1f);
rectTransform.anchoredPosition = anchoredOffset;
rectTransform.sizeDelta = new Vector2(320f, 36f);
Text label = go.AddComponent<Text>();
label.font = Resources.GetBuiltinResource<Font>("Arial.ttf");
label.fontSize = 24;
label.color = Color.white;
label.alignment = TextAnchor.UpperLeft;
label.horizontalOverflow = HorizontalWrapMode.Overflow;
return label;
}
private void RefreshLabels()
{
UpdateScoreLabel();
UpdateLivesLabel();
if (timerText != null)
{
timerText.text = FormatTime(cachedDuration);
}
}
private void UpdateScoreLabel()
{
if (scoreText != null)
{
scoreText.text = $"Score: {score}";
}
}
private void UpdateLivesLabel()
{
if (livesText != null)
{
livesText.text = $"Lives: {currentLives}";
}
}
private static string FormatTime(float seconds)
{
seconds = Mathf.Max(0f, seconds);
int minutes = Mathf.FloorToInt(seconds / 60f);
int secs = Mathf.FloorToInt(seconds % 60f);
return $"Time: {minutes:00}:{secs:00}";
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 7ff9f2088103071c3bfaea5a72945157

413
magisterka_2/.gitignore vendored Normal file
View File

@ -0,0 +1,413 @@
build
test/**/*.textest
test/**/*.pdf
.sconsign.dblite
.vscode
/*.pdf
## Core latex/pdflatex auxiliary files:
*.aux
*.lof
*.log
*.lot
*.fls
*.out
*.toc
*.fmt
*.fot
*.cb
*.cb2
.*.lb
## Intermediate documents:
*.dvi
*.xdv
*-converted-to.*
# these rules might exclude image files for figures etc.
# *.ps
# *.eps
# *.pdf
## Generated if empty string is given at "Please type another file name for output:"
.pdf
## Bibliography auxiliary files (bibtex/biblatex/biber):
*.bbl
*.bcf
*.blg
*-blx.aux
*-blx.bib
*.run.xml
## Build tool auxiliary files:
*.fdb_latexmk
*.synctex
*.synctex(busy)
*.synctex.gz
*.synctex.gz(busy)
*.pdfsync
*.rubbercache
rubber.cache
## Build tool directories for auxiliary files
# latexrun
latex.out/
## Auxiliary and intermediate files from other packages:
# algorithms
*.alg
*.loa
# achemso
acs-*.bib
# amsthm
*.thm
# beamer
*.nav
*.pre
*.snm
*.vrb
# changes
*.soc
# comment
*.cut
# cprotect
*.cpt
# elsarticle (documentclass of Elsevier journals)
*.spl
# endnotes
*.ent
# fixme
*.lox
# feynmf/feynmp
*.mf
*.mp
*.t[1-9]
*.t[1-9][0-9]
*.tfm
#(r)(e)ledmac/(r)(e)ledpar
*.end
*.?end
*.[1-9]
*.[1-9][0-9]
*.[1-9][0-9][0-9]
*.[1-9]R
*.[1-9][0-9]R
*.[1-9][0-9][0-9]R
*.eledsec[1-9]
*.eledsec[1-9]R
*.eledsec[1-9][0-9]
*.eledsec[1-9][0-9]R
*.eledsec[1-9][0-9][0-9]
*.eledsec[1-9][0-9][0-9]R
# glossaries
*.acn
*.acr
*.glg
*.glo
*.gls
*.glsdefs
*.lzo
*.lzs
*.slg
*.slo
*.sls
# uncomment this for glossaries-extra (will ignore makeindex's style files!)
# *.ist
# gnuplot
*.gnuplot
*.table
# gnuplottex
*-gnuplottex-*
# gregoriotex
*.gaux
*.glog
*.gtex
# htlatex
*.4ct
*.4tc
*.idv
*.lg
*.trc
*.xref
# hypdoc
*.hd
# hyperref
*.brf
# knitr
*-concordance.tex
# TODO Uncomment the next line if you use knitr and want to ignore its generated tikz files
# *.tikz
*-tikzDictionary
# listings
*.lol
# luatexja-ruby
*.ltjruby
# makeidx
*.idx
*.ilg
*.ind
# minitoc
*.maf
*.mlf
*.mlt
*.mtc[0-9]*
*.slf[0-9]*
*.slt[0-9]*
*.stc[0-9]*
# minted
_minted*
*.pyg
# morewrites
*.mw
# newpax
*.newpax
# nomencl
*.nlg
*.nlo
*.nls
# pax
*.pax
# pdfpcnotes
*.pdfpc
# sagetex
*.sagetex.sage
*.sagetex.py
*.sagetex.scmd
# scrwfile
*.wrt
# svg
svg-inkscape/
# sympy
*.sout
*.sympy
sympy-plots-for-*.tex/
# pdfcomment
*.upa
*.upb
# pythontex
*.pytxcode
pythontex-files-*/
# tcolorbox
*.listing
# thmtools
*.loe
# TikZ & PGF
*.dpth
*.md5
*.auxlock
# titletoc
*.ptc
# todonotes
*.tdo
# vhistory
*.hst
*.ver
# easy-todo
*.lod
# xcolor
*.xcp
# xmpincl
*.xmpi
# xindy
*.xdy
# xypic precompiled matrices and outlines
*.xyc
*.xyd
# endfloat
*.ttt
*.fff
# Latexian
TSWLatexianTemp*
## Editors:
# WinEdt
*.bak
*.sav
# Texpad
.texpadtmp
# LyX
*.lyx~
# Kile
*.backup
# gummi
.*.swp
# KBibTeX
*~[0-9]*
# TeXnicCenter
*.tps
# auto folder when using emacs and auctex
./auto/*
*.el
# expex forward references with \gathertags
*-tags.tex
# standalone packages
*.sta
# Makeindex log files
*.lpz
# xwatermark package
*.xwm
# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib
# option is specified. Footnotes are the stored in a file with suffix Notes.bib.
# Uncomment the next line to have this generated file ignored.
#*Notes.bib
# This .gitignore file should be placed at the root of your Unity project directory
#
# Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore
#
.utmp/
/[Ll]ibrary/
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
/[Bb]uilds/
/[Ll]ogs/
/[Uu]ser[Ss]ettings/
*.log
# By default unity supports Blender asset imports, *.blend1 blender files do not need to be commited to version control.
*.blend1
*.blend1.meta
# MemoryCaptures can get excessive in size.
# They also could contain extremely sensitive data
/[Mm]emoryCaptures/
# Recordings can get excessive in size
/[Rr]ecordings/
# Uncomment this line if you wish to ignore the asset store tools plugin
# /[Aa]ssets/AssetStoreTools*
# Autogenerated Jetbrains Rider plugin
/[Aa]ssets/Plugins/Editor/JetBrains*
# Jetbrains Rider personal-layer settings
*.DotSettings.user
# Visual Studio cache directory
.vs/
# Gradle cache directory
.gradle/
# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
*.mdb
*.opendb
*.VC.db
# Unity3D generated meta files
*.pidb.meta
*.pdb.meta
*.mdb.meta
# Unity3D generated file on crash reports
sysinfo.txt
# Mono auto generated files
mono_crash.*
# Builds
*.apk
*.aab
*.unitypackage
*.unitypackage.meta
*.app
# Crashlytics generated file
crashlytics-build.properties
# TestRunner generated files
InitTestScene*.unity*
# Addressables default ignores, before user customizations
/ServerData
/[Aa]ssets/StreamingAssets/aa*
/[Aa]ssets/AddressableAssetsData/link.xml*
/[Aa]ssets/Addressables_Temp*
# By default, Addressables content builds will generate addressables_content_state.bin
# files in platform-specific subfolders, for example:
# /Assets/AddressableAssetsData/OSX/addressables_content_state.bin
/[Aa]ssets/AddressableAssetsData/*/*.bin*
# Visual Scripting auto-generated files
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Flow/UnitOptions.db
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Flow/UnitOptions.db.meta
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Core/Property Providers
/[Aa]ssets/Unity.VisualScripting.Generated/VisualScripting.Core/Property Providers.meta
# Auto-generated scenes by play mode tests
/[Aa]ssets/[Ii]nit[Tt]est[Ss]cene*.unity*

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,14 @@
fileFormatVersion: 2
guid: 3590b91b4603b465dbb4216d601bff33
ScriptedImporter:
internalIDToNameTable: []
externalObjects: {}
serializedVersion: 2
userData:
assetBundleName:
assetBundleVariant:
script: {fileID: 11500000, guid: 8404be70184654265930450def6a9037, type: 3}
generateWrapperCode: 0
wrapperCodePath:
wrapperClassName:
wrapperCodeNamespace:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 131a6b21c8605f84396be9f6751fb6e3
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,208 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 9
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 3
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 12
m_GIWorkflowMode: 1
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 0
m_EnableRealtimeLightmaps: 0
m_LightmapEditorSettings:
serializedVersion: 12
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAmbientOcclusion: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_FinalGather: 0
m_FinalGatherFiltering: 1
m_FinalGatherRayCount: 256
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 0
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 500
m_PVRBounces: 2
m_PVREnvironmentSampleCount: 500
m_PVREnvironmentReferencePointCount: 2048
m_PVRFilteringMode: 2
m_PVRDenoiserTypeDirect: 0
m_PVRDenoiserTypeIndirect: 0
m_PVRDenoiserTypeAO: 0
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVREnvironmentMIS: 0
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 0}
m_LightingSettings: {fileID: 0}
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 2
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
accuratePlacement: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &519420028
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 519420032}
- component: {fileID: 519420031}
- component: {fileID: 519420029}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!81 &519420029
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 519420028}
m_Enabled: 1
--- !u!20 &519420031
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 519420028}
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_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_FocalLength: 50
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: 5
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 0
m_HDR: 1
m_AllowMSAA: 0
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 0
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &519420032
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 519420028}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 2cda990e2423bbf4892e6590ba056729
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 9f525bd660d2799e485caa7557c7af1c
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,128 @@
using UnityEngine;
namespace Magisterka.BulletHell
{
/// <summary>
/// Builds a procedural starfield and scrolls it endlessly.
/// </summary>
public class BackgroundScroller : MonoBehaviour
{
[SerializeField] private float scrollSpeed = 2f;
[SerializeField] private float parallaxFactor = 0.6f;
[SerializeField] private float tileHeight = 30f;
private Transform _tileA;
private Transform _tileB;
private float _resetY;
private float _cameraWidth;
public static BackgroundScroller Create(Camera targetCamera, Transform parent)
{
var go = new GameObject("BackgroundScroller");
go.transform.SetParent(parent, false);
var scroller = go.AddComponent<BackgroundScroller>();
scroller.Build(targetCamera);
return scroller;
}
private void Build(Camera cam)
{
if (cam == null)
{
cam = Camera.main;
}
float height = cam.orthographicSize * 2f;
_cameraWidth = height * cam.aspect;
_resetY = -tileHeight;
var sprite = GenerateStarSprite((int)(_cameraWidth * 16f), (int)(tileHeight * 16f));
_tileA = CreateTile("Starfield_A", sprite, 0f);
_tileB = CreateTile("Starfield_B", sprite, tileHeight);
}
private Transform CreateTile(string name, Sprite sprite, float yOffset)
{
var tile = new GameObject(name);
tile.transform.SetParent(transform, false);
tile.transform.position = new Vector3(0f, yOffset, 10f);
var renderer = tile.AddComponent<SpriteRenderer>();
renderer.sprite = sprite;
renderer.sortingOrder = -100;
renderer.color = new Color(0.7f, 0.7f, 0.7f, 0.8f);
float scaleX = (_cameraWidth + 6f) / sprite.bounds.size.x;
float scaleY = tileHeight / sprite.bounds.size.y;
tile.transform.localScale = new Vector3(scaleX, scaleY, 1f);
return tile.transform;
}
private void Update()
{
float delta = scrollSpeed * Time.deltaTime;
ScrollTile(_tileA, delta);
ScrollTile(_tileB, delta * parallaxFactor);
Recycle(_tileA);
Recycle(_tileB);
}
private void ScrollTile(Transform tile, float delta)
{
if (tile == null)
{
return;
}
tile.Translate(Vector3.down * delta, Space.World);
}
private void Recycle(Transform tile)
{
if (tile == null)
{
return;
}
if (tile.position.y <= _resetY)
{
tile.Translate(Vector3.up * (tileHeight * 2f), Space.World);
}
}
private static Sprite GenerateStarSprite(int width, int height)
{
width = Mathf.Clamp(width, 128, 2048);
height = Mathf.Clamp(height, 128, 4096);
var texture = new Texture2D(width, height, TextureFormat.RGBA32, false)
{
filterMode = FilterMode.Bilinear,
wrapMode = TextureWrapMode.Repeat
};
var pixels = new Color[width * height];
var background = new Color(0.03f, 0.04f, 0.08f, 1f);
for (int i = 0; i < pixels.Length; i++)
{
pixels[i] = background;
}
int starCount = (width * height) / 45;
for (int i = 0; i < starCount; i++)
{
int x = Random.Range(0, width);
int y = Random.Range(0, height);
float intensity = Random.Range(0.6f, 1.2f);
var color = new Color(intensity, intensity, intensity, 1f);
pixels[x + y * width] = color;
}
texture.SetPixels(pixels);
texture.Apply();
return Sprite.Create(texture, new Rect(0, 0, width, height), new Vector2(0.5f, 0.5f), 64f);
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: e5314a501f1fb0551be9a8451c951864

View File

@ -0,0 +1,125 @@
using System.Collections.Generic;
using UnityEngine;
namespace Magisterka.BulletHell
{
/// <summary>
/// Handles individual bullet lifetime, movement, and collision dispatching.
/// </summary>
[RequireComponent(typeof(SpriteRenderer))]
public class Bullet : MonoBehaviour
{
private static readonly Dictionary<Color, Sprite> SpriteCache = new Dictionary<Color, Sprite>();
[SerializeField] private float radius = 0.22f;
[SerializeField] private float despawnBounds = 14f;
private SpriteRenderer _spriteRenderer;
private CircleCollider2D _collider;
private Rigidbody2D _body;
private BulletPool _ownerPool;
private Vector2 _direction;
private float _speed;
private float _damage;
private Faction _ownerFaction;
public bool BelongsToEnemy => _ownerFaction == Faction.Enemy;
public BulletPool OwnerPool => _ownerPool;
public static Bullet Create(BulletPool pool, Color tint, Faction faction)
{
var go = new GameObject("Bullet" + faction, typeof(SpriteRenderer));
var bullet = go.AddComponent<Bullet>();
bullet.Initialize(pool, tint, faction);
return bullet;
}
private void Initialize(BulletPool pool, Color tint, Faction faction)
{
_ownerPool = pool;
_ownerFaction = faction;
_spriteRenderer = GetComponent<SpriteRenderer>();
_spriteRenderer.sprite = GetOrCreateSprite(tint);
_spriteRenderer.color = tint;
_body = gameObject.AddComponent<Rigidbody2D>();
_body.gravityScale = 0f;
_body.isKinematic = true;
_body.interpolation = RigidbodyInterpolation2D.Interpolate;
_collider = gameObject.AddComponent<CircleCollider2D>();
_collider.isTrigger = true;
_collider.radius = radius;
gameObject.layer = LayerMask.NameToLayer("Default");
gameObject.SetActive(false);
}
public void Configure(Vector2 direction, float speed, float damage, Faction faction)
{
_direction = direction.normalized;
_speed = speed;
_damage = damage;
_ownerFaction = faction;
}
private void Update()
{
transform.position += (Vector3)(_direction * (_speed * Time.deltaTime));
if (Mathf.Abs(transform.position.x) > despawnBounds || Mathf.Abs(transform.position.y) > despawnBounds)
{
Despawn();
}
}
private void OnTriggerEnter2D(Collider2D other)
{
if (!other.TryGetComponent(out Health health))
{
return;
}
if (health.Faction == _ownerFaction)
{
return;
}
if (health.Faction == Faction.Player && PlayerController.Instance != null && PlayerController.Instance.IsInvulnerable())
{
return;
}
health.ApplyDamage(_damage, transform.position);
Despawn();
}
public void Despawn()
{
_ownerPool?.Return(this);
}
private static Sprite GetOrCreateSprite(Color tint)
{
if (SpriteCache.TryGetValue(tint, out var sprite))
{
return sprite;
}
const int size = 16;
var texture = new Texture2D(size, size, TextureFormat.RGBA32, false) { filterMode = FilterMode.Point };
var pixels = new Color[size * size];
for (int i = 0; i < pixels.Length; i++)
{
pixels[i] = tint;
}
texture.SetPixels(pixels);
texture.Apply();
sprite = Sprite.Create(texture, new Rect(0, 0, size, size), new Vector2(0.5f, 0.5f), 100f);
SpriteCache[tint] = sprite;
return sprite;
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: cac8a93675d7419629b19696f280a652

View File

@ -0,0 +1,89 @@
using System;
using System.Collections.Generic;
using Magisterka.BulletHell;
using UnityEngine;
namespace Magisterka.BulletHell
{
/// <summary>
/// Runtime pool that keeps huge bullet counts without constant allocations.
/// </summary>
public class BulletPool : MonoBehaviour
{
[SerializeField] private Color bulletColor = Color.white;
[SerializeField] private Faction faction = Faction.Player;
[SerializeField] private int warmCapacity = 64;
private readonly Queue<Bullet> _pool = new Queue<Bullet>();
private readonly HashSet<Bullet> _liveBullets = new HashSet<Bullet>();
private Transform _poolRoot;
public Color BulletColor => bulletColor;
public Faction OwnerFaction => faction;
public static BulletPool Create(Transform parent, string poolName, Color color, Faction ownerFaction, int warmCount)
{
if (parent == null) throw new ArgumentNullException(nameof(parent));
var go = new GameObject(poolName);
go.transform.SetParent(parent, false);
var pool = go.AddComponent<BulletPool>();
pool.Initialize(color, ownerFaction, warmCount);
return pool;
}
private void Initialize(Color color, Faction ownerFaction, int warmCount)
{
bulletColor = color;
faction = ownerFaction;
warmCapacity = Mathf.Max(0, warmCount);
_poolRoot = new GameObject("Inactive" + name).transform;
_poolRoot.SetParent(transform, false);
for (int i = 0; i < warmCapacity; i++)
{
var bullet = Bullet.Create(this, bulletColor, faction);
Return(bullet);
}
}
public Bullet Spawn(Vector2 position, Vector2 direction, float speed, float damage)
{
Bullet bullet = _pool.Count > 0 ? _pool.Dequeue() : Bullet.Create(this, bulletColor, faction);
_liveBullets.Add(bullet);
bullet.transform.SetParent(null, false);
bullet.gameObject.SetActive(true);
bullet.transform.position = position;
bullet.Configure(direction, speed, damage, faction);
return bullet;
}
public void Return(Bullet bullet)
{
if (bullet == null) return;
bullet.gameObject.SetActive(false);
bullet.transform.SetParent(_poolRoot, false);
_pool.Enqueue(bullet);
_liveBullets.Remove(bullet);
}
public void ClearLiveBullets()
{
if (_liveBullets.Count == 0) return;
foreach (var bullet in _liveBullets)
{
if (bullet != null)
{
bullet.gameObject.SetActive(false);
bullet.transform.SetParent(_poolRoot, false);
_pool.Enqueue(bullet);
}
}
_liveBullets.Clear();
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 2cf1222941636185f83028970675cdc0

View File

@ -0,0 +1,39 @@
using UnityEngine;
namespace Magisterka.BulletHell
{
/// <summary>
/// Quick camera shake helper for impactful effects.
/// </summary>
public class CameraShaker : MonoBehaviour
{
private Vector3 _originalPos;
private float _shakeTime;
private float _shakeStrength;
private void Awake()
{
_originalPos = transform.localPosition;
}
private void Update()
{
if (_shakeTime <= 0f)
{
transform.localPosition = Vector3.Lerp(transform.localPosition, _originalPos, 6f * Time.deltaTime);
return;
}
_shakeTime -= Time.deltaTime;
var offset = Random.insideUnitCircle * _shakeStrength;
transform.localPosition = _originalPos + new Vector3(offset.x, offset.y, 0f);
_shakeStrength = Mathf.Lerp(_shakeStrength, 0f, 3f * Time.deltaTime);
}
public void Shake(float duration, float strength)
{
_shakeTime = Mathf.Max(_shakeTime, duration);
_shakeStrength = Mathf.Max(_shakeStrength, strength);
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 635828e8464adc769a94e3e091877b0e

View File

@ -0,0 +1,123 @@
using System.Collections.Generic;
using UnityEngine;
namespace Magisterka.BulletHell
{
/// <summary>
/// Lightweight visual feedback hub for hits, explosions, and screen-clears.
/// </summary>
public class EffectManager : MonoBehaviour
{
public static EffectManager Instance { get; private set; }
[SerializeField] private int warmCount = 64;
[SerializeField] private Color playerColor = new Color(0.35f, 0.85f, 1f, 1f);
[SerializeField] private Color enemyColor = new Color(1f, 0.45f, 0.25f, 1f);
private readonly Queue<EffectPulse> _pool = new Queue<EffectPulse>();
private Transform _poolRoot;
private CameraShaker _cameraShaker;
private void Awake()
{
if (Instance != null && Instance != this)
{
Destroy(gameObject);
return;
}
Instance = this;
DontDestroyOnLoad(gameObject);
}
public void Initialize(Transform parent)
{
if (parent != null)
{
transform.SetParent(parent, false);
}
_cameraShaker = FindFirstObjectByType<CameraShaker>();
if (_cameraShaker == null && Camera.main != null)
{
_cameraShaker = Camera.main.gameObject.AddComponent<CameraShaker>();
}
_poolRoot = new GameObject("FX_Pool").transform;
_poolRoot.SetParent(transform, false);
Warmup(warmCount);
}
public void SpawnHitEffect(Vector2 position, Faction hitFaction, float intensity)
{
var color = hitFaction == Faction.Player ? playerColor : enemyColor;
var endSize = Mathf.Lerp(0.6f, 1.8f, Mathf.Clamp01(intensity + 0.2f));
PlayPulse(position, color, 0.25f, endSize, 0.18f);
}
public void SpawnExplosion(Vector2 position, Faction faction, float size = 2.5f)
{
var color = faction == Faction.Player ? playerColor : enemyColor;
for (int i = 0; i < 4; i++)
{
float start = 0.4f + i * 0.1f;
float end = size + i * 0.35f;
float duration = 0.22f + i * 0.06f;
PlayPulse(position, color, start, end, duration);
}
_cameraShaker?.Shake(0.18f, 0.45f * size);
}
public void SpawnScreenClear(Vector2 position, float radius)
{
for (int i = 0; i < 6; i++)
{
float start = 0.8f + i * 0.5f;
float end = radius + i * 1.2f;
float duration = 0.35f + i * 0.12f;
var blend = Mathf.Clamp01(i / 5f);
var color = Color.Lerp(playerColor, enemyColor, blend);
PlayPulse(position, color, start, end, duration);
}
_cameraShaker?.Shake(0.4f, 1.2f * radius);
}
private void Warmup(int count)
{
for (int i = 0; i < count; i++)
{
_pool.Enqueue(CreatePulse());
}
}
private EffectPulse CreatePulse()
{
var go = new GameObject("EffectPulse");
go.transform.SetParent(_poolRoot, false);
var pulse = go.AddComponent<EffectPulse>();
go.SetActive(false);
return pulse;
}
private void PlayPulse(Vector2 position, Color color, float startSize, float endSize, float duration)
{
var pulse = _pool.Count > 0 ? _pool.Dequeue() : CreatePulse();
pulse.transform.SetParent(null, false);
pulse.Play(position, color, startSize, endSize, duration, Recycle);
}
private void Recycle(EffectPulse pulse)
{
if (pulse == null)
{
return;
}
pulse.transform.SetParent(_poolRoot, false);
_pool.Enqueue(pulse);
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: c0af68a7cbf92607891efec8c6733c7d

View File

@ -0,0 +1,102 @@
using System;
using UnityEngine;
namespace Magisterka.BulletHell
{
/// <summary>
/// Simple animated sprite burst that scales and fades over a short lifetime.
/// </summary>
[RequireComponent(typeof(SpriteRenderer))]
public class EffectPulse : MonoBehaviour
{
private SpriteRenderer _renderer;
private Action<EffectPulse> _onComplete;
private Vector3 _startScale;
private Vector3 _endScale;
private float _duration;
private float _elapsed;
private Color _baseColor;
private bool _isActive;
private void Awake()
{
_renderer = GetComponent<SpriteRenderer>();
_renderer.sprite = BuildPulseSprite();
_renderer.sortingOrder = 50;
_renderer.color = Color.white;
}
public void Play(Vector2 position, Color color, float startSize, float endSize, float duration, Action<EffectPulse> onComplete)
{
transform.position = position;
_startScale = Vector3.one * Mathf.Max(0.01f, startSize);
_endScale = Vector3.one * Mathf.Max(0.02f, endSize);
_duration = Mathf.Max(0.05f, duration);
_elapsed = 0f;
_baseColor = color;
_renderer.color = color;
_onComplete = onComplete;
_isActive = true;
gameObject.SetActive(true);
}
private void Update()
{
if (!_isActive)
{
return;
}
_elapsed += Time.deltaTime;
float t = Mathf.Clamp01(_elapsed / _duration);
transform.localScale = Vector3.Lerp(_startScale, _endScale, t);
var color = _baseColor;
color.a = Mathf.Lerp(1f, 0f, t);
_renderer.color = color;
if (_elapsed >= _duration)
{
Stop();
}
}
public void Stop()
{
if (!_isActive)
{
return;
}
_isActive = false;
gameObject.SetActive(false);
_onComplete?.Invoke(this);
}
private static Sprite BuildPulseSprite()
{
const int size = 32;
var texture = new Texture2D(size, size, TextureFormat.RGBA32, false);
texture.filterMode = FilterMode.Bilinear;
var center = new Vector2(size - 1, size - 1) * 0.5f;
var pixels = new Color[size * size];
for (int y = 0; y < size; y++)
{
for (int x = 0; x < size; x++)
{
var index = x + y * size;
float dst = Vector2.Distance(center, new Vector2(x, y)) / (size * 0.5f);
float alpha = Mathf.Clamp01(1f - dst);
pixels[index] = new Color(1f, 1f, 1f, alpha * alpha);
}
}
texture.SetPixels(pixels);
texture.Apply();
return Sprite.Create(texture, new Rect(0, 0, size, size), new Vector2(0.5f, 0.5f), 64f);
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 201e8da9a92132ef7a9c53d0ab7e383c

View File

@ -0,0 +1,126 @@
using System.Collections;
using UnityEngine;
namespace Magisterka.BulletHell
{
/// <summary>
/// Controls enemy motion, firing patterns, and death rewards.
/// </summary>
[RequireComponent(typeof(Health))]
public class EnemyController : MonoBehaviour
{
[SerializeField] private float moveSpeed = 3f;
[SerializeField] private float bulletSpeed = 12f;
[SerializeField] private float bulletDamage = 8f;
[SerializeField] private float fireInterval = 0.6f;
[SerializeField] private int scoreValue = 100;
private EnemySpawner _spawner;
private BulletPool _bulletPool;
private PlayerController _player;
private Health _health;
private float _phaseSeed;
private float _zigzagWidth = 2.8f;
private float _difficulty;
private Coroutine _fireRoutine;
public void Initialize(EnemySpawner spawner, BulletPool bulletPool, PlayerController player, float difficultyScale, float healthValue)
{
_spawner = spawner;
_bulletPool = bulletPool;
_player = player;
_difficulty = difficultyScale;
_health = GetComponent<Health>();
_health.Configure(Faction.Enemy, healthValue);
_health.Died += HandleDeath;
_phaseSeed = Random.Range(0f, 360f);
moveSpeed += difficultyScale * 0.8f;
fireInterval = Mathf.Max(0.22f, fireInterval - difficultyScale * 0.08f);
bulletSpeed += difficultyScale * 1.4f;
bulletDamage += difficultyScale * 0.6f;
scoreValue += Mathf.RoundToInt(40f * difficultyScale);
if (_fireRoutine != null)
{
StopCoroutine(_fireRoutine);
}
_fireRoutine = StartCoroutine(FireRoutine());
}
private void Update()
{
var pos = transform.position;
pos += Vector3.down * (moveSpeed * Time.deltaTime);
pos.x += Mathf.Sin(Time.time * (2f + _difficulty) + _phaseSeed) * (_zigzagWidth * Time.deltaTime);
transform.position = pos;
if (transform.position.y < -12f)
{
_spawner?.DespawnEnemy(this);
}
}
private IEnumerator FireRoutine()
{
yield return new WaitForSeconds(Random.Range(0.15f, fireInterval));
while (true)
{
FirePattern();
yield return new WaitForSeconds(fireInterval);
}
}
private void FirePattern()
{
int radialBullets = Mathf.Clamp(Mathf.RoundToInt(16 + _difficulty * 14f), 12, 48);
float angleStep = 360f / radialBullets;
float angleOffset = Time.time * 60f + _phaseSeed;
for (int i = 0; i < radialBullets; i++)
{
float angle = (angleStep * i + angleOffset) * Mathf.Deg2Rad;
var dir = new Vector2(Mathf.Cos(angle), Mathf.Sin(angle));
_bulletPool.Spawn(transform.position, dir, bulletSpeed, bulletDamage);
}
// Additional forward stream for dense barrages.
var forward = Vector2.down;
for (int i = -2; i <= 2; i++)
{
var spreadDir = Quaternion.Euler(0f, 0f, i * 8f) * forward;
_bulletPool.Spawn(transform.position, spreadDir, bulletSpeed * 1.2f, bulletDamage * 0.8f);
}
if (_player != null && _player.isActiveAndEnabled)
{
var toPlayer = ((Vector2)_player.transform.position - (Vector2)transform.position).normalized;
int aimedShots = Mathf.Clamp(3 + Mathf.RoundToInt(_difficulty), 3, 8);
for (int i = 0; i < aimedShots; i++)
{
float sway = (i - (aimedShots - 1) * 0.5f) * 4f;
var dir = Quaternion.Euler(0f, 0f, sway) * toPlayer;
_bulletPool.Spawn(transform.position, dir, bulletSpeed * 1.4f, bulletDamage * 0.9f);
}
}
}
private void HandleDeath(Health _)
{
EffectManager.Instance?.SpawnExplosion(transform.position, Faction.Enemy, 3f + _difficulty);
ScoreManager.Instance?.AddScore(scoreValue);
_spawner?.NotifyEnemyKilled(this);
Destroy(gameObject);
}
private void OnDestroy()
{
if (_health != null)
{
_health.Died -= HandleDeath;
}
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 93ede0e90a8bf587dba308bd088a2e70

View File

@ -0,0 +1,176 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace Magisterka.BulletHell
{
/// <summary>
/// Spawns continuously escalating enemy waves for roughly five minutes.
/// </summary>
public class EnemySpawner : MonoBehaviour
{
public static EnemySpawner Instance { get; private set; }
[SerializeField] private float totalDuration = 300f;
[SerializeField] private float spawnDelayStart = 1.2f;
[SerializeField] private float spawnDelayEnd = 0.18f;
[SerializeField] private float spawnHeight = 10f;
[SerializeField] private float horizontalPadding = 1.2f;
private readonly List<EnemyController> _liveEnemies = new List<EnemyController>();
private BulletPool _enemyBulletPool;
private Camera _camera;
private Sprite _enemySprite;
private float _elapsed;
private Vector2 _worldBounds;
private PlayerController _player;
public void Initialize(Camera camera, BulletPool enemyPool, PlayerController player, Vector2 worldBounds)
{
if (Instance != null && Instance != this)
{
Destroy(gameObject);
return;
}
Instance = this;
_camera = camera;
_enemyBulletPool = enemyPool;
_player = player;
_worldBounds = worldBounds;
_enemySprite = BuildEnemySprite();
StartCoroutine(SpawnRoutine());
}
public void NotifyEnemyKilled(EnemyController enemy)
{
_liveEnemies.Remove(enemy);
}
public void DespawnEnemy(EnemyController enemy)
{
if (enemy == null)
{
return;
}
_liveEnemies.Remove(enemy);
Destroy(enemy.gameObject);
}
public void ClearScreen()
{
foreach (var enemy in _liveEnemies.ToArray())
{
if (enemy != null && enemy.TryGetComponent(out Health health))
{
health.Kill();
}
}
_enemyBulletPool?.ClearLiveBullets();
}
private IEnumerator SpawnRoutine()
{
yield return new WaitForSeconds(1.5f);
while (_elapsed < totalDuration)
{
SpawnWave();
float progress = Mathf.Clamp01(_elapsed / totalDuration);
float delay = Mathf.Lerp(spawnDelayStart, spawnDelayEnd, progress);
delay = Mathf.Max(0.08f, delay);
yield return new WaitForSeconds(delay);
_elapsed += delay;
}
}
private void SpawnWave()
{
int targetCount = Mathf.Clamp(Mathf.RoundToInt(3 + _elapsed * 0.12f), 4, 18);
float difficulty = Mathf.Clamp01(_elapsed / totalDuration) * 8f;
for (int i = 0; i < targetCount; i++)
{
Vector2 spawnPos = PickSpawnPosition(i, targetCount);
SpawnEnemy(spawnPos, difficulty);
}
}
private Vector2 PickSpawnPosition(int index, int total)
{
float camWidth = _worldBounds.x;
float step = (camWidth * 2f - horizontalPadding * 2f) / Mathf.Max(1, total - 1);
float x = -camWidth + horizontalPadding + step * index + Random.Range(-0.6f, 0.6f);
float y = _camera.orthographicSize + spawnHeight;
return new Vector2(x, y);
}
private void SpawnEnemy(Vector2 position, float difficulty)
{
var enemyGO = new GameObject("Enemy");
enemyGO.transform.SetParent(transform, false);
enemyGO.transform.position = position;
enemyGO.transform.localScale = Vector3.one * 1.6f;
var renderer = enemyGO.AddComponent<SpriteRenderer>();
renderer.sprite = _enemySprite;
renderer.sortingOrder = 10;
renderer.color = Color.Lerp(new Color(1f, 0.6f, 0.3f, 1f), new Color(1f, 0.1f, 0.2f, 1f), Mathf.Clamp01(difficulty / 8f));
var collider = enemyGO.AddComponent<CircleCollider2D>();
collider.isTrigger = true;
collider.radius = 0.7f;
var health = enemyGO.AddComponent<Health>();
var controller = enemyGO.AddComponent<EnemyController>();
controller.Initialize(this, _enemyBulletPool, _player, difficulty, 30f + difficulty * 20f);
_liveEnemies.Add(controller);
}
private void OnDestroy()
{
if (Instance == this)
{
Instance = null;
}
}
private Sprite BuildEnemySprite()
{
const int size = 64;
var texture = new Texture2D(size, size, TextureFormat.RGBA32, false)
{
filterMode = FilterMode.Point
};
var center = new Vector2(size / 2f, size / 2f);
var pixels = new Color[size * size];
var body = new Color(1f, 0.35f, 0.35f, 1f);
for (int y = 0; y < size; y++)
{
for (int x = 0; x < size; x++)
{
int index = x + y * size;
float dist = Vector2.Distance(center, new Vector2(x, y));
float threshold = size * 0.35f + Mathf.Sin(y * 0.2f) * 2f;
pixels[index] = dist <= threshold ? body : new Color(0f, 0f, 0f, 0f);
}
}
texture.SetPixels(pixels);
texture.Apply();
return Sprite.Create(texture, new Rect(0, 0, size, size), new Vector2(0.5f, 0.5f), 64f);
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 35145ffe5be7aea6782f360b36ae7d2a

View File

@ -0,0 +1,13 @@
using System;
namespace Magisterka.BulletHell
{
/// <summary>
/// Basic identifier for combat sides.
/// </summary>
public enum Faction
{
Player = 0,
Enemy = 1
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 3b8dd67ed3d0b4ed9bd25117ac55c8c6

View File

@ -0,0 +1,23 @@
using UnityEngine;
namespace Magisterka.BulletHell
{
/// <summary>
/// Ensures the runtime bootstrapper exists even if the scene is empty.
/// </summary>
public static class GameBootstrap
{
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)]
private static void EnsureInitializer()
{
if (Object.FindFirstObjectByType<GameInitializer>() != null)
{
return;
}
var go = new GameObject("GameInitializer");
go.AddComponent<GameInitializer>();
Object.DontDestroyOnLoad(go);
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 8a0bda5e5cb690368bcffabb28cc385b

View File

@ -0,0 +1,101 @@
using Magisterka.BulletHell;
using UnityEngine;
using UnityEngine.UI;
namespace Magisterka.BulletHell
{
/// <summary>
/// Bootstraps the benchmark bullet hell scene entirely at runtime.
/// </summary>
public class GameInitializer : MonoBehaviour
{
[SerializeField] private float cameraSize = 6.5f;
private void Awake()
{
BuildCamera();
BuildGame();
}
private void BuildCamera()
{
var cam = Camera.main;
if (cam == null)
{
cam = new GameObject("Main Camera").AddComponent<Camera>();
}
cam.tag = "MainCamera";
cam.clearFlags = CameraClearFlags.SolidColor;
cam.backgroundColor = Color.black;
cam.orthographic = true;
cam.orthographicSize = cameraSize;
cam.transform.position = new Vector3(0f, 0f, -10f);
}
private void BuildGame()
{
Application.targetFrameRate = 240;
Cursor.visible = false;
var cam = Camera.main;
var bounds = new Vector2(cam.orthographicSize * cam.aspect, cam.orthographicSize);
var root = new GameObject("GameRoot").transform;
root.SetParent(transform, false);
BackgroundScroller.Create(cam, root);
var effectManager = new GameObject("EffectManager").AddComponent<EffectManager>();
effectManager.Initialize(root);
var scoreManager = new GameObject("ScoreManager").AddComponent<ScoreManager>();
var scoreText = CreateScoreUI();
scoreManager.Initialize(scoreText);
var pools = new GameObject("BulletPools").transform;
pools.SetParent(root, false);
var playerPool = BulletPool.Create(pools, "PlayerBullets", new Color(0.35f, 0.9f, 1f, 1f), Faction.Player, 600);
var enemyPool = BulletPool.Create(pools, "EnemyBullets", new Color(1f, 0.4f, 0.2f, 1f), Faction.Enemy, 1200);
var player = PlayerController.CreatePlayer(root, playerPool, bounds);
var spawnerGO = new GameObject("EnemySpawner");
spawnerGO.transform.SetParent(root, false);
var spawner = spawnerGO.AddComponent<EnemySpawner>();
spawner.Initialize(cam, enemyPool, player, bounds);
}
private Text CreateScoreUI()
{
var canvasGO = new GameObject("Canvas");
var canvas = canvasGO.AddComponent<Canvas>();
canvas.renderMode = RenderMode.ScreenSpaceOverlay;
canvasGO.AddComponent<CanvasScaler>().uiScaleMode = CanvasScaler.ScaleMode.ScaleWithScreenSize;
canvasGO.AddComponent<GraphicRaycaster>();
var textGO = new GameObject("ScoreLabel");
textGO.transform.SetParent(canvasGO.transform, false);
var label = textGO.AddComponent<Text>();
label.font = Resources.GetBuiltinResource<Font>("LegacyRuntime.ttf");
if (label.font == null)
{
label.font = Font.CreateDynamicFontFromOSFont("Arial", 32);
}
label.fontSize = 32;
label.alignment = TextAnchor.UpperLeft;
label.color = Color.white;
label.text = "Score: 0";
var rect = label.rectTransform;
rect.anchorMin = new Vector2(0f, 1f);
rect.anchorMax = new Vector2(0f, 1f);
rect.pivot = new Vector2(0f, 1f);
rect.anchoredPosition = new Vector2(20f, -20f);
canvasGO.transform.SetParent(transform, false);
return label;
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: a62032d38411c5517a166d1d3804a9a7

View File

@ -0,0 +1,71 @@
using System;
using UnityEngine;
namespace Magisterka.BulletHell
{
/// <summary>
/// Tracks hit points and dispatches simple death callbacks.
/// </summary>
public class Health : MonoBehaviour
{
[SerializeField] private Faction faction = Faction.Enemy;
[SerializeField] private float maxHealth = 10f;
private float _current;
public event Action<Health> Died;
public Faction Faction => faction;
public float MaxHealth => maxHealth;
public float Current => _current;
private void Awake()
{
_current = maxHealth;
}
public void Configure(Faction targetFaction, float health)
{
faction = targetFaction;
maxHealth = Mathf.Max(1f, health);
_current = maxHealth;
}
public void ApplyDamage(float damage, Vector2 hitPoint)
{
if (_current <= 0f)
{
return;
}
_current -= damage;
EffectManager.Instance?.SpawnHitEffect(hitPoint, faction, Mathf.Clamp01(damage / maxHealth));
if (_current <= 0f)
{
Die();
}
}
public void RestoreFull()
{
_current = maxHealth;
}
public void Kill()
{
if (_current <= 0f)
{
return;
}
_current = 0f;
Die();
}
private void Die()
{
Died?.Invoke(this);
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 8ed2f8f5001acaaaba43718c23be1206

View File

@ -0,0 +1,288 @@
using System.Collections;
using UnityEngine;
namespace Magisterka.BulletHell
{
/// <summary>
/// Handles user input, shooting, screen-clearing bomb, and respawn logic.
/// </summary>
[RequireComponent(typeof(Health))]
public class PlayerController : MonoBehaviour
{
public static PlayerController Instance { get; private set; }
[Header("Movement")]
[SerializeField] private float moveSpeed = 12f;
[SerializeField] private float focusSpeedMultiplier = 0.6f;
[Header("Offense")]
[SerializeField] private float fireRate = 0.08f;
[SerializeField] private float bulletSpeed = 26f;
[SerializeField] private float bulletDamage = 16f;
[SerializeField] private int volleyWidth = 6;
[Header("Survivability")]
[SerializeField] private int maxLives = 5;
[SerializeField] private float respawnDelay = 1.4f;
[SerializeField] private float invulnerabilityDuration = 2f;
[Header("Controls")]
[SerializeField] private KeyCode fireKey = KeyCode.Z;
[SerializeField] private KeyCode modifierKey = KeyCode.LeftShift;
[SerializeField] private KeyCode bombKey = KeyCode.X;
private BulletPool _playerBulletPool;
private Health _health;
private SpriteRenderer _renderer;
private Vector2 _bounds = new Vector2(8f, 4.5f);
private float _fireCooldown;
private bool _bombAvailable = true;
private int _remainingLives;
private bool _isInvulnerable;
private Color _baseColor;
public void Initialize(BulletPool bulletPool, Vector2 movementBounds)
{
Instance = this;
_playerBulletPool = bulletPool;
_bounds = movementBounds;
_health = GetComponent<Health>();
_health.Configure(Faction.Player, 60f);
_health.Died += HandleDeath;
_renderer = GetComponent<SpriteRenderer>();
_baseColor = _renderer != null ? _renderer.color : Color.cyan;
_remainingLives = Mathf.Max(0, maxLives - 1);
transform.position = new Vector3(0f, -_bounds.y + 1.5f, 0f);
}
public static PlayerController CreatePlayer(Transform parent, BulletPool playerBulletPool, Vector2 movementBounds)
{
var playerGO = new GameObject("Player");
playerGO.transform.SetParent(parent, false);
var renderer = playerGO.AddComponent<SpriteRenderer>();
renderer.sprite = BuildPlayerSprite();
renderer.sortingOrder = 20;
renderer.color = new Color(0.25f, 0.85f, 1f, 1f);
var collider = playerGO.AddComponent<CircleCollider2D>();
collider.radius = 0.55f;
collider.isTrigger = true;
var health = playerGO.AddComponent<Health>();
var controller = playerGO.AddComponent<PlayerController>();
controller.Initialize(playerBulletPool, movementBounds);
return controller;
}
private void Update()
{
HandleMovement();
HandleShooting();
HandleBomb();
if (_fireCooldown > 0f)
{
_fireCooldown -= Time.deltaTime;
}
}
private void HandleMovement()
{
float x = 0f;
float y = 0f;
if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow)) x -= 1f;
if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow)) x += 1f;
if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow)) y += 1f;
if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow)) y -= 1f;
var direction = new Vector2(x, y).normalized;
float speed = moveSpeed * (Input.GetKey(modifierKey) ? focusSpeedMultiplier : 1f);
var delta = direction * (speed * Time.deltaTime);
var next = transform.position + (Vector3)delta;
next.x = Mathf.Clamp(next.x, -_bounds.x + 0.5f, _bounds.x - 0.5f);
next.y = Mathf.Clamp(next.y, -_bounds.y + 0.5f, _bounds.y - 0.5f);
transform.position = next;
}
private void HandleShooting()
{
bool wantsFire = Input.GetKey(fireKey) || Input.GetMouseButton(0);
if (!wantsFire || _fireCooldown > 0f)
{
return;
}
FireVolley();
_fireCooldown = fireRate;
}
private void FireVolley()
{
var origin = transform.position + Vector3.up * 0.4f;
int half = volleyWidth / 2;
for (int i = -half; i <= half; i++)
{
float spread = i * 6f;
var direction = Quaternion.Euler(0f, 0f, spread) * Vector2.up;
var offset = direction * 0.25f * Mathf.Abs(i);
_playerBulletPool.Spawn(origin + (Vector3)offset, direction, bulletSpeed, bulletDamage);
}
EffectManager.Instance?.SpawnHitEffect(origin + Vector3.up * 0.2f, Faction.Player, 0.6f);
}
private void HandleBomb()
{
if (!_bombAvailable)
{
return;
}
bool trigger = Input.GetKeyDown(bombKey) || Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButtonDown(1);
if (!trigger)
{
return;
}
_bombAvailable = false;
StartCoroutine(PerformBomb());
}
private IEnumerator PerformBomb()
{
_isInvulnerable = true;
_renderer.color = Color.white;
EffectManager.Instance?.SpawnScreenClear(transform.position, 18f);
EnemySpawner.Instance?.ClearScreen();
// Hyper dash upwards and back for dramatic flair.
Vector3 start = transform.position;
Vector3 apex = new Vector3(0f, Mathf.Min(_bounds.y - 0.6f, start.y + 4.5f), 0f);
float travel = 0.4f;
float elapsed = 0f;
while (elapsed < travel)
{
elapsed += Time.deltaTime;
float t = elapsed / travel;
transform.position = Vector3.Lerp(start, apex, t);
yield return null;
}
elapsed = 0f;
while (elapsed < travel)
{
elapsed += Time.deltaTime;
float t = elapsed / travel;
transform.position = Vector3.Lerp(apex, start, t);
yield return null;
}
_isInvulnerable = false;
_renderer.color = _baseColor;
}
private void HandleDeath(Health _)
{
StartCoroutine(RespawnRoutine());
}
private IEnumerator RespawnRoutine()
{
EffectManager.Instance?.SpawnExplosion(transform.position, Faction.Player, 4f);
_renderer.enabled = false;
_isInvulnerable = true;
if (_remainingLives < 0)
{
gameObject.SetActive(false);
yield break;
}
yield return new WaitForSeconds(respawnDelay);
transform.position = new Vector3(0f, -_bounds.y + 1.5f, 0f);
_renderer.enabled = true;
_health.RestoreFull();
float timer = invulnerabilityDuration;
while (timer > 0f)
{
timer -= Time.deltaTime;
float pulse = Mathf.PingPong(Time.time * 10f, 1f);
if (_renderer != null)
{
_renderer.color = Color.Lerp(_baseColor, Color.white, pulse);
}
yield return null;
}
if (_renderer != null)
{
_renderer.color = _baseColor;
}
_isInvulnerable = false;
_remainingLives--;
}
private void OnDestroy()
{
if (_health != null)
{
_health.Died -= HandleDeath;
}
if (Instance == this)
{
Instance = null;
}
}
public bool IsInvulnerable() => _isInvulnerable;
public void ApplyDamage(float value)
{
if (_isInvulnerable)
{
return;
}
_health.ApplyDamage(value, transform.position);
}
private static Sprite BuildPlayerSprite()
{
const int size = 64;
var texture = new Texture2D(size, size, TextureFormat.RGBA32, false)
{
filterMode = FilterMode.Point
};
var center = new Vector2(size / 2f, size / 5f * 4f);
var pixels = new Color[size * size];
var body = new Color(0.2f, 0.8f, 1f, 1f);
for (int y = 0; y < size; y++)
{
for (int x = 0; x < size; x++)
{
int index = x + y * size;
float dist = Vector2.Distance(center, new Vector2(x, y * 0.9f));
pixels[index] = dist < size * 0.35f ? body : new Color(0f, 0f, 0f, 0f);
}
}
texture.SetPixels(pixels);
texture.Apply();
return Sprite.Create(texture, new Rect(0, 0, size, size), new Vector2(0.5f, 0.2f), 64f);
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 3ba67e64ec76c8988baad48f836ba579

View File

@ -0,0 +1,56 @@
using UnityEngine;
using UnityEngine.UI;
namespace Magisterka.BulletHell
{
/// <summary>
/// Handles score accumulation and HUD updates.
/// </summary>
public class ScoreManager : MonoBehaviour
{
public static ScoreManager Instance { get; private set; }
private Text _scoreText;
private int _score;
private void Awake()
{
if (Instance != null && Instance != this)
{
Destroy(gameObject);
return;
}
Instance = this;
DontDestroyOnLoad(gameObject);
}
public void Initialize(Text scoreText)
{
_scoreText = scoreText;
ResetScore();
}
public void AddScore(int value)
{
_score += value;
UpdateLabel();
}
public void ResetScore()
{
_score = 0;
UpdateLabel();
}
private void UpdateLabel()
{
if (_scoreText == null)
{
return;
}
_scoreText.text = $"Score: {_score:N0}";
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 294e59ae91c5dc00298264594f7afe7d

View File

@ -0,0 +1,48 @@
{
"dependencies": {
"com.coplaydev.unity-mcp": "https://github.com/CoplayDev/unity-mcp.git?path=/MCPForUnity",
"com.unity.collab-proxy": "2.10.0",
"com.unity.feature.2d": "2.0.1",
"com.unity.ide.rider": "3.0.38",
"com.unity.ide.visualstudio": "2.0.23",
"com.unity.inputsystem": "1.14.2",
"com.unity.multiplayer.center": "1.0.0",
"com.unity.test-framework": "1.5.1",
"com.unity.timeline": "1.8.9",
"com.unity.toolchain.linux-x86_64": "2.0.10",
"com.unity.ugui": "2.0.0",
"com.unity.visualscripting": "1.9.7",
"com.unity.modules.accessibility": "1.0.0",
"com.unity.modules.ai": "1.0.0",
"com.unity.modules.androidjni": "1.0.0",
"com.unity.modules.animation": "1.0.0",
"com.unity.modules.assetbundle": "1.0.0",
"com.unity.modules.audio": "1.0.0",
"com.unity.modules.cloth": "1.0.0",
"com.unity.modules.director": "1.0.0",
"com.unity.modules.imageconversion": "1.0.0",
"com.unity.modules.imgui": "1.0.0",
"com.unity.modules.jsonserialize": "1.0.0",
"com.unity.modules.particlesystem": "1.0.0",
"com.unity.modules.physics": "1.0.0",
"com.unity.modules.physics2d": "1.0.0",
"com.unity.modules.screencapture": "1.0.0",
"com.unity.modules.terrain": "1.0.0",
"com.unity.modules.terrainphysics": "1.0.0",
"com.unity.modules.tilemap": "1.0.0",
"com.unity.modules.ui": "1.0.0",
"com.unity.modules.uielements": "1.0.0",
"com.unity.modules.umbra": "1.0.0",
"com.unity.modules.unityanalytics": "1.0.0",
"com.unity.modules.unitywebrequest": "1.0.0",
"com.unity.modules.unitywebrequestassetbundle": "1.0.0",
"com.unity.modules.unitywebrequestaudio": "1.0.0",
"com.unity.modules.unitywebrequesttexture": "1.0.0",
"com.unity.modules.unitywebrequestwww": "1.0.0",
"com.unity.modules.vehicles": "1.0.0",
"com.unity.modules.video": "1.0.0",
"com.unity.modules.vr": "1.0.0",
"com.unity.modules.wind": "1.0.0",
"com.unity.modules.xr": "1.0.0"
}
}

View File

@ -0,0 +1,544 @@
{
"dependencies": {
"com.coplaydev.unity-mcp": {
"version": "https://github.com/CoplayDev/unity-mcp.git?path=/MCPForUnity",
"depth": 0,
"source": "git",
"dependencies": {
"com.unity.nuget.newtonsoft-json": "3.0.2"
},
"hash": "5ad5b4a632fa061070a3217f2533a39680d1003b"
},
"com.unity.2d.animation": {
"version": "10.2.1",
"depth": 1,
"source": "registry",
"dependencies": {
"com.unity.2d.common": "9.1.1",
"com.unity.2d.sprite": "1.0.0",
"com.unity.collections": "1.2.4",
"com.unity.modules.animation": "1.0.0",
"com.unity.modules.uielements": "1.0.0"
},
"url": "https://packages.unity.com"
},
"com.unity.2d.aseprite": {
"version": "1.1.10",
"depth": 1,
"source": "registry",
"dependencies": {
"com.unity.2d.common": "6.0.6",
"com.unity.2d.sprite": "1.0.0",
"com.unity.mathematics": "1.2.6",
"com.unity.modules.animation": "1.0.0"
},
"url": "https://packages.unity.com"
},
"com.unity.2d.common": {
"version": "9.1.1",
"depth": 2,
"source": "registry",
"dependencies": {
"com.unity.burst": "1.8.4",
"com.unity.2d.sprite": "1.0.0",
"com.unity.mathematics": "1.1.0",
"com.unity.modules.animation": "1.0.0",
"com.unity.modules.uielements": "1.0.0"
},
"url": "https://packages.unity.com"
},
"com.unity.2d.pixel-perfect": {
"version": "5.0.3",
"depth": 1,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.com"
},
"com.unity.2d.psdimporter": {
"version": "9.1.0",
"depth": 1,
"source": "registry",
"dependencies": {
"com.unity.2d.common": "9.1.1",
"com.unity.2d.sprite": "1.0.0"
},
"url": "https://packages.unity.com"
},
"com.unity.2d.sprite": {
"version": "1.0.0",
"depth": 1,
"source": "builtin",
"dependencies": {}
},
"com.unity.2d.spriteshape": {
"version": "10.0.7",
"depth": 1,
"source": "registry",
"dependencies": {
"com.unity.2d.common": "9.0.7",
"com.unity.mathematics": "1.1.0",
"com.unity.modules.physics2d": "1.0.0"
},
"url": "https://packages.unity.com"
},
"com.unity.2d.tilemap": {
"version": "1.0.0",
"depth": 1,
"source": "builtin",
"dependencies": {
"com.unity.modules.tilemap": "1.0.0",
"com.unity.modules.uielements": "1.0.0"
}
},
"com.unity.2d.tilemap.extras": {
"version": "4.1.0",
"depth": 1,
"source": "registry",
"dependencies": {
"com.unity.2d.tilemap": "1.0.0",
"com.unity.modules.tilemap": "1.0.0",
"com.unity.modules.jsonserialize": "1.0.0"
},
"url": "https://packages.unity.com"
},
"com.unity.burst": {
"version": "1.8.24",
"depth": 3,
"source": "registry",
"dependencies": {
"com.unity.mathematics": "1.2.1",
"com.unity.modules.jsonserialize": "1.0.0"
},
"url": "https://packages.unity.com"
},
"com.unity.collab-proxy": {
"version": "2.10.0",
"depth": 0,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.com"
},
"com.unity.collections": {
"version": "2.5.1",
"depth": 2,
"source": "registry",
"dependencies": {
"com.unity.burst": "1.8.17",
"com.unity.test-framework": "1.4.5",
"com.unity.nuget.mono-cecil": "1.11.4",
"com.unity.test-framework.performance": "3.0.3"
},
"url": "https://packages.unity.com"
},
"com.unity.ext.nunit": {
"version": "2.0.5",
"depth": 1,
"source": "builtin",
"dependencies": {}
},
"com.unity.feature.2d": {
"version": "2.0.1",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.2d.animation": "10.2.1",
"com.unity.2d.pixel-perfect": "5.0.3",
"com.unity.2d.psdimporter": "9.1.0",
"com.unity.2d.sprite": "1.0.0",
"com.unity.2d.spriteshape": "10.0.7",
"com.unity.2d.tilemap": "1.0.0",
"com.unity.2d.tilemap.extras": "4.1.0",
"com.unity.2d.aseprite": "1.1.10"
}
},
"com.unity.ide.rider": {
"version": "3.0.38",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.ext.nunit": "1.0.6"
},
"url": "https://packages.unity.com"
},
"com.unity.ide.visualstudio": {
"version": "2.0.23",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.test-framework": "1.1.9"
},
"url": "https://packages.unity.com"
},
"com.unity.inputsystem": {
"version": "1.14.2",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.modules.uielements": "1.0.0"
},
"url": "https://packages.unity.com"
},
"com.unity.mathematics": {
"version": "1.3.2",
"depth": 2,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.com"
},
"com.unity.multiplayer.center": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.uielements": "1.0.0"
}
},
"com.unity.nuget.mono-cecil": {
"version": "1.11.4",
"depth": 3,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.com"
},
"com.unity.nuget.newtonsoft-json": {
"version": "3.2.1",
"depth": 1,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.com"
},
"com.unity.sysroot": {
"version": "2.0.10",
"depth": 1,
"source": "registry",
"dependencies": {},
"url": "https://packages.unity.com"
},
"com.unity.sysroot.linux-x86_64": {
"version": "2.0.9",
"depth": 1,
"source": "registry",
"dependencies": {
"com.unity.sysroot": "2.0.10"
},
"url": "https://packages.unity.com"
},
"com.unity.test-framework": {
"version": "1.5.1",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.ext.nunit": "2.0.3",
"com.unity.modules.imgui": "1.0.0",
"com.unity.modules.jsonserialize": "1.0.0"
}
},
"com.unity.test-framework.performance": {
"version": "3.1.0",
"depth": 3,
"source": "registry",
"dependencies": {
"com.unity.test-framework": "1.1.33",
"com.unity.modules.jsonserialize": "1.0.0"
},
"url": "https://packages.unity.com"
},
"com.unity.timeline": {
"version": "1.8.9",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.modules.audio": "1.0.0",
"com.unity.modules.director": "1.0.0",
"com.unity.modules.animation": "1.0.0",
"com.unity.modules.particlesystem": "1.0.0"
},
"url": "https://packages.unity.com"
},
"com.unity.toolchain.linux-x86_64": {
"version": "2.0.10",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.sysroot": "2.0.10",
"com.unity.sysroot.linux-x86_64": "2.0.9"
},
"url": "https://packages.unity.com"
},
"com.unity.ugui": {
"version": "2.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.ui": "1.0.0",
"com.unity.modules.imgui": "1.0.0"
}
},
"com.unity.visualscripting": {
"version": "1.9.7",
"depth": 0,
"source": "registry",
"dependencies": {
"com.unity.ugui": "1.0.0",
"com.unity.modules.jsonserialize": "1.0.0"
},
"url": "https://packages.unity.com"
},
"com.unity.modules.accessibility": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.ai": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.androidjni": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.animation": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.assetbundle": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.audio": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.cloth": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.physics": "1.0.0"
}
},
"com.unity.modules.director": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.audio": "1.0.0",
"com.unity.modules.animation": "1.0.0"
}
},
"com.unity.modules.hierarchycore": {
"version": "1.0.0",
"depth": 1,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.imageconversion": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.imgui": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.jsonserialize": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.particlesystem": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.physics": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.physics2d": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.screencapture": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.imageconversion": "1.0.0"
}
},
"com.unity.modules.subsystems": {
"version": "1.0.0",
"depth": 1,
"source": "builtin",
"dependencies": {
"com.unity.modules.jsonserialize": "1.0.0"
}
},
"com.unity.modules.terrain": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.terrainphysics": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.physics": "1.0.0",
"com.unity.modules.terrain": "1.0.0"
}
},
"com.unity.modules.tilemap": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.physics2d": "1.0.0"
}
},
"com.unity.modules.ui": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.uielements": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.ui": "1.0.0",
"com.unity.modules.imgui": "1.0.0",
"com.unity.modules.jsonserialize": "1.0.0",
"com.unity.modules.hierarchycore": "1.0.0"
}
},
"com.unity.modules.umbra": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.unityanalytics": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.unitywebrequest": "1.0.0",
"com.unity.modules.jsonserialize": "1.0.0"
}
},
"com.unity.modules.unitywebrequest": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.unitywebrequestassetbundle": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.assetbundle": "1.0.0",
"com.unity.modules.unitywebrequest": "1.0.0"
}
},
"com.unity.modules.unitywebrequestaudio": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.unitywebrequest": "1.0.0",
"com.unity.modules.audio": "1.0.0"
}
},
"com.unity.modules.unitywebrequesttexture": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.unitywebrequest": "1.0.0",
"com.unity.modules.imageconversion": "1.0.0"
}
},
"com.unity.modules.unitywebrequestwww": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.unitywebrequest": "1.0.0",
"com.unity.modules.unitywebrequestassetbundle": "1.0.0",
"com.unity.modules.unitywebrequestaudio": "1.0.0",
"com.unity.modules.audio": "1.0.0",
"com.unity.modules.assetbundle": "1.0.0",
"com.unity.modules.imageconversion": "1.0.0"
}
},
"com.unity.modules.vehicles": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.physics": "1.0.0"
}
},
"com.unity.modules.video": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.audio": "1.0.0",
"com.unity.modules.ui": "1.0.0",
"com.unity.modules.unitywebrequest": "1.0.0"
}
},
"com.unity.modules.vr": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.jsonserialize": "1.0.0",
"com.unity.modules.physics": "1.0.0",
"com.unity.modules.xr": "1.0.0"
}
},
"com.unity.modules.wind": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {}
},
"com.unity.modules.xr": {
"version": "1.0.0",
"depth": 0,
"source": "builtin",
"dependencies": {
"com.unity.modules.physics": "1.0.0",
"com.unity.modules.jsonserialize": "1.0.0",
"com.unity.modules.subsystems": "1.0.0"
}
}
}
}

View File

@ -0,0 +1,19 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!11 &1
AudioManager:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Volume: 1
Rolloff Scale: 1
Doppler Factor: 1
Default Speaker Mode: 2
m_SampleRate: 0
m_DSPBufferSize: 1024
m_VirtualVoiceCount: 512
m_RealVoiceCount: 32
m_SpatializerPlugin:
m_AmbisonicDecoderPlugin:
m_DisableAudio: 0
m_VirtualizeEffects: 1
m_RequestedDSPBufferSize: 0

View File

@ -0,0 +1,6 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!236 &1
ClusterInputManager:
m_ObjectHideFlags: 0
m_Inputs: []

View File

@ -0,0 +1,37 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!55 &1
PhysicsManager:
m_ObjectHideFlags: 0
serializedVersion: 13
m_Gravity: {x: 0, y: -9.81, z: 0}
m_DefaultMaterial: {fileID: 0}
m_BounceThreshold: 2
m_DefaultMaxDepenetrationVelocity: 10
m_SleepThreshold: 0.005
m_DefaultContactOffset: 0.01
m_DefaultSolverIterations: 6
m_DefaultSolverVelocityIterations: 1
m_QueriesHitBackfaces: 0
m_QueriesHitTriggers: 1
m_EnableAdaptiveForce: 0
m_ClothInterCollisionDistance: 0.1
m_ClothInterCollisionStiffness: 0.2
m_ContactsGeneration: 1
m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
m_AutoSimulation: 1
m_AutoSyncTransforms: 0
m_ReuseCollisionCallbacks: 1
m_ClothInterCollisionSettingsToggle: 0
m_ClothGravity: {x: 0, y: -9.81, z: 0}
m_ContactPairsMode: 0
m_BroadphaseType: 0
m_WorldBounds:
m_Center: {x: 0, y: 0, z: 0}
m_Extent: {x: 250, y: 250, z: 250}
m_WorldSubdivisions: 8
m_FrictionType: 0
m_EnableEnhancedDeterminism: 0
m_EnableUnifiedHeightmaps: 1
m_SolverType: 0
m_DefaultMaxAngularSpeed: 50

View File

@ -0,0 +1,13 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1045 &1
EditorBuildSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Scenes:
- enabled: 1
path: Assets/Scenes/SampleScene.unity
guid: 2cda990e2423bbf4892e6590ba056729
m_configObjects:
com.unity.input.settings.actions: {fileID: -944628639613478452, guid: 3590b91b4603b465dbb4216d601bff33, type: 3}
m_UseUCBPForAssetBundles: 0

View File

@ -0,0 +1,49 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!159 &1
EditorSettings:
m_ObjectHideFlags: 0
serializedVersion: 14
m_SerializationMode: 2
m_LineEndingsForNewScripts: 0
m_DefaultBehaviorMode: 1
m_PrefabRegularEnvironment: {fileID: 0}
m_PrefabUIEnvironment: {fileID: 0}
m_SpritePackerMode: 5
m_SpritePackerCacheSize: 10
m_SpritePackerPaddingPower: 1
m_Bc7TextureCompressor: 0
m_EtcTextureCompressorBehavior: 1
m_EtcTextureFastCompressor: 1
m_EtcTextureNormalCompressor: 2
m_EtcTextureBestCompressor: 4
m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;asmref;rsp
m_ProjectGenerationRootNamespace:
m_EnableTextureStreamingInEditMode: 1
m_EnableTextureStreamingInPlayMode: 1
m_EnableEditorAsyncCPUTextureLoading: 0
m_AsyncShaderCompilation: 1
m_PrefabModeAllowAutoSave: 1
m_EnterPlayModeOptionsEnabled: 1
m_EnterPlayModeOptions: 0
m_GameObjectNamingDigits: 1
m_GameObjectNamingScheme: 0
m_AssetNamingUsesSpace: 1
m_InspectorUseIMGUIDefaultInspector: 0
m_UseLegacyProbeSampleCount: 0
m_SerializeInlineMappingsOnOneLine: 1
m_DisableCookiesInLightmapper: 1
m_ShadowmaskStitching: 0
m_AssetPipelineMode: 1
m_RefreshImportMode: 0
m_CacheServerMode: 0
m_CacheServerEndpoint:
m_CacheServerNamespacePrefix: default
m_CacheServerEnableDownload: 1
m_CacheServerEnableUpload: 1
m_CacheServerEnableAuth: 0
m_CacheServerEnableTls: 0
m_CacheServerValidationMode: 2
m_CacheServerDownloadBatchSize: 128
m_EnableEnlightenBakedGI: 0
m_ReferencedClipsExactNaming: 1

View File

@ -0,0 +1,64 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!30 &1
GraphicsSettings:
m_ObjectHideFlags: 0
serializedVersion: 13
m_Deferred:
m_Mode: 1
m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0}
m_DeferredReflections:
m_Mode: 1
m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0}
m_ScreenSpaceShadows:
m_Mode: 1
m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0}
m_LegacyDeferred:
m_Mode: 1
m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0}
m_DepthNormals:
m_Mode: 1
m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0}
m_MotionVectors:
m_Mode: 1
m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0}
m_LightHalo:
m_Mode: 1
m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0}
m_LensFlare:
m_Mode: 1
m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0}
m_VideoShadersIncludeMode: 2
m_AlwaysIncludedShaders:
- {fileID: 7, guid: 0000000000000000f000000000000000, type: 0}
- {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0}
- {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0}
- {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0}
- {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0}
- {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0}
- {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0}
m_PreloadedShaders: []
m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0}
m_CustomRenderPipeline: {fileID: 0}
m_TransparencySortMode: 0
m_TransparencySortAxis: {x: 0, y: 0, z: 1}
m_DefaultRenderingPath: 1
m_DefaultMobileRenderingPath: 1
m_TierSettings: []
m_LightmapStripping: 0
m_FogStripping: 0
m_InstancingStripping: 0
m_LightmapKeepPlain: 1
m_LightmapKeepDirCombined: 1
m_LightmapKeepDynamicPlain: 1
m_LightmapKeepDynamicDirCombined: 1
m_LightmapKeepShadowMask: 1
m_LightmapKeepSubtractive: 1
m_FogKeepLinear: 1
m_FogKeepExp: 1
m_FogKeepExp2: 1
m_AlbedoSwatchInfos: []
m_LightsUseLinearIntensity: 0
m_LightsUseColorTemperature: 0
m_DefaultRenderingLayerMask: 1
m_LogWhenShaderIsCompiled: 0

View File

@ -0,0 +1,487 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!13 &1
InputManager:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Axes:
- serializedVersion: 3
m_Name: Horizontal
descriptiveName:
descriptiveNegativeName:
negativeButton: left
positiveButton: right
altNegativeButton: a
altPositiveButton: d
gravity: 3
dead: 0.001
sensitivity: 3
snap: 1
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Vertical
descriptiveName:
descriptiveNegativeName:
negativeButton: down
positiveButton: up
altNegativeButton: s
altPositiveButton: w
gravity: 3
dead: 0.001
sensitivity: 3
snap: 1
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Fire1
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton: left ctrl
altNegativeButton:
altPositiveButton: mouse 0
gravity: 1000
dead: 0.001
sensitivity: 1000
snap: 0
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Fire2
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton: left alt
altNegativeButton:
altPositiveButton: mouse 1
gravity: 1000
dead: 0.001
sensitivity: 1000
snap: 0
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Fire3
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton: left shift
altNegativeButton:
altPositiveButton: mouse 2
gravity: 1000
dead: 0.001
sensitivity: 1000
snap: 0
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Jump
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton: space
altNegativeButton:
altPositiveButton:
gravity: 1000
dead: 0.001
sensitivity: 1000
snap: 0
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Mouse X
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton:
altNegativeButton:
altPositiveButton:
gravity: 0
dead: 0
sensitivity: 0.1
snap: 0
invert: 0
type: 1
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Mouse Y
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton:
altNegativeButton:
altPositiveButton:
gravity: 0
dead: 0
sensitivity: 0.1
snap: 0
invert: 0
type: 1
axis: 1
joyNum: 0
- serializedVersion: 3
m_Name: Mouse ScrollWheel
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton:
altNegativeButton:
altPositiveButton:
gravity: 0
dead: 0
sensitivity: 0.1
snap: 0
invert: 0
type: 1
axis: 2
joyNum: 0
- serializedVersion: 3
m_Name: Horizontal
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton:
altNegativeButton:
altPositiveButton:
gravity: 0
dead: 0.19
sensitivity: 1
snap: 0
invert: 0
type: 2
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Vertical
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton:
altNegativeButton:
altPositiveButton:
gravity: 0
dead: 0.19
sensitivity: 1
snap: 0
invert: 1
type: 2
axis: 1
joyNum: 0
- serializedVersion: 3
m_Name: Fire1
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton: joystick button 0
altNegativeButton:
altPositiveButton:
gravity: 1000
dead: 0.001
sensitivity: 1000
snap: 0
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Fire2
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton: joystick button 1
altNegativeButton:
altPositiveButton:
gravity: 1000
dead: 0.001
sensitivity: 1000
snap: 0
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Fire3
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton: joystick button 2
altNegativeButton:
altPositiveButton:
gravity: 1000
dead: 0.001
sensitivity: 1000
snap: 0
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Jump
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton: joystick button 3
altNegativeButton:
altPositiveButton:
gravity: 1000
dead: 0.001
sensitivity: 1000
snap: 0
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Submit
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton: return
altNegativeButton:
altPositiveButton: joystick button 0
gravity: 1000
dead: 0.001
sensitivity: 1000
snap: 0
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Submit
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton: enter
altNegativeButton:
altPositiveButton: space
gravity: 1000
dead: 0.001
sensitivity: 1000
snap: 0
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Cancel
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton: escape
altNegativeButton:
altPositiveButton: joystick button 1
gravity: 1000
dead: 0.001
sensitivity: 1000
snap: 0
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Enable Debug Button 1
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton: left ctrl
altNegativeButton:
altPositiveButton: joystick button 8
gravity: 0
dead: 0
sensitivity: 0
snap: 0
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Enable Debug Button 2
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton: backspace
altNegativeButton:
altPositiveButton: joystick button 9
gravity: 0
dead: 0
sensitivity: 0
snap: 0
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Debug Reset
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton: left alt
altNegativeButton:
altPositiveButton: joystick button 1
gravity: 0
dead: 0
sensitivity: 0
snap: 0
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Debug Next
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton: page down
altNegativeButton:
altPositiveButton: joystick button 5
gravity: 0
dead: 0
sensitivity: 0
snap: 0
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Debug Previous
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton: page up
altNegativeButton:
altPositiveButton: joystick button 4
gravity: 0
dead: 0
sensitivity: 0
snap: 0
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Debug Validate
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton: return
altNegativeButton:
altPositiveButton: joystick button 0
gravity: 0
dead: 0
sensitivity: 0
snap: 0
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Debug Persistent
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton: right shift
altNegativeButton:
altPositiveButton: joystick button 2
gravity: 0
dead: 0
sensitivity: 0
snap: 0
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Debug Multiplier
descriptiveName:
descriptiveNegativeName:
negativeButton:
positiveButton: left shift
altNegativeButton:
altPositiveButton: joystick button 3
gravity: 0
dead: 0
sensitivity: 0
snap: 0
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Debug Horizontal
descriptiveName:
descriptiveNegativeName:
negativeButton: left
positiveButton: right
altNegativeButton:
altPositiveButton:
gravity: 1000
dead: 0.001
sensitivity: 1000
snap: 0
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Debug Vertical
descriptiveName:
descriptiveNegativeName:
negativeButton: down
positiveButton: up
altNegativeButton:
altPositiveButton:
gravity: 1000
dead: 0.001
sensitivity: 1000
snap: 0
invert: 0
type: 0
axis: 0
joyNum: 0
- serializedVersion: 3
m_Name: Debug Vertical
descriptiveName:
descriptiveNegativeName:
negativeButton: down
positiveButton: up
altNegativeButton:
altPositiveButton:
gravity: 1000
dead: 0.001
sensitivity: 1000
snap: 0
invert: 0
type: 2
axis: 6
joyNum: 0
- serializedVersion: 3
m_Name: Debug Horizontal
descriptiveName:
descriptiveNegativeName:
negativeButton: left
positiveButton: right
altNegativeButton:
altPositiveButton:
gravity: 1000
dead: 0.001
sensitivity: 1000
snap: 0
invert: 0
type: 2
axis: 5
joyNum: 0

View File

@ -0,0 +1,35 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!387306366 &1
MemorySettings:
m_ObjectHideFlags: 0
m_EditorMemorySettings:
m_MainAllocatorBlockSize: -1
m_ThreadAllocatorBlockSize: -1
m_MainGfxBlockSize: -1
m_ThreadGfxBlockSize: -1
m_CacheBlockSize: -1
m_TypetreeBlockSize: -1
m_ProfilerBlockSize: -1
m_ProfilerEditorBlockSize: -1
m_BucketAllocatorGranularity: -1
m_BucketAllocatorBucketsCount: -1
m_BucketAllocatorBlockSize: -1
m_BucketAllocatorBlockCount: -1
m_ProfilerBucketAllocatorGranularity: -1
m_ProfilerBucketAllocatorBucketsCount: -1
m_ProfilerBucketAllocatorBlockSize: -1
m_ProfilerBucketAllocatorBlockCount: -1
m_TempAllocatorSizeMain: -1
m_JobTempAllocatorBlockSize: -1
m_BackgroundJobTempAllocatorBlockSize: -1
m_JobTempAllocatorReducedBlockSize: -1
m_TempAllocatorSizeGIBakingWorker: -1
m_TempAllocatorSizeNavMeshWorker: -1
m_TempAllocatorSizeAudioWorker: -1
m_TempAllocatorSizeCloudWorker: -1
m_TempAllocatorSizeGfx: -1
m_TempAllocatorSizeJobWorker: -1
m_TempAllocatorSizeBackgroundWorker: -1
m_TempAllocatorSizePreloadManager: -1
m_PlatformMemorySettings: {}

View File

@ -0,0 +1,7 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!655991488 &1
MultiplayerManager:
m_ObjectHideFlags: 0
m_EnableMultiplayerRoles: 0
m_StrippingTypes: {}

View File

@ -0,0 +1,93 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!126 &1
NavMeshProjectSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
areas:
- name: Walkable
cost: 1
- name: Not Walkable
cost: 1
- name: Jump
cost: 2
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
- name:
cost: 1
m_LastAgentTypeID: -887442657
m_Settings:
- serializedVersion: 2
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.75
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
accuratePlacement: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
m_Flags: 0
m_SettingNames:
- Humanoid

View File

@ -0,0 +1,8 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!149 &1
NetworkManager:
m_ObjectHideFlags: 0
m_DebugLevel: 0
m_Sendrate: 15
m_AssetToPrefab: {}

View File

@ -0,0 +1,44 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &1
MonoBehaviour:
m_ObjectHideFlags: 61
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0}
m_Name:
m_EditorClassIdentifier:
m_EnablePreReleasePackages: 0
m_EnablePackageDependencies: 0
m_AdvancedSettingsExpanded: 1
m_ScopedRegistriesSettingsExpanded: 1
m_SeeAllPackageVersions: 0
oneTimeWarningShown: 0
m_Registries:
- m_Id: main
m_Name:
m_Url: https://packages.unity.com
m_Scopes: []
m_IsDefault: 1
m_Capabilities: 7
m_UserSelectedRegistryName:
m_UserAddingNewScopedRegistry: 0
m_RegistryInfoDraft:
m_ErrorMessage:
m_Original:
m_Id:
m_Name:
m_Url:
m_Scopes: []
m_IsDefault: 0
m_Capabilities: 0
m_Modified: 0
m_Name:
m_Url:
m_Scopes:
-
m_SelectedScopeIndex: 0

View File

@ -0,0 +1,56 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!19 &1
Physics2DSettings:
m_ObjectHideFlags: 0
serializedVersion: 5
m_Gravity: {x: 0, y: -9.81}
m_DefaultMaterial: {fileID: 0}
m_VelocityIterations: 8
m_PositionIterations: 3
m_VelocityThreshold: 1
m_MaxLinearCorrection: 0.2
m_MaxAngularCorrection: 8
m_MaxTranslationSpeed: 100
m_MaxRotationSpeed: 360
m_BaumgarteScale: 0.2
m_BaumgarteTimeOfImpactScale: 0.75
m_TimeToSleep: 0.5
m_LinearSleepTolerance: 0.01
m_AngularSleepTolerance: 2
m_DefaultContactOffset: 0.01
m_JobOptions:
serializedVersion: 2
useMultithreading: 0
useConsistencySorting: 0
m_InterpolationPosesPerJob: 100
m_NewContactsPerJob: 30
m_CollideContactsPerJob: 100
m_ClearFlagsPerJob: 200
m_ClearBodyForcesPerJob: 200
m_SyncDiscreteFixturesPerJob: 50
m_SyncContinuousFixturesPerJob: 50
m_FindNearestContactsPerJob: 100
m_UpdateTriggerContactsPerJob: 100
m_IslandSolverCostThreshold: 100
m_IslandSolverBodyCostScale: 1
m_IslandSolverContactCostScale: 10
m_IslandSolverJointCostScale: 10
m_IslandSolverBodiesPerJob: 50
m_IslandSolverContactsPerJob: 50
m_SimulationMode: 0
m_QueriesHitTriggers: 1
m_QueriesStartInColliders: 1
m_CallbacksOnDisable: 1
m_ReuseCollisionCallbacks: 1
m_AutoSyncTransforms: 0
m_AlwaysShowColliders: 0
m_ShowColliderSleep: 1
m_ShowColliderContacts: 0
m_ShowColliderAABB: 0
m_ContactArrowScale: 0.2
m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412}
m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432}
m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745}
m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804}
m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

View File

@ -0,0 +1,7 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1386491679 &1
PresetManager:
m_ObjectHideFlags: 0
serializedVersion: 2
m_DefaultPresets: {}

View File

@ -0,0 +1,924 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!129 &1
PlayerSettings:
m_ObjectHideFlags: 0
serializedVersion: 28
productGUID: 18465d8ea06b60469941152ee9cdb4bd
AndroidProfiler: 0
AndroidFilterTouchesWhenObscured: 0
AndroidEnableSustainedPerformanceMode: 0
defaultScreenOrientation: 4
targetDevice: 2
useOnDemandResources: 0
accelerometerFrequency: 60
companyName: DefaultCompany
productName: magisterka_2
defaultCursor: {fileID: 0}
cursorHotspot: {x: 0, y: 0}
m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}
m_ShowUnitySplashScreen: 1
m_ShowUnitySplashLogo: 1
m_SplashScreenOverlayOpacity: 1
m_SplashScreenAnimation: 1
m_SplashScreenLogoStyle: 1
m_SplashScreenDrawMode: 0
m_SplashScreenBackgroundAnimationZoom: 1
m_SplashScreenLogoAnimationZoom: 1
m_SplashScreenBackgroundLandscapeAspect: 1
m_SplashScreenBackgroundPortraitAspect: 1
m_SplashScreenBackgroundLandscapeUvs:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
m_SplashScreenBackgroundPortraitUvs:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
m_SplashScreenLogos: []
m_VirtualRealitySplashScreen: {fileID: 0}
m_HolographicTrackingLossScreen: {fileID: 0}
defaultScreenWidth: 1920
defaultScreenHeight: 1080
defaultScreenWidthWeb: 960
defaultScreenHeightWeb: 600
m_StereoRenderingPath: 0
m_ActiveColorSpace: 1
unsupportedMSAAFallback: 0
m_SpriteBatchMaxVertexCount: 65535
m_SpriteBatchVertexThreshold: 300
m_MTRendering: 1
mipStripping: 0
numberOfMipsStripped: 0
numberOfMipsStrippedPerMipmapLimitGroup: {}
m_StackTraceTypes: 010000000100000001000000010000000100000001000000
iosShowActivityIndicatorOnLoading: -1
androidShowActivityIndicatorOnLoading: -1
iosUseCustomAppBackgroundBehavior: 0
allowedAutorotateToPortrait: 1
allowedAutorotateToPortraitUpsideDown: 1
allowedAutorotateToLandscapeRight: 1
allowedAutorotateToLandscapeLeft: 1
useOSAutorotation: 1
use32BitDisplayBuffer: 1
preserveFramebufferAlpha: 0
disableDepthAndStencilBuffers: 0
androidStartInFullscreen: 1
androidRenderOutsideSafeArea: 1
androidUseSwappy: 1
androidBlitType: 0
androidResizeableActivity: 1
androidDefaultWindowWidth: 1920
androidDefaultWindowHeight: 1080
androidMinimumWindowWidth: 400
androidMinimumWindowHeight: 300
androidFullscreenMode: 1
androidAutoRotationBehavior: 1
androidPredictiveBackSupport: 0
androidApplicationEntry: 2
defaultIsNativeResolution: 1
macRetinaSupport: 1
runInBackground: 0
muteOtherAudioSources: 0
Prepare IOS For Recording: 0
Force IOS Speakers When Recording: 0
audioSpatialExperience: 0
deferSystemGesturesMode: 0
hideHomeButton: 0
submitAnalytics: 1
usePlayerLog: 1
dedicatedServerOptimizations: 1
bakeCollisionMeshes: 0
forceSingleInstance: 0
useFlipModelSwapchain: 1
resizableWindow: 0
useMacAppStoreValidation: 0
macAppStoreCategory: public.app-category.games
gpuSkinning: 0
meshDeformation: 0
xboxPIXTextureCapture: 0
xboxEnableAvatar: 0
xboxEnableKinect: 0
xboxEnableKinectAutoTracking: 0
xboxEnableFitness: 0
visibleInBackground: 1
allowFullscreenSwitch: 1
fullscreenMode: 1
xboxSpeechDB: 0
xboxEnableHeadOrientation: 0
xboxEnableGuest: 0
xboxEnablePIXSampling: 0
metalFramebufferOnly: 0
xboxOneResolution: 0
xboxOneSResolution: 0
xboxOneXResolution: 3
xboxOneMonoLoggingLevel: 0
xboxOneLoggingLevel: 1
xboxOneDisableEsram: 0
xboxOneEnableTypeOptimization: 0
xboxOnePresentImmediateThreshold: 0
switchQueueCommandMemory: 1048576
switchQueueControlMemory: 16384
switchQueueComputeMemory: 262144
switchNVNShaderPoolsGranularity: 33554432
switchNVNDefaultPoolsGranularity: 16777216
switchNVNOtherPoolsGranularity: 16777216
switchGpuScratchPoolGranularity: 2097152
switchAllowGpuScratchShrinking: 0
switchNVNMaxPublicTextureIDCount: 0
switchNVNMaxPublicSamplerIDCount: 0
switchMaxWorkerMultiple: 8
switchNVNGraphicsFirmwareMemory: 32
vulkanNumSwapchainBuffers: 3
vulkanEnableSetSRGBWrite: 0
vulkanEnablePreTransform: 0
vulkanEnableLateAcquireNextImage: 0
vulkanEnableCommandBufferRecycling: 1
loadStoreDebugModeEnabled: 0
visionOSBundleVersion: 1.0
tvOSBundleVersion: 1.0
bundleVersion: 1.0
preloadedAssets: []
metroInputSource: 0
wsaTransparentSwapchain: 0
m_HolographicPauseOnTrackingLoss: 1
xboxOneDisableKinectGpuReservation: 1
xboxOneEnable7thCore: 1
vrSettings:
enable360StereoCapture: 0
isWsaHolographicRemotingEnabled: 0
enableFrameTimingStats: 0
enableOpenGLProfilerGPURecorders: 1
allowHDRDisplaySupport: 0
useHDRDisplay: 0
hdrBitDepth: 0
m_ColorGamuts: 00000000
targetPixelDensity: 30
resolutionScalingMode: 0
resetResolutionOnWindowResize: 0
androidSupportedAspectRatio: 1
androidMaxAspectRatio: 2.4
androidMinAspectRatio: 1
applicationIdentifier:
Standalone: com.DefaultCompany.2D-Project
buildNumber:
Standalone: 0
VisionOS: 0
iPhone: 0
tvOS: 0
overrideDefaultApplicationIdentifier: 1
AndroidBundleVersionCode: 1
AndroidMinSdkVersion: 23
AndroidTargetSdkVersion: 0
AndroidPreferredInstallLocation: 1
aotOptions:
stripEngineCode: 1
iPhoneStrippingLevel: 0
iPhoneScriptCallOptimization: 0
ForceInternetPermission: 0
ForceSDCardPermission: 0
CreateWallpaper: 0
androidSplitApplicationBinary: 0
keepLoadedShadersAlive: 0
StripUnusedMeshComponents: 0
strictShaderVariantMatching: 0
VertexChannelCompressionMask: 4054
iPhoneSdkVersion: 988
iOSSimulatorArchitecture: 0
iOSTargetOSVersionString: 13.0
tvOSSdkVersion: 0
tvOSSimulatorArchitecture: 0
tvOSRequireExtendedGameController: 0
tvOSTargetOSVersionString: 13.0
VisionOSSdkVersion: 0
VisionOSTargetOSVersionString: 1.0
uIPrerenderedIcon: 0
uIRequiresPersistentWiFi: 0
uIRequiresFullScreen: 1
uIStatusBarHidden: 1
uIExitOnSuspend: 0
uIStatusBarStyle: 0
appleTVSplashScreen: {fileID: 0}
appleTVSplashScreen2x: {fileID: 0}
tvOSSmallIconLayers: []
tvOSSmallIconLayers2x: []
tvOSLargeIconLayers: []
tvOSLargeIconLayers2x: []
tvOSTopShelfImageLayers: []
tvOSTopShelfImageLayers2x: []
tvOSTopShelfImageWideLayers: []
tvOSTopShelfImageWideLayers2x: []
iOSLaunchScreenType: 0
iOSLaunchScreenPortrait: {fileID: 0}
iOSLaunchScreenLandscape: {fileID: 0}
iOSLaunchScreenBackgroundColor:
serializedVersion: 2
rgba: 0
iOSLaunchScreenFillPct: 100
iOSLaunchScreenSize: 100
iOSLaunchScreeniPadType: 0
iOSLaunchScreeniPadImage: {fileID: 0}
iOSLaunchScreeniPadBackgroundColor:
serializedVersion: 2
rgba: 0
iOSLaunchScreeniPadFillPct: 100
iOSLaunchScreeniPadSize: 100
iOSLaunchScreenCustomStoryboardPath:
iOSLaunchScreeniPadCustomStoryboardPath:
iOSDeviceRequirements: []
iOSURLSchemes: []
macOSURLSchemes: []
iOSBackgroundModes: 0
iOSMetalForceHardShadows: 0
metalEditorSupport: 1
metalAPIValidation: 1
metalCompileShaderBinary: 0
iOSRenderExtraFrameOnPause: 0
iosCopyPluginsCodeInsteadOfSymlink: 0
appleDeveloperTeamID:
iOSManualSigningProvisioningProfileID:
tvOSManualSigningProvisioningProfileID:
VisionOSManualSigningProvisioningProfileID:
iOSManualSigningProvisioningProfileType: 0
tvOSManualSigningProvisioningProfileType: 0
VisionOSManualSigningProvisioningProfileType: 0
appleEnableAutomaticSigning: 0
iOSRequireARKit: 0
iOSAutomaticallyDetectAndAddCapabilities: 1
appleEnableProMotion: 0
shaderPrecisionModel: 0
clonedFromGUID: 10ad67313f4034357812315f3c407484
templatePackageId: com.unity.template.2d@10.1.0
templateDefaultScene: Assets/Scenes/SampleScene.unity
useCustomMainManifest: 0
useCustomLauncherManifest: 0
useCustomMainGradleTemplate: 0
useCustomLauncherGradleManifest: 0
useCustomBaseGradleTemplate: 0
useCustomGradlePropertiesTemplate: 0
useCustomGradleSettingsTemplate: 0
useCustomProguardFile: 0
AndroidTargetArchitectures: 2
AndroidSplashScreenScale: 0
androidSplashScreen: {fileID: 0}
AndroidKeystoreName:
AndroidKeyaliasName:
AndroidEnableArmv9SecurityFeatures: 0
AndroidEnableArm64MTE: 0
AndroidBuildApkPerCpuArchitecture: 0
AndroidTVCompatibility: 0
AndroidIsGame: 1
androidAppCategory: 3
useAndroidAppCategory: 1
androidAppCategoryOther:
AndroidEnableTango: 0
androidEnableBanner: 1
androidUseLowAccuracyLocation: 0
androidUseCustomKeystore: 0
m_AndroidBanners:
- width: 320
height: 180
banner: {fileID: 0}
androidGamepadSupportLevel: 0
AndroidMinifyRelease: 0
AndroidMinifyDebug: 0
AndroidValidateAppBundleSize: 1
AndroidAppBundleSizeToValidate: 150
AndroidReportGooglePlayAppDependencies: 1
androidSymbolsSizeThreshold: 800
m_BuildTargetIcons: []
m_BuildTargetPlatformIcons:
- m_BuildTarget: iPhone
m_Icons:
- m_Textures: []
m_Width: 180
m_Height: 180
m_Kind: 0
m_SubKind: iPhone
- m_Textures: []
m_Width: 120
m_Height: 120
m_Kind: 0
m_SubKind: iPhone
- m_Textures: []
m_Width: 167
m_Height: 167
m_Kind: 0
m_SubKind: iPad
- m_Textures: []
m_Width: 152
m_Height: 152
m_Kind: 0
m_SubKind: iPad
- m_Textures: []
m_Width: 76
m_Height: 76
m_Kind: 0
m_SubKind: iPad
- m_Textures: []
m_Width: 120
m_Height: 120
m_Kind: 3
m_SubKind: iPhone
- m_Textures: []
m_Width: 80
m_Height: 80
m_Kind: 3
m_SubKind: iPhone
- m_Textures: []
m_Width: 80
m_Height: 80
m_Kind: 3
m_SubKind: iPad
- m_Textures: []
m_Width: 40
m_Height: 40
m_Kind: 3
m_SubKind: iPad
- m_Textures: []
m_Width: 87
m_Height: 87
m_Kind: 1
m_SubKind: iPhone
- m_Textures: []
m_Width: 58
m_Height: 58
m_Kind: 1
m_SubKind: iPhone
- m_Textures: []
m_Width: 29
m_Height: 29
m_Kind: 1
m_SubKind: iPhone
- m_Textures: []
m_Width: 58
m_Height: 58
m_Kind: 1
m_SubKind: iPad
- m_Textures: []
m_Width: 29
m_Height: 29
m_Kind: 1
m_SubKind: iPad
- m_Textures: []
m_Width: 60
m_Height: 60
m_Kind: 2
m_SubKind: iPhone
- m_Textures: []
m_Width: 40
m_Height: 40
m_Kind: 2
m_SubKind: iPhone
- m_Textures: []
m_Width: 40
m_Height: 40
m_Kind: 2
m_SubKind: iPad
- m_Textures: []
m_Width: 20
m_Height: 20
m_Kind: 2
m_SubKind: iPad
- m_Textures: []
m_Width: 1024
m_Height: 1024
m_Kind: 4
m_SubKind: App Store
- m_BuildTarget: Android
m_Icons:
- m_Textures: []
m_Width: 432
m_Height: 432
m_Kind: 2
m_SubKind:
- m_Textures: []
m_Width: 324
m_Height: 324
m_Kind: 2
m_SubKind:
- m_Textures: []
m_Width: 216
m_Height: 216
m_Kind: 2
m_SubKind:
- m_Textures: []
m_Width: 162
m_Height: 162
m_Kind: 2
m_SubKind:
- m_Textures: []
m_Width: 108
m_Height: 108
m_Kind: 2
m_SubKind:
- m_Textures: []
m_Width: 81
m_Height: 81
m_Kind: 2
m_SubKind:
- m_Textures: []
m_Width: 192
m_Height: 192
m_Kind: 1
m_SubKind:
- m_Textures: []
m_Width: 144
m_Height: 144
m_Kind: 1
m_SubKind:
- m_Textures: []
m_Width: 96
m_Height: 96
m_Kind: 1
m_SubKind:
- m_Textures: []
m_Width: 72
m_Height: 72
m_Kind: 1
m_SubKind:
- m_Textures: []
m_Width: 48
m_Height: 48
m_Kind: 1
m_SubKind:
- m_Textures: []
m_Width: 36
m_Height: 36
m_Kind: 1
m_SubKind:
- m_Textures: []
m_Width: 192
m_Height: 192
m_Kind: 0
m_SubKind:
- m_Textures: []
m_Width: 144
m_Height: 144
m_Kind: 0
m_SubKind:
- m_Textures: []
m_Width: 96
m_Height: 96
m_Kind: 0
m_SubKind:
- m_Textures: []
m_Width: 72
m_Height: 72
m_Kind: 0
m_SubKind:
- m_Textures: []
m_Width: 48
m_Height: 48
m_Kind: 0
m_SubKind:
- m_Textures: []
m_Width: 36
m_Height: 36
m_Kind: 0
m_SubKind:
- m_BuildTarget: VisionOS
m_Icons:
- m_Textures: []
m_Width: 1024
m_Height: 1024
m_Kind: 0
m_SubKind:
m_BuildTargetBatching: []
m_BuildTargetShaderSettings: []
m_BuildTargetGraphicsJobs:
- m_BuildTarget: MacStandaloneSupport
m_GraphicsJobs: 0
- m_BuildTarget: Switch
m_GraphicsJobs: 0
- m_BuildTarget: MetroSupport
m_GraphicsJobs: 0
- m_BuildTarget: AppleTVSupport
m_GraphicsJobs: 0
- m_BuildTarget: BJMSupport
m_GraphicsJobs: 0
- m_BuildTarget: LinuxStandaloneSupport
m_GraphicsJobs: 0
- m_BuildTarget: PS4Player
m_GraphicsJobs: 0
- m_BuildTarget: iOSSupport
m_GraphicsJobs: 0
- m_BuildTarget: WindowsStandaloneSupport
m_GraphicsJobs: 0
- m_BuildTarget: XboxOnePlayer
m_GraphicsJobs: 0
- m_BuildTarget: LuminSupport
m_GraphicsJobs: 0
- m_BuildTarget: AndroidPlayer
m_GraphicsJobs: 0
- m_BuildTarget: WebGLSupport
m_GraphicsJobs: 0
m_BuildTargetGraphicsJobMode: []
m_BuildTargetGraphicsAPIs:
- m_BuildTarget: AndroidPlayer
m_APIs: 150000000b000000
m_Automatic: 1
- m_BuildTarget: iOSSupport
m_APIs: 10000000
m_Automatic: 1
m_BuildTargetVRSettings: []
m_DefaultShaderChunkSizeInMB: 16
m_DefaultShaderChunkCount: 0
openGLRequireES31: 0
openGLRequireES31AEP: 0
openGLRequireES32: 0
m_TemplateCustomTags: {}
mobileMTRendering:
Android: 1
iPhone: 1
tvOS: 1
m_BuildTargetGroupLightmapEncodingQuality: []
m_BuildTargetGroupHDRCubemapEncodingQuality: []
m_BuildTargetGroupLightmapSettings: []
m_BuildTargetGroupLoadStoreDebugModeSettings: []
m_BuildTargetNormalMapEncoding: []
m_BuildTargetDefaultTextureCompressionFormat:
- serializedVersion: 3
m_BuildTarget: Android
m_Formats: 03000000
playModeTestRunnerEnabled: 0
runPlayModeTestAsEditModeTest: 0
actionOnDotNetUnhandledException: 1
editorGfxJobOverride: 1
enableInternalProfiler: 0
logObjCUncaughtExceptions: 1
enableCrashReportAPI: 0
cameraUsageDescription:
locationUsageDescription:
microphoneUsageDescription:
bluetoothUsageDescription:
macOSTargetOSVersion: 11.0
switchNMETAOverride:
switchNetLibKey:
switchSocketMemoryPoolSize: 6144
switchSocketAllocatorPoolSize: 128
switchSocketConcurrencyLimit: 14
switchScreenResolutionBehavior: 2
switchUseCPUProfiler: 0
switchEnableFileSystemTrace: 0
switchLTOSetting: 0
switchApplicationID: 0x01004b9000490000
switchNSODependencies:
switchCompilerFlags:
switchTitleNames_0:
switchTitleNames_1:
switchTitleNames_2:
switchTitleNames_3:
switchTitleNames_4:
switchTitleNames_5:
switchTitleNames_6:
switchTitleNames_7:
switchTitleNames_8:
switchTitleNames_9:
switchTitleNames_10:
switchTitleNames_11:
switchTitleNames_12:
switchTitleNames_13:
switchTitleNames_14:
switchTitleNames_15:
switchPublisherNames_0:
switchPublisherNames_1:
switchPublisherNames_2:
switchPublisherNames_3:
switchPublisherNames_4:
switchPublisherNames_5:
switchPublisherNames_6:
switchPublisherNames_7:
switchPublisherNames_8:
switchPublisherNames_9:
switchPublisherNames_10:
switchPublisherNames_11:
switchPublisherNames_12:
switchPublisherNames_13:
switchPublisherNames_14:
switchPublisherNames_15:
switchIcons_0: {fileID: 0}
switchIcons_1: {fileID: 0}
switchIcons_2: {fileID: 0}
switchIcons_3: {fileID: 0}
switchIcons_4: {fileID: 0}
switchIcons_5: {fileID: 0}
switchIcons_6: {fileID: 0}
switchIcons_7: {fileID: 0}
switchIcons_8: {fileID: 0}
switchIcons_9: {fileID: 0}
switchIcons_10: {fileID: 0}
switchIcons_11: {fileID: 0}
switchIcons_12: {fileID: 0}
switchIcons_13: {fileID: 0}
switchIcons_14: {fileID: 0}
switchIcons_15: {fileID: 0}
switchSmallIcons_0: {fileID: 0}
switchSmallIcons_1: {fileID: 0}
switchSmallIcons_2: {fileID: 0}
switchSmallIcons_3: {fileID: 0}
switchSmallIcons_4: {fileID: 0}
switchSmallIcons_5: {fileID: 0}
switchSmallIcons_6: {fileID: 0}
switchSmallIcons_7: {fileID: 0}
switchSmallIcons_8: {fileID: 0}
switchSmallIcons_9: {fileID: 0}
switchSmallIcons_10: {fileID: 0}
switchSmallIcons_11: {fileID: 0}
switchSmallIcons_12: {fileID: 0}
switchSmallIcons_13: {fileID: 0}
switchSmallIcons_14: {fileID: 0}
switchSmallIcons_15: {fileID: 0}
switchManualHTML:
switchAccessibleURLs:
switchLegalInformation:
switchMainThreadStackSize: 1048576
switchPresenceGroupId:
switchLogoHandling: 0
switchReleaseVersion: 0
switchDisplayVersion: 1.0.0
switchStartupUserAccount: 0
switchSupportedLanguagesMask: 0
switchLogoType: 0
switchApplicationErrorCodeCategory:
switchUserAccountSaveDataSize: 0
switchUserAccountSaveDataJournalSize: 0
switchApplicationAttribute: 0
switchCardSpecSize: -1
switchCardSpecClock: -1
switchRatingsMask: 0
switchRatingsInt_0: 0
switchRatingsInt_1: 0
switchRatingsInt_2: 0
switchRatingsInt_3: 0
switchRatingsInt_4: 0
switchRatingsInt_5: 0
switchRatingsInt_6: 0
switchRatingsInt_7: 0
switchRatingsInt_8: 0
switchRatingsInt_9: 0
switchRatingsInt_10: 0
switchRatingsInt_11: 0
switchRatingsInt_12: 0
switchLocalCommunicationIds_0:
switchLocalCommunicationIds_1:
switchLocalCommunicationIds_2:
switchLocalCommunicationIds_3:
switchLocalCommunicationIds_4:
switchLocalCommunicationIds_5:
switchLocalCommunicationIds_6:
switchLocalCommunicationIds_7:
switchParentalControl: 0
switchAllowsScreenshot: 1
switchAllowsVideoCapturing: 1
switchAllowsRuntimeAddOnContentInstall: 0
switchDataLossConfirmation: 0
switchUserAccountLockEnabled: 0
switchSystemResourceMemory: 16777216
switchSupportedNpadStyles: 22
switchNativeFsCacheSize: 32
switchIsHoldTypeHorizontal: 0
switchSupportedNpadCount: 8
switchEnableTouchScreen: 1
switchSocketConfigEnabled: 0
switchTcpInitialSendBufferSize: 32
switchTcpInitialReceiveBufferSize: 64
switchTcpAutoSendBufferSizeMax: 256
switchTcpAutoReceiveBufferSizeMax: 256
switchUdpSendBufferSize: 9
switchUdpReceiveBufferSize: 42
switchSocketBufferEfficiency: 4
switchSocketInitializeEnabled: 1
switchNetworkInterfaceManagerInitializeEnabled: 1
switchDisableHTCSPlayerConnection: 0
switchUseNewStyleFilepaths: 0
switchUseLegacyFmodPriorities: 0
switchUseMicroSleepForYield: 1
switchEnableRamDiskSupport: 0
switchMicroSleepForYieldTime: 25
switchRamDiskSpaceSize: 12
switchUpgradedPlayerSettingsToNMETA: 0
ps4NPAgeRating: 12
ps4NPTitleSecret:
ps4NPTrophyPackPath:
ps4ParentalLevel: 11
ps4ContentID: ED1633-NPXX51362_00-0000000000000000
ps4Category: 0
ps4MasterVersion: 01.00
ps4AppVersion: 01.00
ps4AppType: 0
ps4ParamSfxPath:
ps4VideoOutPixelFormat: 0
ps4VideoOutInitialWidth: 1920
ps4VideoOutBaseModeInitialWidth: 1920
ps4VideoOutReprojectionRate: 60
ps4PronunciationXMLPath:
ps4PronunciationSIGPath:
ps4BackgroundImagePath:
ps4StartupImagePath:
ps4StartupImagesFolder:
ps4IconImagesFolder:
ps4SaveDataImagePath:
ps4SdkOverride:
ps4BGMPath:
ps4ShareFilePath:
ps4ShareOverlayImagePath:
ps4PrivacyGuardImagePath:
ps4ExtraSceSysFile:
ps4NPtitleDatPath:
ps4RemotePlayKeyAssignment: -1
ps4RemotePlayKeyMappingDir:
ps4PlayTogetherPlayerCount: 0
ps4EnterButtonAssignment: 2
ps4ApplicationParam1: 0
ps4ApplicationParam2: 0
ps4ApplicationParam3: 0
ps4ApplicationParam4: 0
ps4DownloadDataSize: 0
ps4GarlicHeapSize: 2048
ps4ProGarlicHeapSize: 2560
playerPrefsMaxSize: 32768
ps4Passcode: 2nShdVIdSuseGopOYddcjmN1a8azrPFr
ps4pnSessions: 1
ps4pnPresence: 1
ps4pnFriends: 1
ps4pnGameCustomData: 1
playerPrefsSupport: 0
enableApplicationExit: 0
resetTempFolder: 1
restrictedAudioUsageRights: 0
ps4UseResolutionFallback: 0
ps4ReprojectionSupport: 0
ps4UseAudio3dBackend: 0
ps4UseLowGarlicFragmentationMode: 1
ps4SocialScreenEnabled: 0
ps4ScriptOptimizationLevel: 2
ps4Audio3dVirtualSpeakerCount: 14
ps4attribCpuUsage: 0
ps4PatchPkgPath:
ps4PatchLatestPkgPath:
ps4PatchChangeinfoPath:
ps4PatchDayOne: 0
ps4attribUserManagement: 0
ps4attribMoveSupport: 0
ps4attrib3DSupport: 0
ps4attribShareSupport: 0
ps4attribExclusiveVR: 0
ps4disableAutoHideSplash: 0
ps4videoRecordingFeaturesUsed: 0
ps4contentSearchFeaturesUsed: 0
ps4CompatibilityPS5: 0
ps4AllowPS5Detection: 0
ps4GPU800MHz: 1
ps4attribEyeToEyeDistanceSettingVR: 0
ps4IncludedModules: []
ps4attribVROutputEnabled: 0
monoEnv:
splashScreenBackgroundSourceLandscape: {fileID: 0}
splashScreenBackgroundSourcePortrait: {fileID: 0}
blurSplashScreenBackground: 1
spritePackerPolicy:
webGLMemorySize: 32
webGLExceptionSupport: 1
webGLNameFilesAsHashes: 0
webGLShowDiagnostics: 0
webGLDataCaching: 1
webGLDebugSymbols: 0
webGLEmscriptenArgs:
webGLModulesDirectory:
webGLTemplate: APPLICATION:Default
webGLAnalyzeBuildSize: 0
webGLUseEmbeddedResources: 0
webGLCompressionFormat: 0
webGLWasmArithmeticExceptions: 0
webGLLinkerTarget: 1
webGLThreadsSupport: 0
webGLDecompressionFallback: 0
webGLInitialMemorySize: 32
webGLMaximumMemorySize: 2048
webGLMemoryGrowthMode: 2
webGLMemoryLinearGrowthStep: 16
webGLMemoryGeometricGrowthStep: 0.2
webGLMemoryGeometricGrowthCap: 96
webGLEnableWebGPU: 0
webGLPowerPreference: 2
webGLWebAssemblyTable: 0
webGLWebAssemblyBigInt: 0
webGLCloseOnQuit: 0
webWasm2023: 0
scriptingDefineSymbols: {}
additionalCompilerArguments: {}
platformArchitecture: {}
scriptingBackend:
Android: 1
il2cppCompilerConfiguration: {}
il2cppCodeGeneration: {}
il2cppStacktraceInformation: {}
managedStrippingLevel: {}
incrementalIl2cppBuild: {}
suppressCommonWarnings: 1
allowUnsafeCode: 0
useDeterministicCompilation: 1
additionalIl2CppArgs:
scriptingRuntimeVersion: 1
gcIncremental: 1
gcWBarrierValidation: 0
apiCompatibilityLevelPerPlatform: {}
editorAssembliesCompatibilityLevel: 1
m_RenderingPath: 1
m_MobileRenderingPath: 1
metroPackageName: magisterka_2
metroPackageVersion:
metroCertificatePath:
metroCertificatePassword:
metroCertificateSubject:
metroCertificateIssuer:
metroCertificateNotAfter: 0000000000000000
metroApplicationDescription: magisterka_2
wsaImages: {}
metroTileShortName:
metroTileShowName: 0
metroMediumTileShowName: 0
metroLargeTileShowName: 0
metroWideTileShowName: 0
metroSupportStreamingInstall: 0
metroLastRequiredScene: 0
metroDefaultTileSize: 1
metroTileForegroundText: 2
metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0}
metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1}
metroSplashScreenUseBackgroundColor: 0
syncCapabilities: 0
platformCapabilities: {}
metroTargetDeviceFamilies: {}
metroFTAName:
metroFTAFileTypes: []
metroProtocolName:
vcxProjDefaultLanguage:
XboxOneProductId:
XboxOneUpdateKey:
XboxOneSandboxId:
XboxOneContentId:
XboxOneTitleId:
XboxOneSCId:
XboxOneGameOsOverridePath:
XboxOnePackagingOverridePath:
XboxOneAppManifestOverridePath:
XboxOneVersion: 1.0.0.0
XboxOnePackageEncryption: 0
XboxOnePackageUpdateGranularity: 2
XboxOneDescription:
XboxOneLanguage:
- enus
XboxOneCapability: []
XboxOneGameRating: {}
XboxOneIsContentPackage: 0
XboxOneEnhancedXboxCompatibilityMode: 0
XboxOneEnableGPUVariability: 1
XboxOneSockets: {}
XboxOneSplashScreen: {fileID: 0}
XboxOneAllowedProductIds: []
XboxOnePersistentLocalStorageSize: 0
XboxOneXTitleMemory: 8
XboxOneOverrideIdentityName:
XboxOneOverrideIdentityPublisher:
vrEditorSettings: {}
cloudServicesEnabled: {}
luminIcon:
m_Name:
m_ModelFolderPath:
m_PortalFolderPath:
luminCert:
m_CertPath:
m_SignPackage: 1
luminIsChannelApp: 0
luminVersion:
m_VersionCode: 1
m_VersionName:
hmiPlayerDataPath:
hmiForceSRGBBlit: 0
embeddedLinuxEnableGamepadInput: 0
hmiCpuConfiguration:
hmiLogStartupTiming: 0
qnxGraphicConfPath:
apiCompatibilityLevel: 6
captureStartupLogs: {}
activeInputHandler: 2
windowsGamepadBackendHint: 0
cloudProjectId: 424ab3b9-f2d0-44ca-85f6-f84e7f82202d
framebufferDepthMemorylessMode: 0
qualitySettingsNames: []
projectName: magisterka_2
organizationId: nightmarekiller69
cloudEnabled: 0
legacyClampBlendShapeWeights: 0
hmiLoadingImage: {fileID: 0}
platformRequiresReadableAssets: 0
virtualTexturingSupportEnabled: 0
insecureHttpOption: 0
androidVulkanDenyFilterList: []
androidVulkanAllowFilterList: []

View File

@ -0,0 +1,2 @@
m_EditorVersion: 6000.0.58f2
m_EditorVersionWithRevision: 6000.0.58f2 (92dee566b325)

View File

@ -0,0 +1,239 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!47 &1
QualitySettings:
m_ObjectHideFlags: 0
serializedVersion: 5
m_CurrentQuality: 5
m_QualitySettings:
- serializedVersion: 2
name: Very Low
pixelLightCount: 0
shadows: 0
shadowResolution: 0
shadowProjection: 1
shadowCascades: 1
shadowDistance: 15
shadowNearPlaneOffset: 3
shadowCascade2Split: 0.33333334
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
shadowmaskMode: 0
skinWeights: 1
textureQuality: 1
anisotropicTextures: 0
antiAliasing: 0
softParticles: 0
softVegetation: 0
realtimeReflectionProbes: 0
billboardsFaceCameraPosition: 0
vSyncCount: 0
lodBias: 0.3
maximumLODLevel: 0
streamingMipmapsActive: 0
streamingMipmapsAddAllCameras: 1
streamingMipmapsMemoryBudget: 512
streamingMipmapsRenderersPerFrame: 512
streamingMipmapsMaxLevelReduction: 2
streamingMipmapsMaxFileIORequests: 1024
particleRaycastBudget: 4
asyncUploadTimeSlice: 2
asyncUploadBufferSize: 16
asyncUploadPersistentBuffer: 1
resolutionScalingFixedDPIFactor: 1
customRenderPipeline: {fileID: 0}
excludedTargetPlatforms: []
- serializedVersion: 2
name: Low
pixelLightCount: 0
shadows: 0
shadowResolution: 0
shadowProjection: 1
shadowCascades: 1
shadowDistance: 20
shadowNearPlaneOffset: 3
shadowCascade2Split: 0.33333334
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
shadowmaskMode: 0
skinWeights: 2
textureQuality: 0
anisotropicTextures: 0
antiAliasing: 0
softParticles: 0
softVegetation: 0
realtimeReflectionProbes: 0
billboardsFaceCameraPosition: 0
vSyncCount: 0
lodBias: 0.4
maximumLODLevel: 0
streamingMipmapsActive: 0
streamingMipmapsAddAllCameras: 1
streamingMipmapsMemoryBudget: 512
streamingMipmapsRenderersPerFrame: 512
streamingMipmapsMaxLevelReduction: 2
streamingMipmapsMaxFileIORequests: 1024
particleRaycastBudget: 16
asyncUploadTimeSlice: 2
asyncUploadBufferSize: 16
asyncUploadPersistentBuffer: 1
resolutionScalingFixedDPIFactor: 1
customRenderPipeline: {fileID: 0}
excludedTargetPlatforms: []
- serializedVersion: 2
name: Medium
pixelLightCount: 1
shadows: 1
shadowResolution: 0
shadowProjection: 1
shadowCascades: 1
shadowDistance: 20
shadowNearPlaneOffset: 3
shadowCascade2Split: 0.33333334
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
shadowmaskMode: 0
skinWeights: 2
textureQuality: 0
anisotropicTextures: 1
antiAliasing: 0
softParticles: 0
softVegetation: 0
realtimeReflectionProbes: 0
billboardsFaceCameraPosition: 0
vSyncCount: 1
lodBias: 0.7
maximumLODLevel: 0
streamingMipmapsActive: 0
streamingMipmapsAddAllCameras: 1
streamingMipmapsMemoryBudget: 512
streamingMipmapsRenderersPerFrame: 512
streamingMipmapsMaxLevelReduction: 2
streamingMipmapsMaxFileIORequests: 1024
particleRaycastBudget: 64
asyncUploadTimeSlice: 2
asyncUploadBufferSize: 16
asyncUploadPersistentBuffer: 1
resolutionScalingFixedDPIFactor: 1
customRenderPipeline: {fileID: 0}
excludedTargetPlatforms: []
- serializedVersion: 2
name: High
pixelLightCount: 2
shadows: 2
shadowResolution: 1
shadowProjection: 1
shadowCascades: 2
shadowDistance: 40
shadowNearPlaneOffset: 3
shadowCascade2Split: 0.33333334
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
shadowmaskMode: 1
skinWeights: 2
textureQuality: 0
anisotropicTextures: 1
antiAliasing: 0
softParticles: 0
softVegetation: 1
realtimeReflectionProbes: 1
billboardsFaceCameraPosition: 1
vSyncCount: 1
lodBias: 1
maximumLODLevel: 0
streamingMipmapsActive: 0
streamingMipmapsAddAllCameras: 1
streamingMipmapsMemoryBudget: 512
streamingMipmapsRenderersPerFrame: 512
streamingMipmapsMaxLevelReduction: 2
streamingMipmapsMaxFileIORequests: 1024
particleRaycastBudget: 256
asyncUploadTimeSlice: 2
asyncUploadBufferSize: 16
asyncUploadPersistentBuffer: 1
resolutionScalingFixedDPIFactor: 1
customRenderPipeline: {fileID: 0}
excludedTargetPlatforms: []
- serializedVersion: 2
name: Very High
pixelLightCount: 3
shadows: 2
shadowResolution: 2
shadowProjection: 1
shadowCascades: 2
shadowDistance: 70
shadowNearPlaneOffset: 3
shadowCascade2Split: 0.33333334
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
shadowmaskMode: 1
skinWeights: 4
textureQuality: 0
anisotropicTextures: 2
antiAliasing: 2
softParticles: 1
softVegetation: 1
realtimeReflectionProbes: 1
billboardsFaceCameraPosition: 1
vSyncCount: 1
lodBias: 1.5
maximumLODLevel: 0
streamingMipmapsActive: 0
streamingMipmapsAddAllCameras: 1
streamingMipmapsMemoryBudget: 512
streamingMipmapsRenderersPerFrame: 512
streamingMipmapsMaxLevelReduction: 2
streamingMipmapsMaxFileIORequests: 1024
particleRaycastBudget: 1024
asyncUploadTimeSlice: 2
asyncUploadBufferSize: 16
asyncUploadPersistentBuffer: 1
resolutionScalingFixedDPIFactor: 1
customRenderPipeline: {fileID: 0}
excludedTargetPlatforms: []
- serializedVersion: 2
name: Ultra
pixelLightCount: 4
shadows: 2
shadowResolution: 2
shadowProjection: 1
shadowCascades: 4
shadowDistance: 150
shadowNearPlaneOffset: 3
shadowCascade2Split: 0.33333334
shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}
shadowmaskMode: 1
skinWeights: 255
textureQuality: 0
anisotropicTextures: 2
antiAliasing: 2
softParticles: 1
softVegetation: 1
realtimeReflectionProbes: 1
billboardsFaceCameraPosition: 1
vSyncCount: 1
lodBias: 2
maximumLODLevel: 0
streamingMipmapsActive: 0
streamingMipmapsAddAllCameras: 1
streamingMipmapsMemoryBudget: 512
streamingMipmapsRenderersPerFrame: 512
streamingMipmapsMaxLevelReduction: 2
streamingMipmapsMaxFileIORequests: 1024
particleRaycastBudget: 4096
asyncUploadTimeSlice: 2
asyncUploadBufferSize: 16
asyncUploadPersistentBuffer: 1
resolutionScalingFixedDPIFactor: 1
customRenderPipeline: {fileID: 0}
excludedTargetPlatforms: []
m_PerPlatformDefaultQuality:
Android: 2
Lumin: 5
GameCoreScarlett: 5
GameCoreXboxOne: 5
Nintendo Switch: 5
PS4: 5
PS5: 5
Stadia: 5
Standalone: 5
WebGL: 3
Windows Store Apps: 5
XboxOne: 5
iPhone: 2
tvOS: 2

View File

@ -0,0 +1,43 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!78 &1
TagManager:
serializedVersion: 2
tags: []
layers:
- Default
- TransparentFX
- Ignore Raycast
-
- Water
- UI
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
m_SortingLayers:
- name: Default
uniqueID: 0
locked: 0

View File

@ -0,0 +1,9 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!5 &1
TimeManager:
m_ObjectHideFlags: 0
Fixed Timestep: 0.02
Maximum Allowed Timestep: 0.33333334
m_TimeScale: 1
Maximum Particle Timestep: 0.03

View File

@ -0,0 +1,36 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!310 &1
UnityConnectSettings:
m_ObjectHideFlags: 0
serializedVersion: 1
m_Enabled: 0
m_TestMode: 0
m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events
m_EventUrl: https://cdp.cloud.unity3d.com/v1/events
m_ConfigUrl: https://config.uca.cloud.unity3d.com
m_DashboardUrl: https://dashboard.unity3d.com
m_TestInitMode: 0
CrashReportingSettings:
m_EventUrl: https://perf-events.cloud.unity3d.com
m_Enabled: 0
m_LogBufferSize: 10
m_CaptureEditorExceptions: 1
UnityPurchasingSettings:
m_Enabled: 0
m_TestMode: 0
UnityAnalyticsSettings:
m_Enabled: 0
m_TestMode: 0
m_InitializeOnStartup: 1
m_PackageRequiringCoreStatsPresent: 0
UnityAdsSettings:
m_Enabled: 0
m_InitializeOnStartup: 1
m_TestMode: 0
m_IosGameId:
m_AndroidGameId:
m_GameIds: {}
m_GameId:
PerformanceReportingSettings:
m_Enabled: 0

View File

@ -0,0 +1,14 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!937362698 &1
VFXManager:
m_ObjectHideFlags: 0
m_IndirectShader: {fileID: 0}
m_CopyBufferShader: {fileID: 0}
m_SortShader: {fileID: 0}
m_StripUpdateShader: {fileID: 0}
m_RenderPipeSettingsPath:
m_FixedTimeStep: 0.016666668
m_MaxDeltaTime: 0.05
m_CompiledVersion: 0
m_RuntimeVersion: 0

View File

@ -0,0 +1,8 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!890905787 &1
VersionControlSettings:
m_ObjectHideFlags: 0
m_Mode: Visible Meta Files
m_CollabEditorSettings:
inProgressEnabled: 1

View File

@ -0,0 +1,10 @@
{
"m_SettingKeys": [
"VR Device Disabled",
"VR Device User Alert"
],
"m_SettingValues": [
"False",
"False"
]
}