Changed PickableProjectile: physics, collider, recall behaviour

Refactored and documented files: GameManager, MainMenu
This commit is contained in:
Данил Ярош 2025-09-10 17:14:46 +03:00
parent 1f314e2bc2
commit a5e1f85877
91 changed files with 74157 additions and 559 deletions

View File

@ -911,13 +911,14 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 16ac12688a958d34983f6f0307a045ad, type: 3}
m_Name:
m_EditorClassIdentifier:
player: {fileID: 0}
playerController: {fileID: 0}
playerObj: {fileID: 0}
viewDistance: 5
viewAngle: 60
moveSpeed: 3
acceleration: 10
obstacleMask:
serializedVersion: 2
m_Bits: 16
--- !u!50 &7633178279901007628
Rigidbody2D:
serializedVersion: 5

View File

@ -9,9 +9,9 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 1452460312376183192}
- component: {fileID: -640855425046532091}
- component: {fileID: 8375585699851212105}
- component: {fileID: 5633092123120389871}
- component: {fileID: 4133686727143716795}
- component: {fileID: 4169089013277977673}
- component: {fileID: 6960937834036335996}
m_Layer: 0
m_Name: PickableProjectile
m_TagString: Projectile
@ -32,10 +32,10 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 1
m_Children:
- {fileID: 7421163371325257947}
- {fileID: 8085295793687642317}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!50 &-640855425046532091
--- !u!50 &4133686727143716795
Rigidbody2D:
serializedVersion: 5
m_ObjectHideFlags: 0
@ -47,11 +47,11 @@ Rigidbody2D:
m_Simulated: 1
m_UseFullKinematicContacts: 0
m_UseAutoMass: 0
m_Mass: 5
m_Mass: 3
m_LinearDamping: 0
m_AngularDamping: 0.05
m_GravityScale: 1
m_Material: {fileID: 6200000, guid: 63f618adb0dc58844abe8ec1a9bd45a8, type: 2}
m_Material: {fileID: 6200000, guid: be34b14ed2876354d9864a6e677e5d67, type: 2}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
@ -62,43 +62,7 @@ Rigidbody2D:
m_SleepingMode: 1
m_CollisionDetection: 0
m_Constraints: 0
--- !u!58 &8375585699851212105
CircleCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5993946430821065449}
m_Enabled: 1
serializedVersion: 3
m_Density: 1
m_Material: {fileID: 6200000, guid: 63f618adb0dc58844abe8ec1a9bd45a8, type: 2}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_ForceSendLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ForceReceiveLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ContactCaptureLayers:
serializedVersion: 2
m_Bits: 4294967295
m_CallbackLayers:
serializedVersion: 2
m_Bits: 4294967295
m_IsTrigger: 0
m_UsedByEffector: 0
m_CompositeOperation: 0
m_CompositeOrder: 0
m_Offset: {x: 0, y: 0}
m_Radius: 0.5
--- !u!114 &5633092123120389871
--- !u!114 &4169089013277977673
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@ -131,18 +95,55 @@ MonoBehaviour:
sleepVelocity: 0.05
lockWhenLanded: 1
maxBounces: 100
minBounceSpeed: 8
minBounceSpeed: 0.1
restitution: 0.6
tangentDamping: 0.85
groundUpTolerance: 0.25
stickDelayAfterImpact: 0.03
recallStartDistance: 20
recallStartDistance: 10
recallArriveDistance: 1.4
recallMaxSpeed: 16
recallAcceleration: 60
recallSpeed: 16
recallAcceleration: 100
drawGizmos: 1
gizmoColor: {r: 0.2, g: 0.8, b: 1, a: 0.35}
--- !u!1 &7253843866260996112
--- !u!70 &6960937834036335996
CapsuleCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5993946430821065449}
m_Enabled: 1
serializedVersion: 3
m_Density: 1
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_ForceSendLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ForceReceiveLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ContactCaptureLayers:
serializedVersion: 2
m_Bits: 4294967295
m_CallbackLayers:
serializedVersion: 2
m_Bits: 4294967295
m_IsTrigger: 0
m_UsedByEffector: 0
m_CompositeOperation: 0
m_CompositeOrder: 0
m_Offset: {x: 0, y: 0}
m_Size: {x: 1, y: 1.3}
m_Direction: 0
--- !u!1 &7932273378799574310
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
@ -150,37 +151,38 @@ GameObject:
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7421163371325257947}
- component: {fileID: 6144931758823249624}
- component: {fileID: 8085295793687642317}
- component: {fileID: 45442263581513632}
- component: {fileID: 7575539923147100530}
m_Layer: 0
m_Name: texture_round_0
m_Name: tamagoching_0
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &7421163371325257947
--- !u!4 &8085295793687642317
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7253843866260996112}
m_GameObject: {fileID: 7932273378799574310}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.096, y: 0.096, z: 0.096}
m_LocalScale: {x: 0.15, y: 0.15, z: 0.15}
m_ConstrainProportionsScale: 1
m_Children: []
m_Father: {fileID: 1452460312376183192}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &6144931758823249624
--- !u!212 &45442263581513632
SpriteRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7253843866260996112}
m_GameObject: {fileID: 7932273378799574310}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
@ -215,17 +217,105 @@ SpriteRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingLayerID: 824449243
m_SortingLayer: 1
m_SortingOrder: 0
m_Sprite: {fileID: -2920598655614517764, guid: 698ae6f0523d818459c87d916f78d1e4, type: 3}
m_Sprite: {fileID: -3550973283731103874, guid: 4db2fbc7e829aec46b75cceb207881b9, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 0
m_Size: {x: 10.24, y: 10.24}
m_Size: {x: 6.9, y: 8.8}
m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!60 &7575539923147100530
PolygonCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7932273378799574310}
m_Enabled: 0
serializedVersion: 3
m_Density: 1
m_Material: {fileID: 6200000, guid: 63f618adb0dc58844abe8ec1a9bd45a8, type: 2}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_ForceSendLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ForceReceiveLayers:
serializedVersion: 2
m_Bits: 4294967295
m_ContactCaptureLayers:
serializedVersion: 2
m_Bits: 4294967295
m_CallbackLayers:
serializedVersion: 2
m_Bits: 4294967295
m_IsTrigger: 0
m_UsedByEffector: 0
m_CompositeOperation: 1
m_CompositeOrder: 0
m_Offset: {x: 0, y: 0}
m_SpriteTilingProperty:
border: {x: 0, y: 0, z: 0, w: 0}
pivot: {x: 0.5, y: 0.5}
oldSize: {x: 6.9, y: 8.8}
newSize: {x: 6.9, y: 8.8}
adaptiveTilingThreshold: 0.5
drawMode: 0
adaptiveTiling: 0
m_AutoTiling: 0
m_Points:
m_Paths:
- - {x: 3.31, y: -2.11}
- {x: 3.4399998, y: -1.28}
- {x: 3.4199998, y: -0.48999998}
- {x: 3.35, y: 0.02}
- {x: 3.22, y: 0.61}
- {x: 3.09, y: 1.0799999}
- {x: 2.86, y: 1.7199999}
- {x: 2.57, y: 2.3899999}
- {x: 2.22, y: 3}
- {x: 1.88, y: 3.49}
- {x: 1.31, y: 4.0499997}
- {x: 0.78999996, y: 4.3199997}
- {x: 0.29999998, y: 4.4}
- {x: -0.11, y: 4.35}
- {x: -0.45999998, y: 4.27}
- {x: -0.91999996, y: 4.02}
- {x: -1.17, y: 3.83}
- {x: -1.4499999, y: 3.57}
- {x: -1.73, y: 3.26}
- {x: -1.9699999, y: 2.96}
- {x: -2.3, y: 2.47}
- {x: -2.6299999, y: 1.89}
- {x: -2.86, y: 1.41}
- {x: -3.1299999, y: 0.71999997}
- {x: -3.3, y: 0.12}
- {x: -3.3899999, y: -0.39999998}
- {x: -3.4299998, y: -0.71}
- {x: -3.4399998, y: -1.1999999}
- {x: -3.3799999, y: -1.79}
- {x: -3.1999998, y: -2.47}
- {x: -2.96, y: -2.9199998}
- {x: -2.62, y: -3.36}
- {x: -2.1599998, y: -3.78}
- {x: -1.37, y: -4.18}
- {x: -0.61, y: -4.35}
- {x: -0.06, y: -4.38}
- {x: 0.42, y: -4.37}
- {x: 1.29, y: -4.21}
- {x: 1.9399999, y: -3.8799999}
- {x: 2.54, y: -3.4199998}
- {x: 2.96, y: -2.8799999}
m_UseDelaunayMesh: 0

