лед и шары

This commit is contained in:
savilokirill@gmail.com 2025-11-14 02:06:26 +03:00
parent ba1571c9ac
commit 20b916d0e1
471 changed files with 8024 additions and 10334 deletions

View File

@ -46,6 +46,7 @@
<Analyzer Include="D:\UNITY\6000.2.11f1\Editor\Data\Tools\Unity.SourceGenerators\Unity.UIToolkit.SourceGenerator.dll" />
</ItemGroup>
<ItemGroup>
<Compile Include="Assets\Scripts\RollingHazard.cs" />
<Compile Include="Assets\TextMesh Pro\Examples &amp; Extras\Scripts\TMP_TextEventHandler.cs" />
<Compile Include="Assets\TextMesh Pro\Examples &amp; Extras\Scripts\EnvMapAnimator.cs" />
<Compile Include="Assets\TextMesh Pro\Examples &amp; Extras\Scripts\TMP_TextSelector_A.cs" />
@ -90,6 +91,7 @@
<Compile Include="Assets\TextMesh Pro\Examples &amp; Extras\Scripts\TextMeshProFloatingText.cs" />
<Compile Include="Assets\Scripts\MovingPlatform.cs" />
<Compile Include="Assets\Scripts\TrailController.cs" />
<Compile Include="Assets\Scripts\TriggerPlatform.cs" />
<None Include="Library\PackageCache\com.unity.ai.navigation@5218e4bf7edc\ValidationExceptions.json" />
<None Include="D:\UNITY\6000.2.11f1\Editor\Data\Resources\PackageManager\BuiltInPackages\com.unity.modules.subsystems\package.json" />
<None Include="Library\PackageCache\com.unity.render-pipelines.universal@35ca8d108413\package.json" />

File diff suppressed because it is too large Load Diff

View File

@ -4,16 +4,20 @@ public class BallController : MonoBehaviour
{
[Header("Настройки Движения")]
[SerializeField] private float maxSpeed = 15f; // Максимальная скорость на земле
[SerializeField] private float accelerationRate = 200f; // Как быстро шарик разгоняется
[SerializeField] private float defaultAcceleration = 200f; // Как быстро шарик разгоняется
[SerializeField] private float defaultDeceleration = 10f; // трение
[SerializeField] private float airControlSpeed = 5f; // Скорость управления в прыжке
[SerializeField] private float jumpForce = 7f; // Сила прыжка
[SerializeField] private float trampolineBounceForce = 1.5f; // Множитель для отскока от батута
[SerializeField] private GameObject gameOverPanel;
[Header("Настройки Льда")]
[SerializeField] private float iceAcceleration = 50f;
[SerializeField] private float iceDeceleration = 0.5f;
[Header("Настройки Контроля")]
[Tooltip("Сила торможения/трения. Применяется, когда нет ввода.")]
[SerializeField] private float decelerationRate = 5f; // Сила, замедляющая шарик (трение)
[SerializeField] private float groundCheckDistance = 0.1f; // Дистанция для проверки земли
private Rigidbody rb;
@ -21,6 +25,10 @@ public class BallController : MonoBehaviour
private float sphereRadius;
private bool isDead = false;
// Внутренние переменные для хранения текущих параметров
private float currentAcceleration;
private float currentDeceleration;
// Переменные для считывания ввода
private float moveX;
private float moveZ;
@ -56,11 +64,23 @@ public class BallController : MonoBehaviour
{
isGrounded = false;
Vector3 origin = transform.position;
if (Physics.Raycast(origin, -Vector3.up, out RaycastHit hit, sphereRadius + groundCheckDistance))
{
if (hit.normal.y > 0.7f)
{
isGrounded = true;
if (hit.collider.CompareTag("Ice"))
{
currentAcceleration = iceAcceleration;
currentDeceleration = iceDeceleration;
}
else
{
currentAcceleration = defaultAcceleration;
currentDeceleration = defaultDeceleration;
}
}
}
}
@ -96,41 +116,38 @@ public class BallController : MonoBehaviour
private void ApplyAcceleration()
{
Vector3 currentVel = rb.linearVelocity;
Vector3 currentVel = rb.linearVelocity;
// 1. Ускорение по X (A/D)
// Используем currentAcceleration
if (Mathf.Abs(moveX) > 0.01f)
{
if (Mathf.Abs(currentVel.x) < maxSpeed)
{
rb.AddForce(new Vector3(moveX, 0, 0) * accelerationRate, ForceMode.Acceleration);
rb.AddForce(new Vector3(moveX, 0, 0) * currentAcceleration, ForceMode.Acceleration);
}
}
// 2. Ускорение по Z (W/S)
if (Mathf.Abs(moveZ) > 0.01f)
{
if (Mathf.Abs(currentVel.z) < maxSpeed)
{
rb.AddForce(new Vector3(0, 0, moveZ) * accelerationRate, ForceMode.Acceleration);
rb.AddForce(new Vector3(0, 0, moveZ) * currentAcceleration, ForceMode.Acceleration);
}
}
}
private void ApplyDeceleration()
{
// Используем currentDeceleration
Vector3 horizontalVel = new Vector3(rb.linearVelocity.x, 0, rb.linearVelocity.z);
// Применяем силу, противоположную скорости (имитация трения)
if (horizontalVel.sqrMagnitude > 0.01f)
{
// Направление силы, противоположное скорости
Vector3 frictionForce = -horizontalVel.normalized * decelerationRate;
Vector3 frictionForce = -horizontalVel.normalized * currentDeceleration;
rb.AddForce(frictionForce, ForceMode.Acceleration);
}
else
{
// Если скорость очень низка, останавливаем горизонтальное движение, чтобы избежать "дрейфа"
rb.linearVelocity = new Vector3(0, rb.linearVelocity.y, 0);
}
}
@ -181,21 +198,18 @@ public class BallController : MonoBehaviour
{
if (isDead) return;
isDead = true;
// 1. Останавливаем шарик
if (rb != null)
{
rb.linearVelocity = Vector3.zero; // Используем linearVelocity как в вашем коде
rb.isKinematic = true; // Отключаем физику
rb.linearVelocity = Vector3.zero;
rb.isKinematic = true;
}
// 2. Показываем меню
if (gameOverPanel != null)
{
gameOverPanel.SetActive(true);
}
// 3. Останавливаем время (опционально, но рекомендуется для меню)
Time.timeScale = 0f;
}
}

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More