7 Commits
Author SHA1 Message Date
MrTorex d51527b7f3 это спермаггедон 2025-11-28 10:47:28 +03:00
MrTorex d14f9c2a9f анус рвётся не по-детски 2025-11-28 09:45:49 +03:00
MrTorex 4b6909fe84 Допил наклонов (они такое себе)
Хуже, чем были раньше, но лучше, чем ничего. Плавность переходов имеется, и на том спасибо
2025-11-28 01:15:44 +03:00
MrTorex 766609489d Я ненавижу наклоны (не прорвёмся) 2025-11-28 00:51:20 +03:00
MrTorex d10d2cdca6 прорвёмся (добавлен walljump) 2025-11-27 21:36:19 +03:00
MrTorex 01d3b0adec чел не липнет к воздуху 2025-11-27 21:10:23 +03:00
MrTorex b271042137 инишиал титан падать второй мувмент (но пока очень говно) 2025-11-27 20:37:16 +03:00
9 changed files with 417 additions and 1539 deletions

No files matched your search

@@ -23,17 +23,11 @@ namespace Code.Configs
slideDuration = 0.8f, // Длительность слайда в секундах slideDuration = 0.8f, // Длительность слайда в секундах
slideCooldown = 1.5f; // Время перезарядки слайда в секундах slideCooldown = 1.5f; // Время перезарядки слайда в секундах
// Залазание на стены
public float
wallClimbSpeedFactor = 0.8f, // Коэффициент преобразования горизонтальной скорости в вертикальную при залазании на стену
minWallClimbSpeed = 9f, // Минимальная горизонтальная скорость для начала залазания на стену
wallDetectionAngleThreshold = 80f; // Максимальный угол (в градусах) от вертикали, при котором поверхность считается "стеной"
// Наклон при залазании на стены // Наклон при залазании на стены
public float public float
maxWallLeanAngle = 45f, // Максимальный угол наклона от стены (в градусах) leanAngle = 25f,
wallLeanSharpness = 50f, // Скорость наклона/выпрямления (чем выше — тем резче) leanThreshold = 0.3f,
wallLeanHeightScale = 0.1f; // Множитель: на сколько метров подъёма = 1 единица "наклона" leanSmoothSpeed = 10f;
// Гравитация // Гравитация
public Vector3 gravity = new(0f, -30f, 0f); // Вектор, отвечающий за применение гравитации public Vector3 gravity = new(0f, -30f, 0f); // Вектор, отвечающий за применение гравитации
@@ -1,147 +1,78 @@
using UnityEngine; using UnityEngine;
using KinematicCharacterController;
namespace Code.Gameplay.Character.Controller.Abilities namespace Code.Gameplay.Character.Controller.Abilities
{ {
/*
* Механика наклона персонажа при контакте со стеной
* Управляет визуальным наклоном модели в зависимости от высоты подъёма по стене
*/
public class WallLeanMechanic public class WallLeanMechanic
{ {
private readonly float _maxLeanAngle; private readonly float _leanAngle;
private readonly float _leanSharpness; private readonly float _threshold;
private readonly float _heightScale; private readonly float _smoothSpeed;
private Transform _characterTransform; private Transform _model;
private Vector3 _lastWallNormal;
private float _lastWallContactHeight;
private float _leanFactor;
private float _leanSign;
private Vector3 _leanDirection;
private Vector3 _lastWallContactPoint; public WallLeanMechanic(
private bool _isLeaningOnWall; float leanAngle,
private const float WallProximityThreshold = 0.6f; float threshold,
float smoothSpeed)
public WallLeanMechanic(float maxLeanAngle, float leanSharpness, float heightScale)
{ {
_maxLeanAngle = maxLeanAngle; _leanAngle = leanAngle;
_leanSharpness = leanSharpness; _threshold = threshold;
_heightScale = heightScale; _smoothSpeed = smoothSpeed;
} }
// Назначаем трансформ визуальной модели один раз public void SetModel(Transform model) => _model = model;
public void SetCharacterTransform(Transform transform)
public void Update(bool isWallRunning, Vector3 wallNormal, Vector3 characterForward)
{ {
_characterTransform = transform; if (!_model)
}
// Вызывается из OnMovementHit
public void OnWallContact(KinematicCharacterMotor motor, Vector3 wallNormal, float contactHeight)
{
// Только если это действительно стена (не пол/потолок)
var dotWithUp = Vector3.Dot(wallNormal, motor.CharacterUp);
if (Mathf.Abs(dotWithUp) > 0.7f) // ~45°, можно настроить
return;
_lastWallNormal = wallNormal;
_lastWallContactHeight = contactHeight;
_lastWallContactPoint = motor.TransientPosition;
// Пересчитываем направление наклона
_leanDirection = -_lastWallNormal;
_leanDirection = Vector3.ProjectOnPlane(_leanDirection, motor.CharacterUp).normalized;
_leanSign = 1;
// what the fuck
if (_leanDirection.x != 0)
{ {
switch (_leanDirection.x) _model.localRotation = Quaternion.identity;
{
case -1 or 1 when motor.CharacterRight.x > 0.1f:
_leanSign = -1;
break;
case -1 or 1 when Mathf.Abs(motor.CharacterRight.x) < 0.1f:
_leanDirection = new Vector3(0, 0, -1);
break;
}
}
else
{
switch (_leanDirection.z)
{
case 1 when Mathf.Abs(motor.CharacterRight.z) < 0.1f:
_leanSign = -1;
break;
case -1 when motor.CharacterRight.z < -0.1f:
case 1 when motor.CharacterRight.z > 0.1f:
_leanDirection = new Vector3(-1, 0, 0);
break;
case -1 when motor.CharacterRight.z > 0.1f:
case 1 when motor.CharacterRight.z < -0.1f:
_leanDirection = new Vector3(1, 0, 0);
break;
}
}
_isLeaningOnWall = true;
}
// Обновление каждый кадр
public void UpdateLean(KinematicCharacterMotor motor, float deltaTime)
{
if (!_characterTransform) return;
var currentPosition = motor.TransientPosition;
var isStillNearWall = false;
if (_isLeaningOnWall && _lastWallNormal != Vector3.zero)
{
var toWall = currentPosition - _lastWallContactPoint;
var distanceToWallPlane = Mathf.Abs(Vector3.Dot(toWall, _lastWallNormal));
isStillNearWall = distanceToWallPlane <= WallProximityThreshold;
}
if (_isLeaningOnWall)
{
var isBelowContactHeight = currentPosition.y < _lastWallContactHeight;
if (!isStillNearWall || isBelowContactHeight)
{
_isLeaningOnWall = false;
}
else
{
var heightDelta = currentPosition.y - _lastWallContactHeight;
var targetLeanFactor = Mathf.Clamp01(heightDelta * _heightScale);
_leanFactor = Mathf.Lerp(_leanFactor, targetLeanFactor, 1f - Mathf.Exp(-_leanSharpness * deltaTime));
}
}
if (!_isLeaningOnWall)
{
_leanFactor = Mathf.Lerp(_leanFactor, 0f, 1f - Mathf.Exp(-_leanSharpness * deltaTime));
}
ApplyLeanRotation(motor);
}
private void ApplyLeanRotation(KinematicCharacterMotor motor)
{
if (_leanFactor <= 0.01f)
{
_characterTransform.localRotation = Quaternion.identity;
return; return;
} }
if (_leanDirection.sqrMagnitude < 0.01f) return; var targetRotation = Quaternion.identity;
var leanAngle = _leanSign * _leanFactor * _maxLeanAngle; if (isWallRunning)
var leanAxis = Vector3.Cross(motor.CharacterUp, _leanDirection); {
var leanRotation = Quaternion.AngleAxis(leanAngle, leanAxis); var n = new Vector3(wallNormal.x, 0f, wallNormal.z).normalized;
_characterTransform.localRotation = leanRotation; if (n.sqrMagnitude < 0.001f) n = Vector3.forward;
var bodyRight = Vector3.Cross(Vector3.up, characterForward).normalized;
var side = Vector3.Dot(n, bodyRight);
var front = Vector3.Dot(n, characterForward);
var axis = Vector3.right;
var angle = 0f;
if (side > _threshold)
{
axis = Vector3.forward;
angle = -_leanAngle;
}
else if (side < -_threshold)
{
axis = Vector3.forward;
angle = _leanAngle;
}
else if (front > _threshold)
{
axis = Vector3.right;
angle = -_leanAngle;
}
else if (front < -_threshold)
{
axis = Vector3.right;
angle = _leanAngle;
}
targetRotation = Quaternion.AngleAxis(angle, axis);
}
_model.localRotation = Quaternion.Slerp(
_model.localRotation,
targetRotation,
1f - Mathf.Exp(-_smoothSpeed * Time.deltaTime)
);
} }
} }
} }
@@ -0,0 +1,256 @@
using Code.Gameplay.Character.Controller.Input;
using Code.Gameplay.Character.Core;
using KinematicCharacterController;
using UnityEngine;
namespace Code.Gameplay.Character.Controller.Abilities
{
public class WallRunningMechanic
{
public float MaxWallRunTime = 1.75f;
public float WallRunSpeed = 8.0f;
public float WallRunAcceleration = 25.0f;
public float WallRunGravityScale = 0.25f;
public float WallDetachImpulse = 7.0f;
public float WallContactAngleThreshold = 45.0f;
private bool _isWallRunning;
private float _wallRunTimer;
private Vector3 _wallNormal;
private Vector3 _wallTangentRight;
private Vector3 _wallTangentUp;
private Vector3 _wallContactPoint;
private Vector3 _lastMoveInputInWallSpace;
private float _surfaceAngleCos;
private bool _canWallRun;
public float WallContactHeight { get; private set; }
public Vector3 WallRunStartForward { get; private set; }
private KinematicCharacterMotor _motor;
private CharacterInputHandler _inputHandler;
public bool IsWallRunning => _isWallRunning;
public void Initialize(KinematicCharacterMotor motor, CharacterInputHandler inputHandler)
{
_motor = motor;
_inputHandler = inputHandler;
_surfaceAngleCos = Mathf.Cos(Mathf.Deg2Rad * WallContactAngleThreshold);
}
public void Reset()
{
_isWallRunning = false;
_wallRunTimer = 0f;
_wallNormal = Vector3.zero;
}
public void Tick(float deltaTime)
{
if (_isWallRunning)
{
_wallRunTimer += deltaTime;
if (_wallRunTimer > MaxWallRunTime)
{
DetachFromWall(false);
}
}
}
public bool TryStartWallRun(Vector3 hitNormal, Vector3 hitPoint)
{
if (_isWallRunning) return false;
float dotWithUp = Vector3.Dot(hitNormal, _motor.CharacterUp);
bool isWall = Mathf.Abs(dotWithUp) < _surfaceAngleCos;
if (!isWall) return false;
if (_motor.GroundingStatus.IsStableOnGround) return false;
float velocityIntoWall = Vector3.Dot(_motor.Velocity, -hitNormal);
if (velocityIntoWall < 1f) return false;
StartWallRun(hitNormal, hitPoint);
return true;
}
private void StartWallRun(Vector3 wallNormal, Vector3 contactPoint)
{
_isWallRunning = true;
_wallRunTimer = 0f;
_wallNormal = wallNormal.normalized;
_wallContactPoint = contactPoint;
WallContactHeight = contactPoint.y;
//_wallTangentUp = Vector3.ProjectOnPlane(_motor.CharacterUp, _wallNormal).normalized;
if (_wallTangentUp.sqrMagnitude < 0.01f) _wallTangentUp = Vector3.up;
_wallTangentRight = Vector3.Cross(_wallNormal, _wallTangentUp).normalized;
_wallTangentUp = Vector3.Cross(_wallTangentRight, _wallNormal).normalized;
if (Vector3.Dot(_wallTangentUp, Vector3.up) < 0)
_wallTangentUp = -_wallTangentUp;
WallRunStartForward = _motor.CharacterForward;
_motor.ForceUnground();
}
public void HandleWallRun(ref Vector3 currentVelocity, CharacterInputs inputs, float deltaTime)
{
if (!_isWallRunning) return;
if (!IsWallStillPresent()) { DetachFromWall(false); return; }
Vector3 moveInputWorld = _inputHandler.MoveInputVector;
Vector3 moveInWallPlane = Vector3.ProjectOnPlane(moveInputWorld, _wallNormal);
Vector3 wsMove = Vector3.Project(moveInWallPlane, _wallTangentRight);
float ad = inputs.MoveAxisRight;
float sideDot = Vector3.Dot(_wallNormal, _motor.CharacterRight);
if (sideDot < 0)
ad = -ad;
Vector3 adMove = _wallTangentUp * (-ad);
Vector3 finalMove = wsMove + adMove;
finalMove = finalMove.normalized * moveInputWorld.magnitude;
Vector3 targetVelocity = finalMove * WallRunSpeed;
currentVelocity = Vector3.Lerp(
currentVelocity,
targetVelocity,
1f - Mathf.Exp(-WallRunAcceleration * deltaTime)
);
currentVelocity += Physics.gravity * (WallRunGravityScale * deltaTime);
float distanceToWall = Vector3.Dot(_motor.TransientPosition - _wallContactPoint, _wallNormal);
if (Mathf.Abs(distanceToWall) > 0.8f)
{
DetachFromWall(false);
return;
}
if (inputs.JumpPressed)
{
DetachFromWall(true);
}
}
private bool IsWallStillPresent()
{
if (_motor == null) return false;
Vector3 characterCenter = _motor.TransientPosition;
Vector3 characterForward = _motor.CharacterForward;
Vector3 characterRight = _motor.CharacterRight;
Vector3 characterUp = _motor.CharacterUp;
float checkDistance = 0.45f;
Vector3 rayOrigin = characterCenter + characterUp * 0.2f;
Vector3 rayDir = -_wallNormal;
Vector3[] offsets = {
Vector3.zero,
characterUp * 0.3f,
-characterUp * 0.3f,
characterRight * 0.2f,
-characterRight * 0.2f
};
foreach (var offset in offsets)
{
if (Physics.Raycast(rayOrigin + offset, rayDir, out RaycastHit hit, checkDistance,
_motor.CollidableLayers, QueryTriggerInteraction.Ignore))
{
float dotWithUp = Mathf.Abs(Vector3.Dot(hit.normal, characterUp));
if (dotWithUp < _surfaceAngleCos)
{
_wallNormal = hit.normal.normalized;
_wallContactPoint = hit.point;
/*_wallTangentUp = Vector3.ProjectOnPlane(_motor.CharacterUp, _wallNormal).normalized;
if (_wallTangentUp.sqrMagnitude < 0.01f) _wallTangentUp = Vector3.up;
_wallTangentRight = Vector3.Cross(_wallNormal, _wallTangentUp).normalized;
*/
return true;
}
}
}
return false;
}
public void DetachFromWall(bool withImpulse)
{
if (!_isWallRunning) return;
_isWallRunning = false;
if (withImpulse && _motor != null)
{
Vector3 detachImpulse = -_wallNormal * WallDetachImpulse;
_motor.BaseVelocity += detachImpulse;
}
}
public Vector3 GetWallNormal() => _wallNormal;
public bool TryGetWallTangents(out Vector3 up, out Vector3 right)
{
if (!_isWallRunning)
{
up = right = Vector3.zero;
return false;
}
up = _wallTangentUp;
right = _wallTangentRight;
return true;
}
public bool CanWallRun()
{
return !_isWallRunning && !_motor.GroundingStatus.IsStableOnGround;
}
public void PerformWallJump(CharacterInputs inputs, Quaternion cameraRotation)
{
if (!_isWallRunning || _motor == null) return;
_isWallRunning = false;
Vector3 wallAway = _wallNormal;
Vector3 wallUp = _wallTangentUp;
Vector3 playerForward = cameraRotation * Vector3.forward;
Vector3 forwardInWallPlane = Vector3.ProjectOnPlane(playerForward, _wallNormal).normalized;
if (forwardInWallPlane.sqrMagnitude < 0.01f) forwardInWallPlane = _wallTangentRight;
Vector3 jumpDirection =
forwardInWallPlane * 0.2f +
wallAway * 0.4f +
wallUp * 0.4f;
jumpDirection = jumpDirection.normalized;
float wallJumpForce = WallDetachImpulse * 2f;
Vector3 jumpImpulse = jumpDirection * wallJumpForce;
_motor.BaseVelocity += jumpImpulse;
_motor.SetPosition(_motor.TransientPosition + wallAway * 0.07f);
if (_motor.CharacterController is CustomCharacterController controller)
{
controller.BlockAbilities(0.12f);
}
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 4bef67aa9cf14753a63ea07eecc5ff67
timeCreated: 1764263348
@@ -28,49 +28,23 @@ namespace Code.Gameplay.Character.Controller
// Подсистемы // Подсистемы
private CharacterInputHandler _inputHandler; private CharacterInputHandler _inputHandler;
private SlideMechanic _slideMechanic; private SlideMechanic _slideMechanic;
private WallClimbMechanic _wallClimbMechanic; // private WallClimbMechanic _wallClimbMechanic;
private WallRunningMechanic _wallRunningMechanic;
private WallLeanMechanic _wallLeanMechanic; private WallLeanMechanic _wallLeanMechanic;
private GroundMovementSystem _groundMovement; private GroundMovementSystem _groundMovement;
private AirMovementSystem _airMovement; private AirMovementSystem _airMovement;
public bool IsSliding => _slideMechanic.IsSliding; public bool IsSliding => _slideMechanic.IsSliding;
public bool IsWallRunning => _wallRunningMechanic.IsWallRunning;
private float abilityBlockTimer; private float abilityBlockTimer;
private bool isAbilitiesBlocked; private bool isAbilitiesBlocked;
private CharacterInputs _lastInputs;
public void SetPosition(Vector3 position) => motor.SetPosition(position); public void SetPosition(Vector3 position) => motor.SetPosition(position);
public void SetRotation(Quaternion rotation) => motor.SetRotation(rotation); public void SetRotation(Quaternion rotation) => motor.SetRotation(rotation);
// Инициализация контроллера
// private void Awake()
// {
// // Инициализация подсистем с параметрами из конфига
// _inputHandler = new CharacterInputHandler(
// _characterConfig.sprintAngleThreshold
// );
// _slideMechanic = new SlideMechanic(
// _characterConfig.slideSpeed,
// _characterConfig.slideDuration,
// _characterConfig.slideCooldown
// );
// _wallClimbMechanic = new WallClimbMechanic(
// _characterConfig.wallClimbSpeedFactor,
// _characterConfig.minWallClimbSpeed,
// _characterConfig.wallDetectionAngleThreshold
// );
// _wallLeanMechanic = new WallLeanMechanic(
// _characterConfig.maxWallLeanAngle,
// _characterConfig.wallLeanSharpness,
// _characterConfig.wallLeanHeightScale
// );
// _groundMovement = new GroundMovementSystem(
// _characterConfig.maxStableMoveSpeed,
// _characterConfig.sprintMoveSpeed,
// _characterConfig.stableMovementSharpness,
// _characterConfig.jumpSpeed
// );
// _airMovement = new AirMovementSystem(_characterConfig.gravity);
// }
[Inject] [Inject]
private void Construct(CharacterConfig characterConfig) private void Construct(CharacterConfig characterConfig)
{ {
@@ -84,16 +58,25 @@ namespace Code.Gameplay.Character.Controller
_characterConfig.slideDuration, _characterConfig.slideDuration,
_characterConfig.slideCooldown _characterConfig.slideCooldown
); );
_wallClimbMechanic = new WallClimbMechanic( // _wallClimbMechanic = new WallClimbMechanic(
_characterConfig.wallClimbSpeedFactor, // _characterConfig.wallClimbSpeedFactor,
_characterConfig.minWallClimbSpeed, // _characterConfig.minWallClimbSpeed,
_characterConfig.wallDetectionAngleThreshold // _characterConfig.wallDetectionAngleThreshold
); // );
_wallRunningMechanic = new WallRunningMechanic();
// Настройка параметров WallRunningMechanic (можно вынести в конфиг позже)
_wallRunningMechanic.MaxWallRunTime = 5f;
_wallRunningMechanic.WallRunSpeed = 15.0f;
_wallRunningMechanic.WallRunAcceleration = 25.0f;
_wallRunningMechanic.WallRunGravityScale = 0.25f;
_wallRunningMechanic.WallDetachImpulse = 7.0f;
_wallRunningMechanic.WallContactAngleThreshold = 45.0f;
_wallLeanMechanic = new WallLeanMechanic( _wallLeanMechanic = new WallLeanMechanic(
_characterConfig.maxWallLeanAngle, _characterConfig.leanAngle,
_characterConfig.wallLeanSharpness, _characterConfig.leanThreshold,
_characterConfig.wallLeanHeightScale _characterConfig.leanSmoothSpeed
); );
_groundMovement = new GroundMovementSystem( _groundMovement = new GroundMovementSystem(
_characterConfig.maxStableMoveSpeed, _characterConfig.maxStableMoveSpeed,
_characterConfig.sprintMoveSpeed, _characterConfig.sprintMoveSpeed,
@@ -106,31 +89,24 @@ namespace Code.Gameplay.Character.Controller
motor.CharacterController = this; // Регистрация этого контроллера в движке motor.CharacterController = this; // Регистрация этого контроллера в движке
_inputHandler.FirstPersonCameraRotation = _inputHandler.FirstPersonCameraRotation =
motor.Transform.rotation; // Начальное вращение совпадает с персонажемс motor.Transform.rotation; // Начальное вращение совпадает с персонажемс
_wallLeanMechanic.SetCharacterTransform(characterTransform); _wallLeanMechanic.SetModel(characterTransform);
_wallRunningMechanic.Initialize(motor, _inputHandler);
} }
// Текущий режим камеры для адаптации поведения // Текущий режим камеры для адаптации поведения
private CameraMode _currentCameraMode = CameraMode.FirstPerson; private CameraMode _currentCameraMode = CameraMode.FirstPerson;
// Инициализация контроллера
// private void Start()
// {
// motor.CharacterController = this; // Регистрация этого контроллера в движке
// _inputHandler.FirstPersonCameraRotation =
// motor.Transform.rotation; // Начальное вращение совпадает с персонажемс
// _wallLeanMechanic.SetCharacterTransform(characterTransform);
// }
// Обработка и преобразование входных данных от персонажа
public void SetInputs(ref CharacterInputs inputs) public void SetInputs(ref CharacterInputs inputs)
{ {
// Обновляем таймер перезарядки слайда _lastInputs = inputs;
// Обновляем таймеры механик
_slideMechanic.TickCooldown(Time.deltaTime); _slideMechanic.TickCooldown(Time.deltaTime);
_wallClimbMechanic.TickCooldown(Time.deltaTime); // _wallClimbMechanic.TickCooldown(Time.deltaTime);
_wallRunningMechanic.Tick(Time.deltaTime);
// Если активен слайд - игнорируем весь остальной ввод // Если активен слайд - игнорируем весь остальной ввод
if (_slideMechanic.IsSliding) if (_slideMechanic.IsSliding)
{ {
// Во время слайда не обрабатываем движение, прыжки и спринт
_inputHandler.MoveInputVector = Vector3.zero; _inputHandler.MoveInputVector = Vector3.zero;
_inputHandler.LookInputVector = Vector3.one; _inputHandler.LookInputVector = Vector3.one;
_inputHandler.IsSprinting = false; _inputHandler.IsSprinting = false;
@@ -138,7 +114,6 @@ namespace Code.Gameplay.Character.Controller
return; return;
} }
// Сохраняем текущий режим камеры
_currentCameraMode = inputs.CameraMode; _currentCameraMode = inputs.CameraMode;
if (isAbilitiesBlocked) if (isAbilitiesBlocked)
@@ -161,42 +136,33 @@ namespace Code.Gameplay.Character.Controller
// Обработка остального ввода // Обработка остального ввода
_inputHandler.ProcessInputs(ref inputs, motor); _inputHandler.ProcessInputs(ref inputs, motor);
// Передаём запрос прыжка напрямую в систему движения по земле // Передаём запрос прыжка
_groundMovement.RequestJump(inputs.JumpPressed); _groundMovement.RequestJump(inputs.JumpPressed);
} }
// Обновление вращения персонажа на основе входных данных
public void UpdateRotation(ref Quaternion currentRotation, float deltaTime) public void UpdateRotation(ref Quaternion currentRotation, float deltaTime)
{ {
if (_slideMechanic.IsSliding || _wallClimbMechanic.IsClimbingActive) return; if (_slideMechanic.IsSliding) return;
switch (_currentCameraMode) switch (_currentCameraMode)
{ {
// В FirstPerson режиме применяем вращение камеры напрямую к персонажу (только горизонталь)
case CameraMode.FirstPerson when _inputHandler.ShouldApplyCameraRotation: case CameraMode.FirstPerson when _inputHandler.ShouldApplyCameraRotation:
// Немедленно применяем горизонтальное вращение камеры к персонажу
currentRotation = _inputHandler.FirstPersonCameraRotation; currentRotation = _inputHandler.FirstPersonCameraRotation;
break; break;
// В ThirdPerson режиме плавно поворачиваем персонаж в направлении движения
case CameraMode.ThirdPerson: case CameraMode.ThirdPerson:
{ {
// Вращение применяется только если есть направление движения и разрешена резкость вращения
if (_inputHandler.LookInputVector.sqrMagnitude > 0 && _characterConfig.orientationSharpness > 0) if (_inputHandler.LookInputVector.sqrMagnitude > 0 && _characterConfig.orientationSharpness > 0)
{ {
// Плавная интерполяция текущего направления к целевому с экспоненциальным сглаживанием
var smoothedLookInputDirection = Vector3.Slerp( var smoothedLookInputDirection = Vector3.Slerp(
motor.CharacterForward, motor.CharacterForward,
_inputHandler.LookInputVector, _inputHandler.LookInputVector,
1f - Mathf.Exp(-_characterConfig.orientationSharpness * deltaTime) 1f - Mathf.Exp(-_characterConfig.orientationSharpness * deltaTime)
).normalized; ).normalized;
// Установка нового вращения смотря в сглаженном направлении
currentRotation = Quaternion.LookRotation(smoothedLookInputDirection, motor.CharacterUp); currentRotation = Quaternion.LookRotation(smoothedLookInputDirection, motor.CharacterUp);
} }
break; break;
} }
// Заготовка на будущее (если понадобится)
case CameraMode.Static: case CameraMode.Static:
case CameraMode.Cinematic: case CameraMode.Cinematic:
default: default:
@@ -204,38 +170,49 @@ namespace Code.Gameplay.Character.Controller
} }
} }
// Обновление скорости движения персонажа
public void UpdateVelocity(ref Vector3 currentVelocity, float deltaTime) public void UpdateVelocity(ref Vector3 currentVelocity, float deltaTime)
{ {
// Если во время слайда запрошен прыжок — прерываем слайд
if (_slideMechanic.IsSliding && _groundMovement.JumpRequested) if (_slideMechanic.IsSliding && _groundMovement.JumpRequested)
{ {
_slideMechanic.EndSlide(); _slideMechanic.EndSlide();
} }
// Проверяем запрос слайда и запускаем его если можно
if (!_slideMechanic.IsSliding) if (!_slideMechanic.IsSliding)
{ {
_slideMechanic.TryStartSlide(motor, _currentCameraMode, _inputHandler.FirstPersonCameraRotation, _slideMechanic.TryStartSlide(motor, _currentCameraMode, _inputHandler.FirstPersonCameraRotation,
_inputHandler.LookInputVector); _inputHandler.LookInputVector);
} }
// Если активен слайд - обрабатываем отдельно
else else
{ {
_slideMechanic.HandleSlide(ref currentVelocity, deltaTime, motor); _slideMechanic.HandleSlide(ref currentVelocity, deltaTime, motor);
return; return;
} }
// === WALL RUNNING: обработка состояния ===
if (_wallRunningMechanic.IsWallRunning)
{
// 🔄 Передаём актуальные данные для walljump
if (_groundMovement.JumpRequested) // или _lastInputs.JumpPressed — зависит от логики
{
_wallRunningMechanic.PerformWallJump(_lastInputs, _inputHandler.FirstPersonCameraRotation);
_groundMovement.CancelJumpRequest(); // сброс, чтобы не сработало дважды
}
else
{
_wallRunningMechanic.HandleWallRun(ref currentVelocity, _lastInputs, deltaTime);
}
return;
}
// Если персонаж находится на земле // Если персонаж находится на земле
if (motor.GroundingStatus.IsStableOnGround) if (motor.GroundingStatus.IsStableOnGround)
{ {
_groundMovement.UpdateVelocity(ref currentVelocity, _inputHandler, motor, deltaTime); _groundMovement.UpdateVelocity(ref currentVelocity, _inputHandler, motor, deltaTime);
} }
// Если персонаж не находится на земле // Если персонаж не на земле — стандартное воздушное движение
else else
{ {
_airMovement.UpdateVelocity(ref currentVelocity, deltaTime); _airMovement.UpdateVelocity(ref currentVelocity, deltaTime);
// Отменяем прыжок (фикс проблемы с двойным прыжком после приземления)
_groundMovement.CancelJumpRequest(); _groundMovement.CancelJumpRequest();
} }
} }
@@ -246,60 +223,51 @@ namespace Code.Gameplay.Character.Controller
abilityBlockTimer = duration; abilityBlockTimer = duration;
} }
// Метод вызывается перед обновлением персонажа (можно использовать для подготовки)
public void BeforeCharacterUpdate(float deltaTime) public void BeforeCharacterUpdate(float deltaTime)
{ {
} }
// Метод вызывается после обработки столкновения с землей
public void PostGroundingUpdate(float deltaTime) public void PostGroundingUpdate(float deltaTime)
{ {
// Если во время слайда персонаж оторвался от земли - заканчиваем слайд
if (_slideMechanic.IsSliding && !motor.GroundingStatus.IsStableOnGround) if (_slideMechanic.IsSliding && !motor.GroundingStatus.IsStableOnGround)
{ {
_slideMechanic.EndSlide(); _slideMechanic.EndSlide();
} }
if (motor.GroundingStatus.IsStableOnGround)
{
_wallClimbMechanic.ResetWallClimbSession();
}
} }
// Метод вызывается после обновления персонажа
public void AfterCharacterUpdate(float deltaTime) public void AfterCharacterUpdate(float deltaTime)
{ {
_wallLeanMechanic.UpdateLean(motor, deltaTime); _wallLeanMechanic.Update(
_wallRunningMechanic.IsWallRunning,
_wallRunningMechanic.GetWallNormal(),
motor.CharacterForward
);
} }
// Проверка валидности коллайдера для обработки столкновений
public bool IsColliderValidForCollisions(Collider coll) public bool IsColliderValidForCollisions(Collider coll)
{ {
return true; // Все коллайдеры считаются валидными для столкновений return true;
} }
// Обработка столкновения с землей (вызывается при приземлении)
public void OnGroundHit(Collider hitCollider, Vector3 hitNormal, Vector3 hitPoint, public void OnGroundHit(Collider hitCollider, Vector3 hitNormal, Vector3 hitPoint,
ref HitStabilityReport hitStabilityReport) ref HitStabilityReport hitStabilityReport)
{ {
} }
// Обработка столкновения при движении (вызывается при ударе о препятствие)
public void OnMovementHit(Collider hitCollider, Vector3 hitNormal, Vector3 hitPoint, public void OnMovementHit(Collider hitCollider, Vector3 hitNormal, Vector3 hitPoint,
ref HitStabilityReport hitStabilityReport) ref HitStabilityReport hitStabilityReport)
{ {
if (_wallClimbMechanic.TryClimbWall(motor, hitNormal)) if (_wallRunningMechanic.TryStartWallRun(hitNormal, hitPoint))
_wallLeanMechanic.OnWallContact(motor, hitNormal, motor.TransientPosition.y); {
}
} }
// Обработка отчета о стабильности столкновения
public void ProcessHitStabilityReport(Collider hitCollider, Vector3 hitNormal, Vector3 hitPoint, public void ProcessHitStabilityReport(Collider hitCollider, Vector3 hitNormal, Vector3 hitPoint,
Vector3 atCharacterPosition, Vector3 atCharacterPosition,
Quaternion atCharacterRotation, ref HitStabilityReport hitStabilityReport) Quaternion atCharacterRotation, ref HitStabilityReport hitStabilityReport)
{ {
} }
// Обработка дискретных столкновений (для триггеров и специальных коллайдеров)
public void OnDiscreteCollisionDetected(Collider hitCollider) public void OnDiscreteCollisionDetected(Collider hitCollider)
{ {
} }
@@ -119,165 +119,6 @@ NavMeshSettings:
debug: debug:
m_Flags: 0 m_Flags: 0
m_NavMeshData: {fileID: 0} m_NavMeshData: {fileID: 0}
--- !u!1 &167331558
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 167331559}
- component: {fileID: 167331562}
- component: {fileID: 167331561}
- component: {fileID: 167331560}
m_Layer: 0
m_Name: piska
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &167331559
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 167331558}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 387012219}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!65 &167331560
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 167331558}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!23 &167331561
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 167331558}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_ForceMeshLod: -1
m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &167331562
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 167331558}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!1 &387012217
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 387012219}
- component: {fileID: 387012218}
m_Layer: 0
m_Name: SPAWNER
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &387012218
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 387012217}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: e87d9529de45409781ec5bfc356518c7, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Code.Gameplay.Enemies.EnemySpawner
spawnerType: 0
spawnRadius: 40
despawnRadius: 50
--- !u!4 &387012219
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 387012217}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 12, y: 0, z: -20}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 167331559}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &545729161 --- !u!1 &545729161
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -586,8 +427,8 @@ Transform:
m_GameObject: {fileID: 1571744439} m_GameObject: {fileID: 1571744439}
serializedVersion: 2 serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -5, y: 1.5, z: 0} m_LocalPosition: {x: -5, y: 4, z: 0}
m_LocalScale: {x: 10, y: 3, z: 10} m_LocalScale: {x: 10, y: 8, z: 10}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
@@ -623,88 +464,7 @@ Transform:
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1001 &1934438350 --- !u!1 &1855107591
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 1130631191828633318, guid: 0c8c1df07b28ba8f08f3cd5a11eea760, type: 3}
propertyPath: m_NavMeshData
value:
objectReference: {fileID: 23800000, guid: 6f1ce55b920df646b854d678d35d09a4, type: 2}
- target: {fileID: 1308213271791475766, guid: 0c8c1df07b28ba8f08f3cd5a11eea760, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1308213271791475766, guid: 0c8c1df07b28ba8f08f3cd5a11eea760, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1308213271791475766, guid: 0c8c1df07b28ba8f08f3cd5a11eea760, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1308213271791475766, guid: 0c8c1df07b28ba8f08f3cd5a11eea760, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 1308213271791475766, guid: 0c8c1df07b28ba8f08f3cd5a11eea760, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1308213271791475766, guid: 0c8c1df07b28ba8f08f3cd5a11eea760, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1308213271791475766, guid: 0c8c1df07b28ba8f08f3cd5a11eea760, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1308213271791475766, guid: 0c8c1df07b28ba8f08f3cd5a11eea760, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1308213271791475766, guid: 0c8c1df07b28ba8f08f3cd5a11eea760, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 1308213271791475766, guid: 0c8c1df07b28ba8f08f3cd5a11eea760, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3306133932708713102, guid: 0c8c1df07b28ba8f08f3cd5a11eea760, type: 3}
propertyPath: m_NavMeshData
value:
objectReference: {fileID: 23800000, guid: f524a4bcdefb359418e877f5e621c556, type: 2}
- target: {fileID: 5437736419074364002, guid: 0c8c1df07b28ba8f08f3cd5a11eea760, type: 3}
propertyPath: m_NavMeshData
value:
objectReference: {fileID: 23800000, guid: 4fa32adb913d89011b2c821c0f7ab34a, type: 2}
- target: {fileID: 6387110516599626063, guid: 0c8c1df07b28ba8f08f3cd5a11eea760, type: 3}
propertyPath: m_NavMeshData
value:
objectReference: {fileID: 23800000, guid: e66c6c9837e325f1d97bb11152180dea, type: 2}
- target: {fileID: 6739068616842830045, guid: 0c8c1df07b28ba8f08f3cd5a11eea760, type: 3}
propertyPath: m_NavMeshData
value:
objectReference: {fileID: 23800000, guid: ed27e245025adcd688042a61510ceef8, type: 2}
- target: {fileID: 6888186070600339877, guid: 0c8c1df07b28ba8f08f3cd5a11eea760, type: 3}
propertyPath: m_Name
value: NavmeshesHolder
objectReference: {fileID: 0}
- target: {fileID: 8608996506118074756, guid: 0c8c1df07b28ba8f08f3cd5a11eea760, type: 3}
propertyPath: m_NavMeshData
value:
objectReference: {fileID: 23800000, guid: 457659b1adec59296971ba601a56ebe6, type: 2}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 0c8c1df07b28ba8f08f3cd5a11eea760, type: 3}
--- !u!1 &2015489742
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
@@ -712,10 +472,10 @@ GameObject:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
serializedVersion: 6 serializedVersion: 6
m_Component: m_Component:
- component: {fileID: 2015489746} - component: {fileID: 1855107595}
- component: {fileID: 2015489745} - component: {fileID: 1855107594}
- component: {fileID: 2015489744} - component: {fileID: 1855107593}
- component: {fileID: 2015489743} - component: {fileID: 1855107592}
m_Layer: 11 m_Layer: 11
m_Name: Wall (1) m_Name: Wall (1)
m_TagString: Untagged m_TagString: Untagged
@@ -723,13 +483,13 @@ GameObject:
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 2147483647 m_StaticEditorFlags: 2147483647
m_IsActive: 1 m_IsActive: 1
--- !u!65 &2015489743 --- !u!65 &1855107592
BoxCollider: BoxCollider:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2015489742} m_GameObject: {fileID: 1855107591}
m_Material: {fileID: 0} m_Material: {fileID: 0}
m_IncludeLayers: m_IncludeLayers:
serializedVersion: 2 serializedVersion: 2
@@ -744,13 +504,13 @@ BoxCollider:
serializedVersion: 3 serializedVersion: 3
m_Size: {x: 1, y: 1, z: 1} m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0} m_Center: {x: 0, y: 0, z: 0}
--- !u!23 &2015489744 --- !u!23 &1855107593
MeshRenderer: MeshRenderer:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2015489742} m_GameObject: {fileID: 1855107591}
m_Enabled: 1 m_Enabled: 1
m_CastShadows: 1 m_CastShadows: 1
m_ReceiveShadows: 1 m_ReceiveShadows: 1
@@ -769,7 +529,7 @@ MeshRenderer:
m_RenderingLayerMask: 1 m_RenderingLayerMask: 1
m_RendererPriority: 0 m_RendererPriority: 0
m_Materials: m_Materials:
- {fileID: 2100000, guid: b407164ea2464a05a97202efff71afc6, type: 2} - {fileID: 2100000, guid: 46c32c803fa6b354e927b3c37077003f, type: 2}
m_StaticBatchInfo: m_StaticBatchInfo:
firstSubMesh: 0 firstSubMesh: 0
subMeshCount: 0 subMeshCount: 0
@@ -792,136 +552,25 @@ MeshRenderer:
m_SortingLayer: 0 m_SortingLayer: 0
m_SortingOrder: 0 m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0} m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &2015489745 --- !u!33 &1855107594
MeshFilter: MeshFilter:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2015489742} m_GameObject: {fileID: 1855107591}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!4 &2015489746 --- !u!4 &1855107595
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2015489742} m_GameObject: {fileID: 1855107591}
serializedVersion: 2 serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -5, y: 1.06, z: 6.25} m_LocalPosition: {x: -18.99, y: 4, z: 0}
m_LocalScale: {x: 10, y: 2.1908088, z: 3} m_LocalScale: {x: 10, y: 8, z: 10}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &2086618835
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2086618839}
- component: {fileID: 2086618838}
- component: {fileID: 2086618837}
- component: {fileID: 2086618836}
m_Layer: 11
m_Name: Wall (2)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 2147483647
m_IsActive: 1
--- !u!65 &2086618836
BoxCollider:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2086618835}
m_Material: {fileID: 0}
m_IncludeLayers:
serializedVersion: 2
m_Bits: 0
m_ExcludeLayers:
serializedVersion: 2
m_Bits: 0
m_LayerOverridePriority: 0
m_IsTrigger: 0
m_ProvidesContacts: 0
m_Enabled: 1
serializedVersion: 3
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!23 &2086618837
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2086618835}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_ForceMeshLod: -1
m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: b407164ea2464a05a97202efff71afc6, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!33 &2086618838
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2086618835}
m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!4 &2086618839
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2086618835}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: -5, y: 0.71, z: 9.4}
m_LocalScale: {x: 10, y: 1.2542499, z: 3}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: [] m_Children: []
m_Father: {fileID: 0} m_Father: {fileID: 0}
@@ -935,7 +584,4 @@ SceneRoots:
- {fileID: 1420420439} - {fileID: 1420420439}
- {fileID: 1645301970} - {fileID: 1645301970}
- {fileID: 1571744443} - {fileID: 1571744443}
- {fileID: 2015489746} - {fileID: 1855107595}
- {fileID: 2086618839}
- {fileID: 1934438350}
- {fileID: 387012219}
@@ -12,9 +12,9 @@ Texture2D:
Hash: 00000000000000000000000000000000 Hash: 00000000000000000000000000000000
m_IsAlphaChannelOptional: 0 m_IsAlphaChannelOptional: 0
serializedVersion: 4 serializedVersion: 4
m_Width: 1024 m_Width: 1
m_Height: 1024 m_Height: 1
m_CompleteImageSize: 1048576 m_CompleteImageSize: 1
m_MipsStripped: 0 m_MipsStripped: 0
m_TextureFormat: 1 m_TextureFormat: 1
m_MipCount: 1 m_MipCount: 1
@@ -39,8 +39,8 @@ Texture2D:
m_LightmapFormat: 0 m_LightmapFormat: 0
m_ColorSpace: 1 m_ColorSpace: 1
m_PlatformBlob: m_PlatformBlob:
image data: 1048576 image data: 1
_typelessdata: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010406070a0d0e0e0d0c0906050300000000000000000000000000000000010406070a0d0e0e0d0c0906050300000000000000000000000000000000010406070a0d0e0e0d0c090806030000000000000000000000000000000000020507080a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a08070502000000000000000000000000000000000000000000000000000000000000000000010406070809090a0a09090807060401000000000000000000000000000000000000000000000000000000000000000105090b0c13131313131313131313131312110e0904000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001050707090a0a09080706040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000105090b0c13131313131313131313131312110e09040000000000000000000000000205070813131313131313131313131310100d0a0500000000000000000000000000000000000000000000000000000000000005090d0f1013131313131313131313130f0e0c08040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000306070809090a0a090908060503000000000000000000000000000000000000000000000000000000000000000000000004090c0e0f11111111111111111111110c0c0a060200000000000000000000000000000000000000000000000003080b0d0e11111111111111111111110d0d0b07020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001070d10131417191a1b1a191613120f0b0600000000000000000000000001070d11131417191a1b1a191613120f0b0600000000000000000000000001080d11131417191a1b1a191615130f0a040000000000000000000000000002090e1214151616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161514120e0902000000000000000000000000000000000000000000000000000002050708070d11131415151616171616151413110d070906050300000000000000000000000000000000000000000000000000060c111518182020202020202020202020201f1d1a150f08000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004060709080d11131416161616151413100c07060300000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c111518182020202020202020202020201f1d1a150f0800000000000000000002090e1114142020202020202020202020201d1c1a16110a030000000000000000000000000000Line truncated _typelessdata: 00
m_StreamData: m_StreamData:
serializedVersion: 2 serializedVersion: 2
offset: 0 offset: 0
@@ -106,445 +106,8 @@ MonoBehaviour:
m_SourceFontFilePath: m_SourceFontFilePath:
m_AtlasPopulationMode: 1 m_AtlasPopulationMode: 1
InternalDynamicOS: 0 InternalDynamicOS: 0
m_GlyphTable: m_GlyphTable: []
- m_Index: 659 m_CharacterTable: []
m_Metrics:
m_Width: 74.265625
m_Height: 14.015625
m_HorizontalBearingX: 8.265625
m_HorizontalBearingY: 13.40625
m_HorizontalAdvance: 90.875
m_GlyphRect:
m_X: 10
m_Y: 10
m_Width: 75
m_Height: 15
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 64
m_Metrics:
m_Width: 45.875
m_Height: 4.484375
m_HorizontalBearingX: -0.4375
m_HorizontalBearingY: -6.765625
m_HorizontalAdvance: 45
m_GlyphRect:
m_X: 104
m_Y: 10
m_Width: 47
m_Height: 6
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 472
m_Metrics:
m_Width: 48.125
m_Height: 63.375
m_HorizontalBearingX: 1.453125
m_HorizontalBearingY: 62.09375
m_HorizontalAdvance: 53.484375
m_GlyphRect:
m_X: 170
m_Y: 10
m_Width: 49
m_Height: 65
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 465
m_Metrics:
m_Width: 56.421875
m_Height: 60.828125
m_HorizontalBearingX: 1.1875
m_HorizontalBearingY: 60.828125
m_HorizontalAdvance: 58.75
m_GlyphRect:
m_X: 10
m_Y: 44
m_Width: 57
m_Height: 61
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 468
m_Metrics:
m_Width: 39.421875
m_Height: 60.828125
m_HorizontalBearingX: 5.578125
m_HorizontalBearingY: 60.828125
m_HorizontalAdvance: 46.796875
m_GlyphRect:
m_X: 104
m_Y: 35
m_Width: 40
m_Height: 61
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 481
m_Metrics:
m_Width: 44.421875
m_Height: 60.828125
m_HorizontalBearingX: 6.59375
m_HorizontalBearingY: 60.828125
m_HorizontalAdvance: 54.453125
m_GlyphRect:
m_X: 238
m_Y: 10
m_Width: 46
m_Height: 61
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 484
m_Metrics:
m_Width: 53.1875
m_Height: 62.109375
m_HorizontalBearingX: 1.53125
m_HorizontalBearingY: 60.828125
m_HorizontalAdvance: 55.453125
m_GlyphRect:
m_X: 303
m_Y: 10
m_Width: 54
m_Height: 63
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 475
m_Metrics:
m_Width: 46.3125
m_Height: 60.828125
m_HorizontalBearingX: 6.59375
m_HorizontalBearingY: 60.828125
m_HorizontalAdvance: 56.515625
m_GlyphRect:
m_X: 376
m_Y: 10
m_Width: 47
m_Height: 61
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 483
m_Metrics:
m_Width: 49.84375
m_Height: 60.828125
m_HorizontalBearingX: 1.53125
m_HorizontalBearingY: 60.828125
m_HorizontalAdvance: 52.90625
m_GlyphRect:
m_X: 442
m_Y: 10
m_Width: 51
m_Height: 61
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 479
m_Metrics:
m_Width: 52.375
m_Height: 63.375
m_HorizontalBearingX: 3.78125
m_HorizontalBearingY: 62.09375
m_HorizontalAdvance: 59.9375
m_GlyphRect:
m_X: 512
m_Y: 10
m_Width: 54
m_Height: 65
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 490
m_Metrics:
m_Width: 76.03125
m_Height: 71.640625
m_HorizontalBearingX: 6.59375
m_HorizontalBearingY: 60.828125
m_HorizontalAdvance: 83.796875
m_GlyphRect:
m_X: 376
m_Y: 90
m_Width: 77
m_Height: 72
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 470
m_Metrics:
m_Width: 39.5
m_Height: 60.828125
m_HorizontalBearingX: 6.59375
m_HorizontalBearingY: 60.828125
m_HorizontalAdvance: 50.5
m_GlyphRect:
m_X: 238
m_Y: 90
m_Width: 41
m_Height: 61
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 478
m_Metrics:
m_Width: 48.78125
m_Height: 60.828125
m_HorizontalBearingX: 6.59375
m_HorizontalBearingY: 60.828125
m_HorizontalAdvance: 61.921875
m_GlyphRect:
m_X: 163
m_Y: 94
m_Width: 50
m_Height: 61
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 1
m_Metrics:
m_Width: 0
m_Height: 0
m_HorizontalBearingX: 0
m_HorizontalBearingY: 0
m_HorizontalAdvance: 21.625
m_GlyphRect:
m_X: 0
m_Y: 0
m_Width: 0
m_Height: 0
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 15
m_Metrics:
m_Width: 14.328125
m_Height: 14.015625
m_HorizontalBearingX: 5.671875
m_HorizontalBearingY: 13.40625
m_HorizontalAdvance: 25.671875
m_GlyphRect:
m_X: 472
m_Y: 90
m_Width: 15
m_Height: 15
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 482
m_Metrics:
m_Width: 51.859375
m_Height: 63.375
m_HorizontalBearingX: 4.21875
m_HorizontalBearingY: 62.09375
m_HorizontalAdvance: 58.578125
m_GlyphRect:
m_X: 86
m_Y: 115
m_Width: 53
m_Height: 65
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 474
m_Metrics:
m_Width: 48.5625
m_Height: 79.109375
m_HorizontalBearingX: 6.59375
m_HorizontalBearingY: 79.109375
m_HorizontalAdvance: 61.75
m_GlyphRect:
m_X: 10
m_Y: 124
m_Width: 50
m_Height: 80
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 473
m_Metrics:
m_Width: 48.5625
m_Height: 60.828125
m_HorizontalBearingX: 6.59375
m_HorizontalBearingY: 60.828125
m_HorizontalAdvance: 61.75
m_GlyphRect:
m_X: 298
m_Y: 92
m_Width: 50
m_Height: 61
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 467
m_Metrics:
m_Width: 46.578125
m_Height: 60.828125
m_HorizontalBearingX: 6.59375
m_HorizontalBearingY: 60.828125
m_HorizontalAdvance: 57.046875
m_GlyphRect:
m_X: 232
m_Y: 172
m_Width: 48
m_Height: 61
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 492
m_Metrics:
m_Width: 66.484375
m_Height: 60.828125
m_HorizontalBearingX: 6.59375
m_HorizontalBearingY: 60.828125
m_HorizontalAdvance: 79.625
m_GlyphRect:
m_X: 79
m_Y: 199
m_Width: 68
m_Height: 61
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 486
m_Metrics:
m_Width: 53.953125
m_Height: 60.828125
m_HorizontalBearingX: 1.28125
m_HorizontalBearingY: 60.828125
m_HorizontalAdvance: 56.515625
m_GlyphRect:
m_X: 299
m_Y: 172
m_Width: 55
m_Height: 61
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 469
m_Metrics:
m_Width: 57.484375
m_Height: 71.640625
m_HorizontalBearingX: 1.1875
m_HorizontalBearingY: 60.828125
m_HorizontalAdvance: 59.859375
m_GlyphRect:
m_X: 585
m_Y: 10
m_Width: 58
m_Height: 72
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 493
m_Metrics:
m_Width: 45.4375
m_Height: 60.828125
m_HorizontalBearingX: 6.59375
m_HorizontalBearingY: 60.828125
m_HorizontalAdvance: 55.453125
m_GlyphRect:
m_X: 166
m_Y: 174
m_Width: 47
m_Height: 61
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
m_CharacterTable:
- m_ElementType: 1
m_Unicode: 8230
m_GlyphIndex: 659
m_Scale: 1
- m_ElementType: 1
m_Unicode: 95
m_GlyphIndex: 64
m_Scale: 1
- m_ElementType: 1
m_Unicode: 1047
m_GlyphIndex: 472
m_Scale: 1
- m_ElementType: 1
m_Unicode: 1040
m_GlyphIndex: 465
m_Scale: 1
- m_ElementType: 1
m_Unicode: 1043
m_GlyphIndex: 468
m_Scale: 1
- m_ElementType: 1
m_Unicode: 1056
m_GlyphIndex: 481
m_Scale: 1
- m_ElementType: 1
m_Unicode: 1059
m_GlyphIndex: 484
m_Scale: 1
- m_ElementType: 1
m_Unicode: 1050
m_GlyphIndex: 475
m_Scale: 1
- m_ElementType: 1
m_Unicode: 1058
m_GlyphIndex: 483
m_Scale: 1
- m_ElementType: 1
m_Unicode: 1054
m_GlyphIndex: 479
m_Scale: 1
- m_ElementType: 1
m_Unicode: 1065
m_GlyphIndex: 490
m_Scale: 1
- m_ElementType: 1
m_Unicode: 1045
m_GlyphIndex: 470
m_Scale: 1
- m_ElementType: 1
m_Unicode: 1053
m_GlyphIndex: 478
m_Scale: 1
- m_ElementType: 1
m_Unicode: 32
m_GlyphIndex: 1
m_Scale: 1
- m_ElementType: 1
m_Unicode: 46
m_GlyphIndex: 15
m_Scale: 1
- m_ElementType: 1
m_Unicode: 1057
m_GlyphIndex: 482
m_Scale: 1
- m_ElementType: 1
m_Unicode: 1049
m_GlyphIndex: 474
m_Scale: 1
- m_ElementType: 1
m_Unicode: 1048
m_GlyphIndex: 473
m_Scale: 1
- m_ElementType: 1
m_Unicode: 1042
m_GlyphIndex: 467
m_Scale: 1
- m_ElementType: 1
m_Unicode: 1067
m_GlyphIndex: 492
m_Scale: 1
- m_ElementType: 1
m_Unicode: 1061
m_GlyphIndex: 486
m_Scale: 1
- m_ElementType: 1
m_Unicode: 1044
m_GlyphIndex: 469
m_Scale: 1
- m_ElementType: 1
m_Unicode: 1068
m_GlyphIndex: 493
m_Scale: 1
m_AtlasTextures: m_AtlasTextures:
- {fileID: -680064802141868518} - {fileID: -680064802141868518}
m_AtlasTextureIndex: 0 m_AtlasTextureIndex: 0
@@ -555,176 +118,12 @@ MonoBehaviour:
m_AtlasHeight: 1024 m_AtlasHeight: 1024
m_AtlasPadding: 9 m_AtlasPadding: 9
m_AtlasRenderMode: 4165 m_AtlasRenderMode: 4165
m_UsedGlyphRects: m_UsedGlyphRects: []
- m_X: 0
m_Y: 0
m_Width: 94
m_Height: 34
- m_X: 94
m_Y: 0
m_Width: 66
m_Height: 25
- m_X: 160
m_Y: 0
m_Width: 68
m_Height: 84
- m_X: 0
m_Y: 34
m_Width: 76
m_Height: 80
- m_X: 94
m_Y: 25
m_Width: 59
m_Height: 80
- m_X: 228
m_Y: 0
m_Width: 65
m_Height: 80
- m_X: 293
m_Y: 0
m_Width: 73
m_Height: 82
- m_X: 366
m_Y: 0
m_Width: 66
m_Height: 80
- m_X: 432
m_Y: 0
m_Width: 70
m_Height: 80
- m_X: 502
m_Y: 0
m_Width: 73
m_Height: 84
- m_X: 366
m_Y: 80
m_Width: 96
m_Height: 91
- m_X: 228
m_Y: 80
m_Width: 60
m_Height: 80
- m_X: 153
m_Y: 84
m_Width: 69
m_Height: 80
- m_X: 462
m_Y: 80
m_Width: 34
m_Height: 34
- m_X: 76
m_Y: 105
m_Width: 72
m_Height: 84
- m_X: 0
m_Y: 114
m_Width: 69
m_Height: 99
- m_X: 288
m_Y: 82
m_Width: 69
m_Height: 80
- m_X: 222
m_Y: 162
m_Width: 67
m_Height: 80
- m_X: 69
m_Y: 189
m_Width: 87
m_Height: 80
- m_X: 289
m_Y: 162
m_Width: 74
m_Height: 80
- m_X: 575
m_Y: 0
m_Width: 77
m_Height: 91
- m_X: 156
m_Y: 164
m_Width: 66
m_Height: 80
m_FreeGlyphRects: m_FreeGlyphRects:
- m_X: 153
m_Y: 25
m_Width: 7
m_Height: 59
- m_X: 462
m_Y: 114
m_Width: 561
m_Height: 909
- m_X: 496
m_Y: 80
m_Width: 6
m_Height: 943
- m_X: 76
m_Y: 34
m_Width: 18
m_Height: 71
- m_X: 288
m_Y: 80
m_Width: 5
m_Height: 2
- m_X: 222
m_Y: 84
m_Width: 6
m_Height: 78
- m_X: 222
m_Y: 160
m_Width: 66
m_Height: 2
- m_X: 148
m_Y: 105
m_Width: 5
m_Height: 84
- m_X: 69
m_Y: 114
m_Width: 7
m_Height: 75
- m_X: 0 - m_X: 0
m_Y: 269
m_Width: 1023
m_Height: 754
- m_X: 0
m_Y: 213
m_Width: 69
m_Height: 810
- m_X: 357
m_Y: 82
m_Width: 9
m_Height: 80
- m_X: 363
m_Y: 82
m_Width: 3
m_Height: 941
- m_X: 363
m_Y: 171
m_Width: 660
m_Height: 852
- m_X: 652
m_Y: 0 m_Y: 0
m_Width: 371 m_Width: 1023
m_Height: 1023 m_Height: 1023
- m_X: 496
m_Y: 91
m_Width: 527
m_Height: 932
- m_X: 496
m_Y: 84
m_Width: 79
m_Height: 939
- m_X: 148
m_Y: 164
m_Width: 8
m_Height: 25
- m_X: 156
m_Y: 244
m_Width: 867
m_Height: 779
- m_X: 222
m_Y: 242
m_Width: 801
m_Height: 781
m_FontFeatureTable: m_FontFeatureTable:
m_MultipleSubstitutionRecords: [] m_MultipleSubstitutionRecords: []
m_LigatureSubstitutionRecords: [] m_LigatureSubstitutionRecords: []
@@ -60,255 +60,8 @@ MonoBehaviour:
m_SourceFontFilePath: m_SourceFontFilePath:
m_AtlasPopulationMode: 1 m_AtlasPopulationMode: 1
InternalDynamicOS: 0 InternalDynamicOS: 0
m_GlyphTable: m_GlyphTable: []
- m_Index: 185 m_CharacterTable: []
m_Metrics:
m_Width: 43.953125
m_Height: 8.796875
m_HorizontalBearingX: 4.390625
m_HorizontalBearingY: 13.1875
m_HorizontalAdvance: 52.734375
m_GlyphRect:
m_X: 10
m_Y: 10
m_Width: 45
m_Height: 10
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 66
m_Metrics:
m_Width: 52.734375
m_Height: 8.796875
m_HorizontalBearingX: 0
m_HorizontalBearingY: 8.796875
m_HorizontalAdvance: 52.734375
m_GlyphRect:
m_X: 74
m_Y: 10
m_Width: 53
m_Height: 9
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 22
m_Metrics:
m_Width: 43.953125
m_Height: 61.53125
m_HorizontalBearingX: 4.390625
m_HorizontalBearingY: 65.921875
m_HorizontalAdvance: 52.734375
m_GlyphRect:
m_X: 146
m_Y: 10
m_Width: 45
m_Height: 62
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 26
m_Metrics:
m_Width: 43.953125
m_Height: 61.53125
m_HorizontalBearingX: 4.390625
m_HorizontalBearingY: 65.921875
m_HorizontalAdvance: 52.734375
m_GlyphRect:
m_X: 74
m_Y: 38
m_Width: 45
m_Height: 62
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 24
m_Metrics:
m_Width: 43.953125
m_Height: 61.53125
m_HorizontalBearingX: 4.390625
m_HorizontalBearingY: 65.921875
m_HorizontalAdvance: 52.734375
m_GlyphRect:
m_X: 10
m_Y: 39
m_Width: 45
m_Height: 62
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 21
m_Metrics:
m_Width: 43.953125
m_Height: 61.53125
m_HorizontalBearingX: 4.390625
m_HorizontalBearingY: 65.921875
m_HorizontalAdvance: 52.734375
m_GlyphRect:
m_X: 210
m_Y: 10
m_Width: 45
m_Height: 62
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 28
m_Metrics:
m_Width: 43.953125
m_Height: 61.53125
m_HorizontalBearingX: 4.390625
m_HorizontalBearingY: 65.921875
m_HorizontalAdvance: 52.734375
m_GlyphRect:
m_X: 274
m_Y: 10
m_Width: 45
m_Height: 62
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 19
m_Metrics:
m_Width: 43.953125
m_Height: 61.53125
m_HorizontalBearingX: 4.390625
m_HorizontalBearingY: 65.921875
m_HorizontalAdvance: 52.734375
m_GlyphRect:
m_X: 338
m_Y: 10
m_Width: 45
m_Height: 62
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 16
m_Metrics:
m_Width: 35.15625
m_Height: 8.78125
m_HorizontalBearingX: 8.796875
m_HorizontalBearingY: 39.546875
m_HorizontalAdvance: 52.734375
m_GlyphRect:
m_X: 402
m_Y: 10
m_Width: 36
m_Height: 10
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 20
m_Metrics:
m_Width: 26.359375
m_Height: 61.53125
m_HorizontalBearingX: 13.1875
m_HorizontalBearingY: 65.921875
m_HorizontalAdvance: 52.734375
m_GlyphRect:
m_X: 457
m_Y: 10
m_Width: 27
m_Height: 62
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 23
m_Metrics:
m_Width: 43.953125
m_Height: 61.53125
m_HorizontalBearingX: 4.390625
m_HorizontalBearingY: 65.921875
m_HorizontalAdvance: 52.734375
m_GlyphRect:
m_X: 503
m_Y: 10
m_Width: 45
m_Height: 62
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 25
m_Metrics:
m_Width: 43.953125
m_Height: 61.53125
m_HorizontalBearingX: 4.390625
m_HorizontalBearingY: 65.921875
m_HorizontalAdvance: 52.734375
m_GlyphRect:
m_X: 567
m_Y: 10
m_Width: 45
m_Height: 62
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
- m_Index: 27
m_Metrics:
m_Width: 43.953125
m_Height: 61.53125
m_HorizontalBearingX: 4.390625
m_HorizontalBearingY: 65.921875
m_HorizontalAdvance: 52.734375
m_GlyphRect:
m_X: 631
m_Y: 10
m_Width: 45
m_Height: 62
m_Scale: 1
m_AtlasIndex: 0
m_ClassDefinitionType: 0
m_CharacterTable:
- m_ElementType: 1
m_Unicode: 8230
m_GlyphIndex: 185
m_Scale: 1
- m_ElementType: 1
m_Unicode: 95
m_GlyphIndex: 66
m_Scale: 1
- m_ElementType: 1
m_Unicode: 51
m_GlyphIndex: 22
m_Scale: 1
- m_ElementType: 1
m_Unicode: 55
m_GlyphIndex: 26
m_Scale: 1
- m_ElementType: 1
m_Unicode: 53
m_GlyphIndex: 24
m_Scale: 1
- m_ElementType: 1
m_Unicode: 50
m_GlyphIndex: 21
m_Scale: 1
- m_ElementType: 1
m_Unicode: 57
m_GlyphIndex: 28
m_Scale: 1
- m_ElementType: 1
m_Unicode: 48
m_GlyphIndex: 19
m_Scale: 1
- m_ElementType: 1
m_Unicode: 45
m_GlyphIndex: 16
m_Scale: 1
- m_ElementType: 1
m_Unicode: 49
m_GlyphIndex: 20
m_Scale: 1
- m_ElementType: 1
m_Unicode: 52
m_GlyphIndex: 23
m_Scale: 1
- m_ElementType: 1
m_Unicode: 54
m_GlyphIndex: 25
m_Scale: 1
- m_ElementType: 1
m_Unicode: 56
m_GlyphIndex: 27
m_Scale: 1
m_AtlasTextures: m_AtlasTextures:
- {fileID: 948717598527772745} - {fileID: 948717598527772745}
m_AtlasTextureIndex: 0 m_AtlasTextureIndex: 0
@@ -319,83 +72,11 @@ MonoBehaviour:
m_AtlasHeight: 1024 m_AtlasHeight: 1024
m_AtlasPadding: 9 m_AtlasPadding: 9
m_AtlasRenderMode: 4165 m_AtlasRenderMode: 4165
m_UsedGlyphRects: m_UsedGlyphRects: []
- m_X: 0
m_Y: 0
m_Width: 64
m_Height: 29
- m_X: 64
m_Y: 0
m_Width: 72
m_Height: 28
- m_X: 136
m_Y: 0
m_Width: 64
m_Height: 81
- m_X: 64
m_Y: 28
m_Width: 64
m_Height: 81
- m_X: 0
m_Y: 29
m_Width: 64
m_Height: 81
- m_X: 200
m_Y: 0
m_Width: 64
m_Height: 81
- m_X: 264
m_Y: 0
m_Width: 64
m_Height: 81
- m_X: 328
m_Y: 0
m_Width: 64
m_Height: 81
- m_X: 392
m_Y: 0
m_Width: 55
m_Height: 29
- m_X: 447
m_Y: 0
m_Width: 46
m_Height: 81
- m_X: 493
m_Y: 0
m_Width: 64
m_Height: 81
- m_X: 557
m_Y: 0
m_Width: 64
m_Height: 81
- m_X: 621
m_Y: 0
m_Width: 64
m_Height: 81
m_FreeGlyphRects: m_FreeGlyphRects:
- m_X: 128
m_Y: 81
m_Width: 895
m_Height: 942
- m_X: 128
m_Y: 28
m_Width: 8
m_Height: 995
- m_X: 0 - m_X: 0
m_Y: 110
m_Width: 1023
m_Height: 913
- m_X: 64
m_Y: 109
m_Width: 959
m_Height: 914
- m_X: 392
m_Y: 29
m_Width: 55
m_Height: 994
- m_X: 685
m_Y: 0 m_Y: 0
m_Width: 338 m_Width: 1023
m_Height: 1023 m_Height: 1023
m_FontFeatureTable: m_FontFeatureTable:
m_MultipleSubstitutionRecords: [] m_MultipleSubstitutionRecords: []
@@ -478,9 +159,9 @@ Texture2D:
Hash: 00000000000000000000000000000000 Hash: 00000000000000000000000000000000
m_IsAlphaChannelOptional: 0 m_IsAlphaChannelOptional: 0
serializedVersion: 4 serializedVersion: 4
m_Width: 1024 m_Width: 1
m_Height: 1024 m_Height: 1
m_CompleteImageSize: 1048576 m_CompleteImageSize: 1
m_MipsStripped: 0 m_MipsStripped: 0
m_TextureFormat: 1 m_TextureFormat: 1
m_MipCount: 1 m_MipCount: 1
@@ -505,8 +186,8 @@ Texture2D:
m_LightmapFormat: 0 m_LightmapFormat: 0
m_ColorSpace: 1 m_ColorSpace: 1
m_PlatformBlob: m_PlatformBlob:
image data: 1048576 image data: 1
_typelessdata: 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005080a0b0e0e0e0e0e0e0e0e0807050200000306070e0e0e0e0e0e0e0e0c0c0a0602000407090a0e0e0e0e0e0e0e0e090806030000000000000000000000050a0f121313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313100f0d0905000000000000000000000000000000000000000002060a0c0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0b0a08050000000000000000000000000000000000000000000005080a0b0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0908060300000000000000000000000000000000000000000002060a0c0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0b0a080500000000000000000000000000000000000000000000000000000000000002060a0c0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0b0a08050000000000000000000000000000000000000000000001040607090909090909090909090909090909090909090909090909090909090909090909090909070300000000000000000000000002060a0c0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0b0a0805000000000000000000000000000000000000000000000000000000000000000000000000000000020507080e0e0e0e0e0e0e0e0b0a080500000000000000000000000000000000000000000000000000000000000002060a0c0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0b0a080500000000000000000000000000000000000000000000000000000000000002060a0c0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0b0a080500000000000000000000000000000000000000000000000000000000000002060a0c0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0b0a08050000000000000000000000000000000000000000000005080a0b0e0e0e0e0e0e0e0e08070502000000000000000000000000000000000000000407090a0e0e0e0e0e0e0e0e090806030000000000000000000000000005080a0b0e0e0e0e0e0e0e0e08070502000000000000000000000000000000000000000407090a0e0e0e0e0e0e0e0e090806030000000000000000000000000005080a0b0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0908060300000000000000000000000000000000000000000002060a0c0d0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0b0a0805000000000000000000000000000000000000000000000000000000000000000000000000000000060c111517181b1b1b1b1b1b1b1b1514120e090c1012131b1b1b1b1b1b1b1b191816120d0b101416171b1b1b1b1b1b1b1b1615130f0a0400000000000000010910161b1e20202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020201d1c1915100a030000000000000000000000000000000000070d121619191b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b171714110c05000000000000000000000000000000000000060c111517181b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1615130f0a04000000000000000000000000000000000000070d121619191b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b171714110c05000000000000000000000000000000000000000000000000000000070d121619191b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b1b171714110c0500000000000000000000000000000000000001070d111314161616161616161616161616161616161616161616161616161616161616161616161615130f0a04Line truncated _typelessdata: 00
m_StreamData: m_StreamData:
serializedVersion: 2 serializedVersion: 2
offset: 0 offset: 0
@@ -29,7 +29,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: [] m_Children: []
m_Father: {fileID: 2527703521557431680} m_Father: {fileID: 4122797476271397740}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1477319963861932501 --- !u!1 &1477319963861932501
GameObject: GameObject:
@@ -156,7 +156,6 @@ Transform:
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: m_Children:
- {fileID: 4122797476271397740} - {fileID: 4122797476271397740}
- {fileID: 1047840484662430186}
- {fileID: 1463034091404591669} - {fileID: 1463034091404591669}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@@ -417,6 +416,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: m_Children:
- {fileID: 1047840484662430186}
- {fileID: 5944670082409334569} - {fileID: 5944670082409334569}
m_Father: {fileID: 2527703521557431680} m_Father: {fileID: 2527703521557431680}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}