View File

@ -2664,7 +2664,7 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
moveSpeed: 8
accel: 40
accel: 80
decel: 20
maxJumpHeight: 5
jumpCooldown: 0.1
@ -2683,9 +2683,9 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 4e22b17be0e015040bb8efb0e96fa590, type: 3}
m_Name:
m_EditorClassIdentifier:
projectilePrefab: {fileID: -7990430535451479416, guid: 7fd3a37dc702ece42b51e5867473f0ff, type: 3}
projectilePrefab: {fileID: 0}
spawnIfMissing: 0
attachPoint: {fileID: 6550761234898366363}
attachPoint: {fileID: 6550761234593413718}
actionKey: 102
throwSpeed: 20
--- !u!1 &6550761235546795891

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -748,7 +748,6 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: a051668844a44474c99441ddb8b727f0, type: 3}
m_Name:
m_EditorClassIdentifier:
playerObj: {fileID: 0}
playerPrefab: {fileID: 6550761235523395909, guid: 5e2f7649694807646a991b80b725b2e5, type: 3}
playerPrefabResourcePath: Prefabs/Player
--- !u!4 &1378233909

View File

@ -2,7 +2,9 @@
public class BGParallax : MonoBehaviour
{
[SerializeField] private float parallaxFactor = 0.5f;
[SerializeField][Range(-1f, 3f)] private float parallaxFactorX = 0.5f;
[SerializeField][Range(-1f, 3f)] private float parallaxFactorY = 0.5f;
[SerializeField] private bool lockYAxis = false;
private Transform cameraTransform;
private Vector3 previousCameraPosition;
@ -15,7 +17,10 @@ public class BGParallax : MonoBehaviour
void LateUpdate()
{
Vector3 delta = cameraTransform.position - previousCameraPosition;
transform.position += new Vector3(delta.x * parallaxFactor, delta.y * parallaxFactor, 0);
if (lockYAxis)
transform.position += new Vector3(delta.x * parallaxFactorX, 0, 0);
else
transform.position += new Vector3(delta.x * parallaxFactorX, delta.y * parallaxFactorY, 0);
previousCameraPosition = cameraTransform.position;
}
}

View File

@ -50,8 +50,8 @@ public class CameraFollow2D : MonoBehaviour
private Transform ResolvePlayer()
{
// 1) Через GameManager, если он есть и уже создал игрока
if (GameManager.Instance && GameManager.Instance.playerObj)
return GameManager.Instance.playerObj.transform;
if (GameManager.Instance && GameManager.Instance.PlayerObj)
return GameManager.Instance.PlayerObj.transform;
// 2) Фолбэк по тегу (если префаб помечен "Player")
var go = GameObject.FindWithTag("Player");

View File

@ -6,10 +6,10 @@ public class EnemyController : MonoBehaviour
public GameObject playerObj;
public float viewDistance = 5f;
public float viewAngle = 60f;
public float moveSpeed = 3f;
public float moveSpeed = 4f;
public float acceleration = 10f;
private LayerMask obstacleMask = ~0;
[SerializeField] private LayerMask obstacleMask;
private Animator animator;
private Rigidbody2D rb;
private Vector2 targetVelocity = Vector2.zero;
@ -19,51 +19,36 @@ public class EnemyController : MonoBehaviour
rb = GetComponent<Rigidbody2D>();
animator = GetComponent<Animator>();
playerObj = GameManager.Instance.playerObj;
playerObj = GameManager.Instance.PlayerObj;
if (playerObj == null)
{
playerObj = GameObject.FindGameObjectWithTag("Player");
//Debug.Log("Player not found!");
}
}
void FixedUpdate()
{
if (playerObj != null && PlayerInSight())
if (!playerObj) return;
Vector2 playerCenter = (Vector2)playerObj.transform.position;
if (PlayerInSight())
{
//Debug.Log("Scanned player");
//Debug.Log($"Player: {player}\n PlayerInSight: {PlayerInSight()}");
Vector2 dir = ((Vector2)playerObj.transform.position - rb.position).normalized;
targetVelocity = dir * moveSpeed;
Vector2 toPlayer = playerCenter - (Vector2)transform.position;
float dist = toPlayer.magnitude;
if (dist > 0.01f)
rb.linearVelocity = toPlayer / dist * moveSpeed;
else
rb.linearVelocity = Vector2.zero;
}
else
{
//Debug.Log("No player in sight");
targetVelocity = Vector2.zero;
rb.linearVelocity = Vector2.MoveTowards(
rb.linearVelocity, Vector2.zero, acceleration * Time.fixedDeltaTime);
}
rb.linearVelocity = Vector2.MoveTowards(rb.linearVelocity, targetVelocity, acceleration * Time.fixedDeltaTime);
animator.SetFloat("Speed", Mathf.Abs(targetVelocity.magnitude));
}
private bool PlayerInSight()
{
Transform player = playerObj.transform;
Vector2 directionToPlayer = player.position - transform.position;
float distanceToPlayer = directionToPlayer.magnitude;
if (distanceToPlayer > viewDistance)
return false;
float angle = Vector2.Angle(transform.right, directionToPlayer);
if (angle > viewAngle / 2f)
return false;
RaycastHit2D hit = Physics2D.Raycast(transform.position, directionToPlayer.normalized, distanceToPlayer, obstacleMask);
if (hit.collider != null && hit.collider.transform != player)
return false;
return true;
animator.SetFloat("Speed", Mathf.Abs(rb.linearVelocity.magnitude));
}
void OnCollisionEnter2D(Collision2D collision)
@ -89,35 +74,34 @@ public class EnemyController : MonoBehaviour
else if (collision.collider.CompareTag("Projectile")) Die();
}
private void OnDrawGizmos()
private bool PlayerInSight()
{
if (playerObj == null) return;
if (!playerObj) return false;
Vector2 origin = transform.position;
Vector2 directionToPlayer = (playerObj.transform.position - transform.position);
float distanceToPlayer = directionToPlayer.magnitude;
Transform player = playerObj.transform;
Vector2 rightDir = Quaternion.Euler(0, 0, +viewAngle / 2f) * transform.right;
Vector2 leftDir = Quaternion.Euler(0, 0, -viewAngle / 2f) * transform.right;
Vector2 eyePos = new(rb.position.x, rb.position.y + 1.45f);
Gizmos.color = Color.yellow;
Gizmos.DrawLine(origin, origin + (rightDir * viewDistance));
Gizmos.DrawLine(origin, origin + (leftDir * viewDistance));
Vector2 toPlayer = (Vector2)player.position - eyePos;
float dist = toPlayer.magnitude;
if (dist > viewDistance) return false;
Gizmos.DrawWireSphere(origin, viewDistance);
Vector2 forward = (Vector2)transform.right;
if (distanceToPlayer <= viewDistance)
{
Gizmos.color = Color.red;
Gizmos.DrawLine(origin, playerObj.transform.position);
float cosHalf = Mathf.Cos(0.5f * viewAngle * Mathf.Deg2Rad);
float dot = Vector2.Dot(forward.normalized, toPlayer / Mathf.Max(dist, 1e-6f));
if (dot < cosHalf) return false;
RaycastHit2D hit = Physics2D.Raycast(origin, directionToPlayer.normalized, distanceToPlayer);
if (hit.collider != null)
{
Gizmos.color = Color.green;
Gizmos.DrawSphere(hit.point, 0.05f);
}
}
int mask = obstacleMask;
mask &= ~(1 << gameObject.layer);
mask &= ~(1 << playerObj.layer);
Vector2 origin = eyePos + forward.normalized * 0.05f;
RaycastHit2D hit = Physics2D.Raycast(origin, toPlayer.normalized, dist, mask);
if (hit.collider != null) return false;
return true;
}
void Die()
@ -125,4 +109,29 @@ public class EnemyController : MonoBehaviour
Destroy(gameObject);
}
#if UNITY_EDITOR
private void OnDrawGizmos()
{
if (!playerObj) return;
Vector2 origin = new(rb.position.x, rb.position.y + 1.45f);
Vector2 forward = (Vector2)transform.right;
float half = viewAngle * 0.5f;
Vector2 edgeA = (Vector2)(Quaternion.Euler(0, 0, +half) * (Vector3)forward);
Vector2 edgeB = (Vector2)(Quaternion.Euler(0, 0, -half) * (Vector3)forward);
Gizmos.color = Color.yellow;
Gizmos.DrawLine(origin, origin + edgeA * viewDistance);
Gizmos.DrawLine(origin, origin + edgeB * viewDistance);
Gizmos.DrawWireSphere(origin, viewDistance);
Vector2 toPlayer = (Vector2)playerObj.transform.position - origin;
if (toPlayer.magnitude <= viewDistance)
{
Gizmos.color = Color.red;
Gizmos.DrawLine(origin, playerObj.transform.position);
}
}
#endif
}

View File

@ -7,20 +7,22 @@ using UnityEngine.SceneManagement;
public class GameManager : MonoBehaviour
{
public static GameManager Instance { get; private set; }
[Header("Пауза")]
public bool IsPaused { get; private set; }
public event Action<bool> PauseStateChanged;
public int world { get; private set; } = 1;
public int stage { get; private set; } = 1;
public int stagesByWorld { get; private set; } = 5;
public int lives { get; private set; } = 3;
public int coins { get; private set; } = 0;
public GameObject playerObj { get; private set; }
[Header("Информация для игры")]
public int World { get; private set; } = 1;
public int Stage { get; private set; } = 1;
public int StagesByWorld { get; private set; } = 5;
public int Lives { get; private set; } = 3;
public int Coins { get; private set; } = 0;
[Header("Игрок")]
[SerializeField] private GameObject playerPrefab;
[SerializeField] private string playerPrefabResourcePath = "Prefabs/Player";
public GameObject PlayerObj { get; private set; }
private bool _shouldSpawnPlayer;
private void OnEnable() => SceneManager.sceneLoaded += OnSceneLoaded;
@ -30,6 +32,9 @@ public class GameManager : MonoBehaviour
public event Action<int> CoinsChanged;
//---------------------------
// Singleton
//---------------------------
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
private static void Bootstrap()
{
@ -57,6 +62,9 @@ public class GameManager : MonoBehaviour
{
if (Instance == this) Instance = null;
}
//---------------------------
//
//---------------------------
//private void Start()
//{
@ -69,6 +77,11 @@ public class GameManager : MonoBehaviour
// }
//}
/// <summary>
/// Поиск префаба игрока.
/// Если не найдет префаб из инспектора, ищет в "Resources"
/// </summary>
/// <returns> Префаб игрока </returns>
private GameObject ResolvePlayerPrefab()
{
if (playerPrefab != null) return playerPrefab;
@ -83,20 +96,35 @@ public class GameManager : MonoBehaviour
return loaded;
}
/// <summary>
/// Начало новой игры.
/// Загружает первый уровень.
/// Устанавливает жизни на 3, монеты на 0
/// </summary>
public void NewGame()
{
lives = 3;
coins = 0;
CoinsChanged?.Invoke(coins);
Lives = 3;
Coins = 0;
CoinsChanged?.Invoke(Coins);
LoadLevel(1, 1);
}
/// <summary>
/// Окончание игры.
/// Загружает сцену главного меню
/// </summary>
public void GameOver() => LoadScene("MainMenu", false);
/// <summary>
/// Загрузка уровня по данным.
/// Загружает уровень по номерам мира и уровня
/// </summary>
/// <param name="world">Номер мира</param>
/// <param name="stage">Номер уровня</param>
public void LoadLevel(int world, int stage)
{
this.world = world;
this.stage = stage;
this.World = world;
this.Stage = stage;
string sceneName = $"{world}-{stage}";
if (SceneInBuildSettingsExists(sceneName))
@ -110,6 +138,15 @@ public class GameManager : MonoBehaviour
LoadScene("MainMenu", false);
}
}
/// <summary>
/// Загрузка сцены по названию.
/// Вызывает одноименный метод в SceneManager.
/// Может загружать сцены с UI и без.
/// В сценах без UI игрок не спавнится
/// </summary>
/// <param name="sceneName">Строковое название сцены</param>
/// <param name="useUI">Использовать ли UI</param>
public void LoadScene(string sceneName, bool useUI = true)
{
_shouldSpawnPlayer = true;
@ -129,50 +166,75 @@ public class GameManager : MonoBehaviour
TrySpawnPlayerForActiveScene();
}
/// <summary>
/// Метод для спавна игрока.
/// Ищет первый спавнпоинт, спавнит игрока на его позиции.
/// Если на карте есть объект игрока, удаляет его и спавнит свой
/// </summary>
private void TrySpawnPlayerForActiveScene()
{
if (!_shouldSpawnPlayer) return;
var spawn = FindFirstObjectByType<PlayerSpawn>();
PlayerSpawn spawn = FindFirstObjectByType<PlayerSpawn>();
Vector3 pos = spawn ? spawn.transform.position : new Vector3(0, 1.3f, 0);
Quaternion rot = spawn ? spawn.transform.rotation : Quaternion.identity;
playerObj = GameObject.FindGameObjectWithTag("Player");
if (playerObj != null) Destroy(playerObj);
PlayerObj = GameObject.FindGameObjectWithTag("Player");
if (PlayerObj != null) Destroy(PlayerObj);
var prefab = ResolvePlayerPrefab();
if (prefab == null) return;
playerObj = Instantiate(prefab, pos, rot);
SceneManager.MoveGameObjectToScene(playerObj, SceneManager.GetActiveScene());
PlayerObj = Instantiate(prefab, pos, rot);
SceneManager.MoveGameObjectToScene(PlayerObj, SceneManager.GetActiveScene());
PlayerSpawned?.Invoke(playerObj);
PlayerSpawned?.Invoke(PlayerObj);
}
/// <summary>
/// Метод переходна на следующий уровень
/// </summary>
public void NextLevel()
{
if (stage >= stagesByWorld) LoadLevel(world + 1, 1);
else LoadLevel(world, stage + 1);
if (Stage >= StagesByWorld) LoadLevel(World + 1, 1);
else LoadLevel(World, Stage + 1);
}
/// <summary>
/// Метод сброса уровня.
/// При сбросе также сбрасывает монеты и отнимает жизни
/// </summary>
public void ResetLevel()
{
lives--;
Lives--;
Coins = 0;
CoinsChanged?.Invoke(Coins);
//print($"Lives: {lives}");
if (lives > 0) LoadLevel(world, stage);
if (Lives > 0) LoadLevel(World, Stage);
else GameOver();
}
/// <summary>
/// Метод добавления монеты
/// </summary>
public void AddCoin()
{
coins++;
if (coins >= 100)
Coins++;
if (Coins >= 100)
{
coins = 0;
Coins = 0;
AddLife();
}
CoinsChanged?.Invoke(coins);
CoinsChanged?.Invoke(Coins);
}
/// <summary>
/// Метод паузы игры.
/// Ставит на паузу все SFX и саму игру
/// </summary>
/// <param name="pause">Ставить ли на паузу</param>
public void SetPause(bool pause)
{
if (IsPaused == pause) return;
@ -184,10 +246,18 @@ public class GameManager : MonoBehaviour
PauseStateChanged?.Invoke(IsPaused);
}
/// <summary>
/// Метод переключателя паузы
/// </summary>
public void TogglePause() => SetPause(!IsPaused);
public void AddLife() => lives++;
public void AddLife() => Lives++;
/// <summary>
/// Метод проверки сцены на существование в настройках билда
/// </summary>
/// <param name="sceneName">Строковое название сцены</param>
/// <returns></returns>
private static bool SceneInBuildSettingsExists(string sceneName)
{
int count = SceneManager.sceneCountInBuildSettings;

View File

@ -3,7 +3,7 @@ using UnityEngine.UI;
public class MainMenu : MonoBehaviour
{
[Header("Buttons")]
[Header("Кнопки")]
[SerializeField] private Button newGameButton;
[SerializeField] private Button quitButton;
@ -17,24 +17,30 @@ public class MainMenu : MonoBehaviour
Bootstrap();
}
/// <summary>
/// Метод для загрузки элементов сцены.
/// Вешает события на кнопки
/// </summary>
public void Bootstrap()
{
if (newGameButton) newGameButton.onClick.AddListener(OnNewGame);
if (quitButton) quitButton.onClick.AddListener(OnQuit);
}
/// <summary>
/// Метод начала новой игры
/// </summary>
private void OnNewGame()
{
GameManager.Instance.NewGame();
}
/// <summary>
/// Метод выхода из игры
/// </summary>
private void OnQuit()
{
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#else
Application.Quit();
#endif
}
}

View File

@ -1,5 +1,6 @@
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
#if ENABLE_INPUT_SYSTEM
using UnityEngine.InputSystem;
#endif
@ -70,7 +71,7 @@ public class PauseMenu : MonoBehaviour
}
}
private System.Collections.IEnumerator Fade(CanvasGroup cg, float target, float duration)
private IEnumerator Fade(CanvasGroup cg, float target, float duration)
{
float start = cg.alpha;
float t = 0f;

View File

@ -32,7 +32,7 @@ public class PickableProjectile : BasicProjectile
public float recallStartDistance = 8f;
[Tooltip("На этой дистанции от руки считаем, что прилетел и подбираем.")]
public float recallArriveDistance = 1f;
public float recallMaxSpeed = 16f;
public float recallSpeed = 16f;
public float recallAcceleration = 60f;
[Header("Gizmos")]
@ -85,7 +85,12 @@ public class PickableProjectile : BasicProjectile
BecomeGrounded(null);
}
// Бумеранг только если снаряд когда-то уже был в руке
if ((CurrentState == State.Airborne || CurrentState == State.Returning) && rb.linearVelocity.sqrMagnitude > 0.0001f)
transform.up = rb.linearVelocity.normalized;
if (CurrentState == State.Airborne && rb.linearVelocity.magnitude < 0.1f)
BecomeGrounded(null);
if (hadBeenHeld && CurrentState != State.Held)
HandleRecallToPlayer();
}
@ -182,7 +187,7 @@ public class PickableProjectile : BasicProjectile
rb.angularVelocity = 0f;
rb.AddForce(dir * finalSpeed * rb.mass, ForceMode2D.Impulse);
transform.right = dir;
transform.up = dir;
transform.localScale = baseLocalScale;
if (throwOwner != null && ignoreOwnerTimeOnThrow > 0f)
@ -210,17 +215,26 @@ public class PickableProjectile : BasicProjectile
if (Time.time - lastImpactTime < stickDelayAfterImpact)
return true;
var v = rb.linearVelocity;
Vector2 v = rb.linearVelocity;
float speed = v.magnitude;
if (speed < minBounceSpeed) return false;
Vector2 avgNormal = Vector2.up;
float wsum = 0f;
float minSeparation = float.PositiveInfinity;
if (collision.contactCount > 0)
{
avgNormal = Vector2.zero;
Vector2 sum = Vector2.zero;
for (int i = 0; i < collision.contactCount; i++)
avgNormal += collision.GetContact(i).normal;
avgNormal.Normalize();
{
var cp = collision.GetContact(i);
float w = Mathf.Max(0.0001f, Mathf.Abs(cp.normalImpulse));
sum += cp.normal * w;
wsum += w;
if (cp.separation < minSeparation) minSeparation = cp.separation;
}
avgNormal = (wsum > 0f ? sum / wsum : sum).normalized;
}
Vector2 reflected = Vector2.Reflect(v, avgNormal) * restitution;
@ -231,10 +245,15 @@ public class PickableProjectile : BasicProjectile
reflected = vn + vt * tangentDamping;
rb.linearVelocity = reflected;
rb.position += n * 0.005f;
float pushOut = 0.005f;
if (minSeparation < 0f) pushOut = Mathf.Max(pushOut, -minSeparation + 0.001f);
rb.position += n * pushOut;
if (reflected.sqrMagnitude > 0.0001f)
transform.up = reflected.normalized;
bounceCounter++;
if (bounceCounter >= maxBounces)
return false;
@ -275,41 +294,57 @@ public class PickableProjectile : BasicProjectile
GameObject playerGo = lastKnownHolder;
if (playerGo == null || !playerGo.activeInHierarchy)
playerGo = (GameManager.Instance && GameManager.Instance.playerObj)
? GameManager.Instance.playerObj
playerGo = (GameManager.Instance && GameManager.Instance.PlayerObj)
? GameManager.Instance.PlayerObj
: GameObject.FindWithTag("Player");
if (!playerGo) return;
var hand = ResolveAttachPoint(playerGo);
var attachPoint = ResolveAttachPoint(playerGo);
Vector2 toHand = (Vector2)hand.position - rb.position;
float dist = toHand.magnitude;
bool isVisible = false;
var mainCamera = Camera.main;
float margin = 0.1f;
if (dist > recallStartDistance)
if (mainCamera)
{
if (CurrentState != State.Returning)
Vector3 vp = mainCamera.WorldToViewportPoint(transform.position);
isVisible = vp.x >= -margin && vp.x <= 1f + margin
&& vp.y >= -margin && vp.y <= 1f + margin;
}
else
{
Vector2 toOwnerTest = (Vector2)attachPoint.position - rb.position;
isVisible = (toOwnerTest.magnitude <= recallStartDistance);
}
Vector2 toOwner = (Vector2)attachPoint.position - rb.position;
float dist = toOwner.magnitude;
if (CurrentState != State.Returning)
{
if (!isVisible)
{
CurrentState = State.Returning;
rb.bodyType = RigidbodyType2D.Dynamic;
col.enabled = false;
}
Vector2 desired = toHand.normalized * recallMaxSpeed;
rb.linearVelocity = Vector2.MoveTowards(
rb.linearVelocity, desired, recallAcceleration * Time.fixedDeltaTime);
if (rb.linearVelocity.sqrMagnitude > 0.01f)
transform.right = rb.linearVelocity.normalized;
if (dist <= recallArriveDistance)
TryPickup(playerGo);
}
else if (CurrentState == State.Returning)
{
CurrentState = rb.bodyType == RigidbodyType2D.Dynamic ? State.Airborne : State.Grounded;
col.enabled = true;
else
{
return;
}
}
//float speed = rb.linearVelocity.magnitude;
//if (speed < 8f) speed = recallSpeed;
Vector2 dir = (dist > 0.001f) ? (toOwner / dist) : rb.linearVelocity.normalized;
rb.linearVelocity = dir * recallSpeed; //* speed;
if (rb.linearVelocity.sqrMagnitude > 0.01f)
transform.up = rb.linearVelocity.normalized;
if (dist <= recallArriveDistance)
TryPickup(playerGo);
}
#if UNITY_EDITOR

View File

@ -24,9 +24,9 @@ public class UITextController : MonoBehaviour
void Start()
{
livesCount = GameManager.Instance.lives;
coinsCount = GameManager.Instance.coins;
levelNumber = $"{GameManager.Instance.world}-{GameManager.Instance.stage}";
livesCount = GameManager.Instance.Lives;
coinsCount = GameManager.Instance.Coins;
levelNumber = $"{GameManager.Instance.World}-{GameManager.Instance.Stage}";
livesText.text = livesCount.ToString();
coinsText.text = coinsCount.ToString();

Binary file not shown.

After

Width:  |  Height:  |  Size: 576 KiB

View File

@ -0,0 +1,156 @@
fileFormatVersion: 2
guid: 7ea9d820e4038ff458b29cbad5755adc
TextureImporter:
internalIDToNameTable:
- first:
213: -6185596936409961069
second: Crab_enemy_full_0
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 2
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: WebGL
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: Crab_enemy_full_0
rect:
serializedVersion: 2
x: 101
y: 399
width: 840
height: 643
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: 39d2a89eb58582aa0800000000000000
internalID: -6185596936409961069
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
Crab_enemy_full_0: -6185596936409961069
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 792 B

After

Width:  |  Height:  |  Size: 792 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 980 B

After

Width:  |  Height:  |  Size: 980 B

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

Before

Width:  |  Height:  |  Size: 861 B

After

Width:  |  Height:  |  Size: 861 B

View File

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

Before

Width:  |  Height:  |  Size: 968 B

After

Width:  |  Height:  |  Size: 968 B

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 674 B

After

Width:  |  Height:  |  Size: 674 B

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

Before

Width:  |  Height:  |  Size: 4.7 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 736 KiB

View File

@ -0,0 +1,156 @@
fileFormatVersion: 2
guid: ee663851b33d517449a998d2883e1365
TextureImporter:
internalIDToNameTable:
- first:
213: -4258907507027704593
second: Oak_0
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 2
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: WebGL
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: Oak_0
rect:
serializedVersion: 2
x: 0
y: 51
width: 1024
height: 1478
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: fe48e50ef2255e4c0800000000000000
internalID: -4258907507027704593
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
Oak_0: -4258907507027704593
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 762 KiB

View File

@ -0,0 +1,156 @@
fileFormatVersion: 2
guid: a05c19bd19867f143b88aaca67608bd3
TextureImporter:
internalIDToNameTable:
- first:
213: 3549203890467312553
second: Spruce_0
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 2
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: WebGL
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: Spruce_0
rect:
serializedVersion: 2
x: 51
y: 0
width: 927
height: 1536
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: 9a31db6422e414130800000000000000
internalID: 3549203890467312553
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
Spruce_0: 3549203890467312553
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

Binary file not shown.

After

Width:  |  Height:  |  Size: 692 KiB

View File

@ -0,0 +1,156 @@
fileFormatVersion: 2
guid: 38720f0da96c0c34199aa136bbf169d4
TextureImporter:
internalIDToNameTable:
- first:
213: 8374419156831949758
second: Spruce_1_0
externalObjects: {}
serializedVersion: 13
mipmaps:
mipMapMode: 0
enableMipMap: 0
sRGBTexture: 1
linearTexture: 0
fadeOut: 0
borderMipMap: 0
mipMapsPreserveCoverage: 0
alphaTestReferenceValue: 0.5
mipMapFadeDistanceStart: 1
mipMapFadeDistanceEnd: 3
bumpmap:
convertToNormalMap: 0
externalNormalMap: 0
heightScale: 0.25
normalMapFilter: 0
flipGreenChannel: 0
isReadable: 0
streamingMipmaps: 0
streamingMipmapsPriority: 0
vTOnly: 0
ignoreMipmapLimit: 0
grayScaleToAlpha: 0
generateCubemap: 6
cubemapConvolution: 0
seamlessCubemap: 0
textureFormat: 1
maxTextureSize: 2048
textureSettings:
serializedVersion: 2
filterMode: 1
aniso: 1
mipBias: 0
wrapU: 1
wrapV: 1
wrapW: 1
nPOTScale: 0
lightmap: 0
compressionQuality: 50
spriteMode: 2
spriteExtrude: 1
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
flipbookRows: 1
flipbookColumns: 1
maxTextureSizeSet: 0
compressionQualitySet: 0
textureFormatSet: 0
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Standalone
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: WebGL
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
spriteSheet:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: Spruce_1_0
rect:
serializedVersion: 2
x: 49
y: 0
width: 925
height: 1536
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline: []
physicsShape: []
tessellationDetail: -1
bones: []
spriteID: eb3d1338ad9e73470800000000000000
internalID: 8374419156831949758
vertices: []
indices:
edges: []
weights: []
outline: []
customData:
physicsShape: []
bones: []
spriteID:
internalID: 0
vertices: []
indices:
edges: []
weights: []
secondaryTextures: []
spriteCustomMetadata:
entries: []
nameFileIdTable:
Spruce_1_0: 8374419156831949758
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:
assetBundleName:
assetBundleVariant:

View File

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 681 KiB

View File

@ -1,10 +1,10 @@
fileFormatVersion: 2
guid: 7f76a84576351334b8517b4cd5666786
guid: 4db2fbc7e829aec46b75cceb207881b9
TextureImporter:
internalIDToNameTable:
- first:
213: -2413806693520163455
second: Circle
213: -3550973283731103874
second: tamagoching_0
externalObjects: {}
serializedVersion: 13
mipmaps:
@ -51,12 +51,12 @@ TextureImporter:
spriteMeshType: 1
alignment: 0
spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 256
spritePixelsToUnits: 100
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1
alphaIsTransparency: 1
spriteTessellationDetail: 0
spriteTessellationDetail: -1
textureType: 8
textureShape: 1
singleChannelComponent: 0
@ -68,7 +68,7 @@ TextureImporter:
ignorePngGamma: 0
applyGammaDecoding: 0
swizzle: 50462976
cookieLightType: 1
cookieLightType: 0
platformSettings:
- serializedVersion: 4
buildTarget: DefaultTexturePlatform
@ -96,32 +96,6 @@ TextureImporter:
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: Android
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: iOS
maxTextureSize: 2048
resizeAlgorithm: 0
textureFormat: -1
textureCompression: 1
compressionQuality: 50
crunchedCompression: 0
allowsAlphaSplitting: 0
overridden: 0
ignorePlatformSupport: 0
androidETC2FallbackOverride: 0
forceMaximumCompressionQuality_BC6H_BC7: 0
- serializedVersion: 4
buildTarget: WebGL
maxTextureSize: 2048
@ -139,96 +113,73 @@ TextureImporter:
serializedVersion: 2
sprites:
- serializedVersion: 2
name: Circle
name: tamagoching_0
rect:
serializedVersion: 2
x: 0
y: 0
width: 256
height: 256
x: 160
y: 112
width: 690
height: 880
alignment: 0
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
customData:
outline:
- - {x: 33, y: 128}
- {x: -33, y: 128}
- {x: -95, y: 95}
- {x: -128, y: 33}
- {x: -128, y: -33}
- {x: -95, y: -95}
- {x: -33, y: -128}
- {x: 33, y: -128}
- {x: 95, y: -95}
- {x: 128, y: -33}
- {x: 128, y: 33}
- {x: 95, y: 95}
outline: []
physicsShape:
- - {x: 0, y: 128}
- {x: -39, y: 121}
- {x: -75, y: 103}
- {x: -103, y: 75}
- {x: -121, y: 39}
- {x: -128, y: 0}
- {x: -121, y: -39}
- {x: -103, y: -75}
- {x: -75, y: -103}
- {x: -39, y: -121}
- {x: 0, y: -128}
- {x: 39, y: -121}
- {x: 75, y: -103}
- {x: 103, y: -75}
- {x: 121, y: -39}
- {x: 128, y: 0}
- {x: 121, y: 39}
- {x: 103, y: 75}
- {x: 75, y: 103}
- {x: 39, y: 121}
- - {x: 331, y: -211}
- {x: 344, y: -128}
- {x: 342, y: -49}
- {x: 335, y: 2}
- {x: 322, y: 61}
- {x: 309, y: 108}
- {x: 286, y: 172}
- {x: 257, y: 239}
- {x: 222, y: 300}
- {x: 188, y: 349}
- {x: 131, y: 405}
- {x: 79, y: 432}
- {x: 30, y: 440}
- {x: -11, y: 435}
- {x: -46, y: 427}
- {x: -92, y: 402}
- {x: -117, y: 383}
- {x: -145, y: 357}
- {x: -173, y: 326}
- {x: -197, y: 296}
- {x: -230, y: 247}
- {x: -263, y: 189}
- {x: -286, y: 141}
- {x: -313, y: 72}
- {x: -330, y: 12}
- {x: -339, y: -40}
- {x: -343, y: -71}
- {x: -344, y: -120}
- {x: -338, y: -179}
- {x: -320, y: -247}
- {x: -296, y: -292}
- {x: -262, y: -336}
- {x: -216, y: -378}
- {x: -137, y: -418}
- {x: -61, y: -435}
- {x: -6, y: -438}
- {x: 42, y: -437}
- {x: 129, y: -421}
- {x: 194, y: -388}
- {x: 254, y: -342}
- {x: 296, y: -288}
tessellationDetail: 0
bones: []
spriteID: 18d3544e99f608ed0800000000000000
internalID: -2413806693520163455
spriteID: e7f1e40cc9868bec0800000000000000
internalID: -3550973283731103874
vertices: []
indices:
edges: []
weights: []
outline:
- - {x: 33, y: 128}
- {x: -33, y: 128}
- {x: -95, y: 95}
- {x: -128, y: 33}
- {x: -128, y: -33}
- {x: -95, y: -95}
- {x: -33, y: -128}
- {x: 33, y: -128}
- {x: 95, y: -95}
- {x: 128, y: -33}
- {x: 128, y: 33}
- {x: 95, y: 95}
outline: []
customData:
physicsShape:
- - {x: 0, y: 128}
- {x: -39, y: 121}
- {x: -75, y: 103}
- {x: -103, y: 75}
- {x: -121, y: 39}
- {x: -128, y: 0}
- {x: -121, y: -39}
- {x: -103, y: -75}
- {x: -75, y: -103}
- {x: -39, y: -121}
- {x: 0, y: -128}
- {x: 39, y: -121}
- {x: 75, y: -103}
- {x: 103, y: -75}
- {x: 121, y: -39}
- {x: 128, y: 0}
- {x: 121, y: 39}
- {x: 103, y: 75}
- {x: 75, y: 103}
- {x: 39, y: 121}
physicsShape: []
bones: []
spriteID: 5e97eb03825dee720800000000000000
spriteID: 2dd18a7bed78e344490857cbddbf4ecc
internalID: 0
vertices: []
indices:
@ -238,7 +189,7 @@ TextureImporter:
spriteCustomMetadata:
entries: []
nameFileIdTable:
Circle: -2413806693520163455
tamagoching_0: -3550973283731103874
mipmapLimitGroupName:
pSDRemoveMatte: 0
userData:

File diff suppressed because one or more lines are too long

View File

@ -3,12 +3,12 @@
--- !u!19 &1
Physics2DSettings:
m_ObjectHideFlags: 0
serializedVersion: 5
serializedVersion: 6
m_Gravity: {x: 0, y: -9.81}
m_DefaultMaterial: {fileID: 0}
m_VelocityIterations: 8
m_PositionIterations: 3
m_VelocityThreshold: 1
m_BounceThreshold: 1
m_MaxLinearCorrection: 0.2
m_MaxAngularCorrection: 8
m_MaxTranslationSpeed: 100
@ -19,6 +19,7 @@ Physics2DSettings:
m_LinearSleepTolerance: 0.01
m_AngularSleepTolerance: 2
m_DefaultContactOffset: 0.01
m_ContactThreshold: 0
m_JobOptions:
serializedVersion: 2
useMultithreading: 0
@ -39,18 +40,17 @@ Physics2DSettings:
m_IslandSolverBodiesPerJob: 50
m_IslandSolverContactsPerJob: 50
m_SimulationMode: 0
m_SimulationLayers:
serializedVersion: 2
m_Bits: 4294967295
m_MaxSubStepCount: 4
m_MinSubStepFPS: 30
m_UseSubStepping: 0
m_UseSubStepContacts: 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
m_GizmoOptions: 10
m_LayerCollisionMatrix: f7fffffff7fffffff7ffffffc0fffffff7fffffff7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff

View File

@ -141,8 +141,7 @@ PlayerSettings:
visionOSBundleVersion: 1.0
tvOSBundleVersion: 1.0
bundleVersion: 1.0
preloadedAssets:
- {fileID: -944628639613478452, guid: 2bcd2660ca9b64942af0de543d8d7100, type: 3}
preloadedAssets: []
metroInputSource: 0
wsaTransparentSwapchain: 0
m_HolographicPauseOnTrackingLoss: 1

View File

@ -11,7 +11,7 @@ TagManager:
- Default
- TransparentFX
- Ignore Raycast
-
- No Collision
- Water
- UI
-
@ -47,9 +47,15 @@ TagManager:
- name: Background details
uniqueID: 885684001
locked: 0
- name: Level Details
uniqueID: 1712314021
locked: 0
- name: Default
uniqueID: 0
locked: 0
- name: Equipment
uniqueID: 824449243
locked: 0
- name: Foreground
uniqueID: 981438795
locked: 0