HoloCop in progress

This commit is contained in:
ThomasCharester committed 2026-10-28 14:02:58 +03:00
1 parent 2697212f05
commit 430b250075
79 files changed
+120745 -45077

No files matched your search

@@ -91,6 +91,11 @@ MonoBehaviour:
m_SerializedLabels:
- UIPanel
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 5ff8bf03d4ecf4809a23c66411ca6f5a
m_Address: Assets/OfficeGame/Battle/PlayerStuff/PlayerDecisionMarkerConfig.asset
m_ReadOnly: 0
m_SerializedLabels: []
FlaggedDuringContentUpdateRestriction: 0
- m_GUID: 7d927d895d0ac44718014776d136e9bf
m_Address: Assets/OfficeGame/Battle/UI/TimelinePanel.prefab
m_ReadOnly: 0
+13 -1
View File
@@ -64,9 +64,14 @@ namespace Code.Game.TestingLevel
.AsUniTask();
var factoryConfig = new SingleConfig<PlayerFactorySettings>();
var playerDecisionMarkerConfig = new SingleConfig<PlayerDecisionMarkerConfig>();
var attackActionsConfigs = new MultipleConfig<BattleActionParameters>();
await UniTask.WhenAll(factoryConfig.LoadConfig(), attackActionsConfigs.LoadConfigs());
await UniTask.WhenAll(
factoryConfig.LoadConfig(),
attackActionsConfigs.LoadConfigs(),
playerDecisionMarkerConfig.LoadConfig());
var factory = new PlayerFactory(factoryConfig);
var player = await factory.CreatePlayer();
@@ -86,11 +91,18 @@ namespace Code.Game.TestingLevel
(BattleTimelinePanel)await Context.UIFactory
.LoadPanel(UIPanelType.BattleTimelinePanel, false);
PlayerDecisionMarker playerDecisionMarker =
Object.Instantiate(playerDecisionMarkerConfig.Config.PlayerDecisionMarkerPrefab);
playerDecisionMarker.Toggle(false);
Object.DontDestroyOnLoad(playerDecisionMarker);
// ((OpenMovementCameraState)Context.Camera.CurrentBaseState).SetTarget(player.transform);
void InstallExtra(Scene scene, ContainerBuilder builder)
{
builder.RegisterValue(attackActionsConfigs);
builder.RegisterValue(playerDecisionMarker);
builder.RegisterValue(factoryConfig);
builder.RegisterValue(factory, new[] { typeof(IPlayerFactory) });
builder.RegisterValue(playerKinematicCharacterMotor);
@@ -1,35 +1,77 @@
using System.Linq;
using System.Threading;
using Code.Infrastructure.Input;
using Code.Infrastructure.Utils;
using Code.OfficeGame.BattleMode.Actions.HoloCopy;
using Code.OfficeGame.BattleMode.HitBoxes;
using Cysharp.Threading.Tasks;
using Reflex.Attributes;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.Serialization;
namespace Code.OfficeGame.BattleMode.Actions.Attacks
{
public class BattleActionPlayerAttackMMA : BattleAction
{
private Animator _animator;
[SerializeField] private HoloCop holoCop;
[SerializeField] private Animator animator;
private EntityHitBoxes _entityHitBoxes;
private AttackActionConfig _attackData;
public int EntryStateHash => Animator.StringToHash("WalkBlend");
private int _currentFrame;
private IInputService _inputService;
private CancellationTokenSource _waitForEnterTokenSource;
private BattleActionDecisionResultCode _decisionResultCode;
[Inject]
public void Construct(MultipleConfig<BattleActionParameters> attackData)
public void Construct(MultipleConfig<BattleActionParameters> attackData, IInputService inputService)
{
_animator = GetComponentInChildren<Animator>();
_inputService = inputService;
_entityHitBoxes = GetComponent<EntityHitBoxes>();
_attackData = (AttackActionConfig) attackData.Configs.SingleOrDefault(x=>x.ActionType == ActionType);
}
public override async UniTask<BattleActionDecisionResult> DecideAction()
{
_currentFrame = 0;
Finished = false;
_waitForEnterTokenSource = new CancellationTokenSource();
_decisionResultCode = BattleActionDecisionResultCode.CancelDecision;
_inputService.BindActionPerformed((int)ActionMappings.BattleMode, (int)BattleModeActions.Confirm,
ConfirmAttack);
_inputService.BindActionPerformed((int)ActionMappings.BattleMode, (int)BattleModeActions.Cancel,
CancelAttack);
return new() { ResultCode = BattleActionDecisionResultCode.Decided, FrameDuration = _attackData.TotalFrames};
holoCop.Simulate(TickHoloCopy, _waitForEnterTokenSource.Token).Forget();
await UniTask.WaitUntilCanceled(_waitForEnterTokenSource.Token).SuppressCancellationThrow();
_inputService.UnbindActionPerformed((int)ActionMappings.BattleMode, (int)BattleModeActions.Confirm,
ConfirmAttack);
_inputService.UnbindActionPerformed((int)ActionMappings.BattleMode, (int)BattleModeActions.Cancel,
CancelAttack);
_currentFrame = 0;
return new() { ResultCode = _decisionResultCode, FrameDuration = _attackData.TotalFrames};
}
private void CancelAttack(InputAction.CallbackContext obj)
{
_decisionResultCode = BattleActionDecisionResultCode.CancelDecision;
_waitForEnterTokenSource?.Cancel();
}
private void ConfirmAttack(InputAction.CallbackContext obj)
{
_decisionResultCode = BattleActionDecisionResultCode.Decided;
_waitForEnterTokenSource?.Cancel();
}
public override BattleActionType ActionType => BattleActionType.PlayerAttackMMA;
@@ -40,7 +82,7 @@ namespace Code.OfficeGame.BattleMode.Actions.Attacks
if (_currentFrame == 0)
{
_animator.Play(_attackData.StateHash, 0, 0f);
animator.Play(_attackData.StateHash, 0, 0f);
}
_currentFrame++;
@@ -70,9 +112,23 @@ namespace Code.OfficeGame.BattleMode.Actions.Attacks
public void CompleteOrInterruptAction()
{
_animator.Play(EntryStateHash, 0, 0f); // Создать None State и кинуть эту штуку туда
animator.Play(EntryStateHash, 0, 0f); // Создать None State и кинуть эту штуку туда
_entityHitBoxes.DisableAllHitboxes();
Finished = true;
}
// HoloCopy
private bool TickHoloCopy(HoloCop holoCop, float tickDelta)
{
if (_currentFrame == 0)
{
holoCop.Animator.Play(_attackData.StateHash, 0, 0f);
}
_currentFrame++;
return _currentFrame >= _attackData.TotalFrames;
}
}
}
@@ -2,6 +2,7 @@ using System.Threading;
using Code.Game.Gameplay.Player;
using Code.Infrastructure.Camera;
using Code.Infrastructure.Input;
using Code.OfficeGame.BattleMode.Actions.Player;
using Code.OfficeGame.BattleMode.Timeline;
using Cysharp.Threading.Tasks;
using KinematicCharacterController;
@@ -30,8 +31,10 @@ namespace Code.OfficeGame.BattleMode.Actions
[Inject]
public void Construct(
CameraStateMachine cameraStateMachine,
IInputService inputService)
IInputService inputService,
PlayerDecisionMarker playerDecisionMarker)
{
_playerDecisionMarker = playerDecisionMarker;
_cameraStateMachine = cameraStateMachine;
_inputService = inputService;
_movementController = GetComponent<MovementController>();
@@ -87,7 +90,8 @@ namespace Code.OfficeGame.BattleMode.Actions
float inputMagnitude = (_currentCornerIndex == _corners.Length - 1 && distance < maxStep && maxStep > 0f)
? distance / maxStep
: 1f;
// TODO Для последнего кадра должен быть особый Look совпадающий с маркером
var aiInputs = new AICharacterInputs
{
MoveVector = moveNormal * inputMagnitude,
@@ -116,6 +120,7 @@ namespace Code.OfficeGame.BattleMode.Actions
private void StopMovementAndFinish()
{
Debug.Log("MovementFinished");
var emptyInputs = new AICharacterInputs
{
MoveVector = Vector3.zero,
@@ -142,15 +147,23 @@ namespace Code.OfficeGame.BattleMode.Actions
ConfirmPosition);
_inputService.BindActionPerformed((int)ActionMappings.BattleMode, (int)BattleModeActions.Cancel,
CancelPosition);
_inputService.BindActionPerformed((int)ActionMappings.BattleMode, (int)BattleModeActions.Watchment,
MarkPosition);
_playerDecisionMarker.Toggle(true);
await UniTask.WaitUntilCanceled(_waitForEnterTokenSource.Token).SuppressCancellationThrow();
_playerDecisionMarker.Toggle(false);
_inputService.UnbindActionPerformed((int)ActionMappings.BattleMode, (int)BattleModeActions.Select,
SelectPosition);
_inputService.UnbindActionPerformed((int)ActionMappings.BattleMode, (int)BattleModeActions.Confirm,
ConfirmPosition);
_inputService.UnbindActionPerformed((int)ActionMappings.BattleMode, (int)BattleModeActions.Cancel,
CancelPosition);
_inputService.UnbindActionPerformed((int)ActionMappings.BattleMode, (int)BattleModeActions.Watchment,
MarkPosition);
_waitForEnterTokenSource.Dispose();
_waitForEnterTokenSource = null;
@@ -163,6 +176,7 @@ namespace Code.OfficeGame.BattleMode.Actions
public override BattleActionType ActionType => BattleActionType.Move;
private int _totalFrames;
private PlayerDecisionMarker _playerDecisionMarker;
private void CancelPosition(InputAction.CallbackContext obj)
{
@@ -217,18 +231,37 @@ namespace Code.OfficeGame.BattleMode.Actions
// Округляем вверх, так как последний неполный шаг тоже занимает 1 целый кадр
return Mathf.CeilToInt(effectiveDistance / stepPerFrame);
}
private void SelectPosition(InputAction.CallbackContext input)
private RaycastHit[] _hitBuffer = new RaycastHit[1];
private Vector3 _lastViewedPosition;
private void MarkPosition(InputAction.CallbackContext input)
{
var position = _cameraStateMachine.Camera.transform.position;
var direction = _cameraStateMachine.Camera.transform.forward;
var didHit = Physics.Raycast(position, direction, out RaycastHit hit, Mathf.Infinity, _navMeshMask);
var hitCount = Physics.RaycastNonAlloc(position, direction, _hitBuffer, Mathf.Infinity, _navMeshMask);
if (!didHit) return;
if (hitCount == 0) return;
Debug.Log($"Hit {hit.point}");
var hit = _hitBuffer[0];
_playerDecisionMarker.MoveMarker(hit.point);
_targetPosition = hit.point;
_lastViewedPosition = hit.point;
}
private void SelectPosition(InputAction.CallbackContext input)
{
// var position = _cameraStateMachine.Camera.transform.position;
// var direction = _cameraStateMachine.Camera.transform.forward;
//
// var didHit = Physics.Raycast(position, direction, out RaycastHit hit, Mathf.Infinity, _navMeshMask);
//
// if (!didHit) return;
Debug.Log($"Hit {_lastViewedPosition}");
_targetPosition = _lastViewedPosition;
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: fb857a2eae284b31b2eb19ac4abfcaa7
timeCreated: 1793141973
@@ -0,0 +1,91 @@
using System;
using System.Threading;
using Code.Game.Gameplay.Player;
using Code.OfficeGame.BattleMode.Timeline;
using Cysharp.Threading.Tasks;
using KinematicCharacterController;
using UnityEngine;
using UnityEngine.Serialization;
namespace Code.OfficeGame.BattleMode.Actions.HoloCopy
{
public class HoloCop : MonoBehaviour
{
private Func<HoloCop, float, bool> _action;
[SerializeField] private MovementController movementController;
[SerializeField] private KinematicCharacterMotor motor;
[SerializeField] private Animator animator;
public MovementController Controller => movementController;
public Animator Animator => animator;
private Vector3 _initialPosition;
private Quaternion _initialRotation;
private int _initialAnimationState;
private void Awake()
{
animator = GetComponentInChildren<Animator>();
movementController = GetComponent<MovementController>();
motor = GetComponent<KinematicCharacterMotor>();
}
private void Snapshot()
{
_initialPosition = motor.transform.position;
_initialRotation = motor.transform.rotation;
_initialAnimationState = animator.GetCurrentAnimatorStateInfo(0).shortNameHash;
}
private void ReturnToSnapshot()
{
motor.SetPositionAndRotation(_initialPosition, _initialRotation);
animator.Play(_initialAnimationState, 0);
}
public async UniTask Simulate(Func<HoloCop, float, bool> action, CancellationToken ctx)
{
_action = action;
float accumulator = 0f;
Snapshot();
try
{
gameObject.SetActive(true);
while (!ctx.IsCancellationRequested)
{
await UniTask.Yield(PlayerLoopTiming.Update, ctx);
accumulator += Time.unscaledDeltaTime;
while (accumulator >= BattleTimeline.TickDelta)
{
accumulator -= BattleTimeline.TickDelta;
if (_action == null) return;
bool result = _action(this, BattleTimeline.TickDelta);
animator.Update(BattleTimeline.TickDelta);
Physics.Simulate(BattleTimeline.TickDelta);
Physics.SyncTransforms();
if (result) ReturnToSnapshot();
}
}
}
finally
{
ReturnToSnapshot();
gameObject.SetActive(false);
}
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: b4067e559c4d4556a335b4c507f9702f
timeCreated: 1793142036
@@ -1,4 +1,6 @@
using System.Threading;
using Code.Game.OfficeGame.BattleMode;
using Code.Infrastructure.Camera;
using Code.OfficeGame.BattleMode.UI;
using Cysharp.Threading.Tasks;
using Reflex.Attributes;
@@ -9,6 +11,7 @@ namespace Code.OfficeGame.BattleMode.Actions.Player
public class PlayerControlledTimelineActor : EntityTimelineActor
{
[Inject] private BattleActionDecisionPanel _battleActionDecisionPanel;
[Inject] private CameraStateMachine _cameraStateMachine;
public override async UniTask DecideAction(CancellationToken ctx)
{
@@ -22,6 +25,8 @@ namespace Code.OfficeGame.BattleMode.Actions.Player
{
Cursor.lockState = CursorLockMode.Confined;
((CameraBattleModeState)_cameraStateMachine.CurrentBaseState).battleDeciding = true;
await _battleActionDecisionPanel.Open(ctx);
decidedAction = await _battleActionDecisionPanel.GetDecision(ctx);
@@ -31,6 +36,8 @@ namespace Code.OfficeGame.BattleMode.Actions.Player
{
Cursor.lockState = CursorLockMode.Locked;
((CameraBattleModeState)_cameraStateMachine.CurrentBaseState).battleDeciding = false;
await _battleActionDecisionPanel.Close(ctx);
decision = await BattleActions[decidedAction].DecideAction();
@@ -42,6 +49,7 @@ namespace Code.OfficeGame.BattleMode.Actions.Player
break;
}
}
SetCurrentAction(BattleActions[decidedAction], decision.FrameDuration);
}
@@ -0,0 +1,21 @@
using UnityEngine;
namespace Code.OfficeGame.BattleMode.Actions.Player
{
public class PlayerDecisionMarker : MonoBehaviour
{
public bool locked;
public void Toggle(bool onOff)
{
locked = false;
gameObject.SetActive(onOff);
}
public void MoveMarker(Vector3 position)
{
if (locked) return;
transform.position = position;
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 6dcb7d02c6a54c0a9758279c38260aef
timeCreated: 1793143524
@@ -0,0 +1,13 @@
using Code.Infrastructure.Generators;
using UnityEngine;
namespace Code.OfficeGame.BattleMode.Actions.Player
{
// TODO Эта штука просто загружена вместе с конфигом
[Config("Configs/PlayerDecisionMarker")]
[CreateAssetMenu(fileName = "PlayerDecisionMarkerConfig", menuName = "Configs/PlayerDecisionMarker")]
public class PlayerDecisionMarkerConfig : ScriptableObject
{
public PlayerDecisionMarker PlayerDecisionMarkerPrefab;
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 9ae7c4b6492048df8d5bbb43e7909af0
timeCreated: 1793143622
@@ -1,4 +1,3 @@
using System;
using Code.Infrastructure.Camera;
using Code.Infrastructure.Camera.CameraStates;
using Code.Infrastructure.Input;
@@ -11,15 +10,18 @@ namespace Code.Game.OfficeGame.BattleMode
[Infrastructure.Generators.State(typeof(CameraMode), typeof(CameraStateMachineContext), ManualInherit = true)]
public partial class CameraBattleModeState : BaseCameraState
{
public bool battleDeciding = false;
private bool _rightClickHold = false;
private Vector2 _mouseDelta;
private Vector2 _rotation = Vector2.zero;
private Vector2 _movement;
private float _verticalMovement; // Если захотите добавить Space / Ctrl как в Minecraft
[Header("Look Settings")] private float _sensitivityX = 0.1f;
private float _sensitivityX = 0.1f;
private float _sensitivityY = 0.1f;
[Header("Spectator Flight Settings")] private float _moveSpeed = 12f;
private float _moveSpeed = 12f;
private float _cameraRadius = 0.25f; // Должен быть больше nearClipPlane камеры (обычно 0.05 - 0.1)
private LayerMask _obstacleMask = ~0; // По умолчанию все слои (настройте, исключив триггеры/юнитов)
@@ -55,6 +57,15 @@ namespace Code.Game.OfficeGame.BattleMode
(int)ActionMappings.BattleMode,
(int)BattleModeActions.Watchment,
LookCancelled);
Context.InputService.BindActionPerformed(
(int)ActionMappings.BattleMode,
(int)BattleModeActions.RightClick,
RightClickPerformed);
Context.InputService.BindActionCancelled(
(int)ActionMappings.BattleMode,
(int)BattleModeActions.RightClick,
RightClickCancelled);
var camTransform = Context.cameraLoadedData.Camera.transform;
@@ -102,6 +113,9 @@ namespace Code.Game.OfficeGame.BattleMode
private void LookCancelled(InputAction.CallbackContext obj) => _mouseDelta = Vector2.zero;
private void LookPerformed(InputAction.CallbackContext obj) => _mouseDelta = obj.ReadValue<Vector2>();
private void RightClickCancelled(InputAction.CallbackContext obj) => _rightClickHold = false;
private void RightClickPerformed(InputAction.CallbackContext obj) => _rightClickHold = true;
public override void Update()
{
@@ -112,15 +126,15 @@ namespace Code.Game.OfficeGame.BattleMode
var camTransform = Context.cameraLoadedData.Camera.transform;
float dt = Time.unscaledDeltaTime;
// --- 1. СВОБОДНЫЙ ОБЗОР ОТ ПЕРВОГО ЛИЦА (Yaw + Pitch) ---
_rotation.x += _mouseDelta.x * _sensitivityX;
_rotation.y -= _mouseDelta.y * _sensitivityY;
_rotation.y = Mathf.Clamp(_rotation.y, -89.9f, 89.9f);
if (!(battleDeciding && !_rightClickHold))
{
_rotation.x += _mouseDelta.x * _sensitivityX;
_rotation.y -= _mouseDelta.y * _sensitivityY;
_rotation.y = Mathf.Clamp(_rotation.y, -89.9f, 89.9f);
// Используем мировое вращение, чтобы камера всегда держала горизонт ровно (без завала Roll)
camTransform.rotation = Quaternion.Euler(_rotation.y, _rotation.x, 0f);
// --- 2. ВЕКТОР ПОЛЁТА КАК В CS / MINECRAFT SPECTATOR ---
camTransform.rotation = Quaternion.Euler(_rotation.y, _rotation.x, 0f);
}
Vector3 wishDir = camTransform.forward * _movement.y + camTransform.right * _movement.x;
// Если добавите кнопки вверх/вниз (Space/Ctrl), раскомментируйте:
@@ -131,10 +145,8 @@ namespace Code.Game.OfficeGame.BattleMode
Vector3 currentPos = camTransform.position;
// --- 3. ВЫТАЛКИВАНИЕ (Если камера начала кадр внутри стены или двери) ---
currentPos = Depenetrate(currentPos);
// --- 4. ДВИЖЕНИЕ И СКОЛЬЖЕНИЕ ПО СТЕНАМ И УГЛАМ ---
if (wishDir.sqrMagnitude > 0.0001f)
{
Vector3 displacement = wishDir * (_moveSpeed * dt);
@@ -29,7 +29,6 @@ namespace Code.OfficeGame.BattleMode.Timeline
_entities = entities;
_currentBattleFrame.Value = 0;
// Контейнер подписок на время текущего боя (автоматически очистится при выходе из метода)
_battleSubscriptions = new DisposableBag();
try
@@ -42,7 +41,6 @@ namespace Code.OfficeGame.BattleMode.Timeline
entity.OnActionSet
.Subscribe(action =>
{
// Переводим длительность действия в абсолютный кадр окончания на таймлайне
action.Frame += _currentBattleFrame.Value;
_timelinePanel.SetAction(action);
})
@@ -72,14 +70,14 @@ namespace Code.OfficeGame.BattleMode.Timeline
}
}
private async UniTask<List<EntityTimelineActor>> PlayTimelineUntilPause(CancellationToken ct)
private async UniTask<List<EntityTimelineActor>> PlayTimelineUntilPause(CancellationToken ctx)
{
float accumulator = 0f;
var readyEntities = new List<EntityTimelineActor>();
while (readyEntities.Count == 0 && !ct.IsCancellationRequested)
while (readyEntities.Count == 0 && !ctx.IsCancellationRequested)
{
await UniTask.Yield(PlayerLoopTiming.Update, ct);
await UniTask.Yield(PlayerLoopTiming.Update, ctx);
accumulator += Time.unscaledDeltaTime;
@@ -22,7 +22,8 @@ namespace Code.Infrastructure.Input
Watchment,
Select,
Confirm,
Cancel
Cancel,
RightClick
}
// Написать, чтобы розлин сама писала этот енам
public enum DebugActions
@@ -254,6 +254,16 @@
"interactions": "",
"initialStateCheck": false,
"priority": 0
},
{
"name": "RightClick",
"type": "Button",
"id": "75b5984a-da57-465e-9c96-416a5c9c103d",
"expectedControlType": "",
"processors": "",
"interactions": "",
"initialStateCheck": false,
"priority": 0
}
],
"bindings": [
@@ -410,6 +420,17 @@
"action": "Cancel",
"isComposite": false,
"isPartOfComposite": false
},
{
"name": "",
"id": "a76c6db1-b7f8-425a-bec0-ff79a6c05068",
"path": "<Mouse>/rightButton",
"interactions": "",
"processors": "",
"groups": ";Keyboard&Mouse",
"action": "RightClick",
"isComposite": false,
"isPartOfComposite": false
}
]
},
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 2ae581d214df74a2e9ec5edebcb55c89
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,138 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &3917113254443311522
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1507626928637554511}
- component: {fileID: 8810757237738666909}
m_Layer: 0
m_Name: PlayerDecisionMarker
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1507626928637554511
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3917113254443311522}
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:
- {fileID: 2632513295195526779}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &8810757237738666909
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3917113254443311522}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 6dcb7d02c6a54c0a9758279c38260aef, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Code.OfficeGame.BattleMode.Actions.Player.PlayerDecisionMarker
locked: 0
--- !u!1 &5211050770166458882
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2632513295195526779}
- component: {fileID: 3491484774049451729}
- component: {fileID: 6847923867834126189}
m_Layer: 0
m_Name: Cylinder
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2632513295195526779
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5211050770166458882}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0.05, z: 0}
m_LocalScale: {x: 1, y: 0.1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1507626928637554511}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &3491484774049451729
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5211050770166458882}
m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
--- !u!23 &6847923867834126189
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5211050770166458882}
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_MaskInteraction: 0
m_AdditionalVertexStreams: {fileID: 0}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 8904ae2f63af24f35a919b55d9f3e577
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,15 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!114 &11400000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 9ae7c4b6492048df8d5bbb43e7909af0, type: 3}
m_Name: PlayerDecisionMarkerConfig
m_EditorClassIdentifier: Assembly-CSharp::Code.OfficeGame.BattleMode.Actions.Player.PlayerDecisionMarkerConfig
PlayerDecisionMarkerPrefab: {fileID: 8810757237738666909, guid: 8904ae2f63af24f35a919b55d9f3e577, type: 3}
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 5ff8bf03d4ecf4809a23c66411ca6f5a
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
+260
View File
@@ -1261,6 +1261,148 @@ BoxCollider:
serializedVersion: 3
m_Size: {x: 1, y: 1, z: 1}
m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &5865940515695367313
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 342766060722697506}
- component: {fileID: 6894003323627830512}
- component: {fileID: 1067183535363547161}
- component: {fileID: 315944951666586202}
- component: {fileID: 4168235549514175667}
m_Layer: 0
m_Name: HoloCop
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!4 &342766060722697506
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5865940515695367313}
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:
- {fileID: 3186131212207065069}
m_Father: {fileID: 4102848286648065809}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &6894003323627830512
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5865940515695367313}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b4067e559c4d4556a335b4c507f9702f, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Code.OfficeGame.BattleMode.Actions.HoloCopy.HoloCop
movementController: {fileID: 4168235549514175667}
motor: {fileID: 315944951666586202}
animator: {fileID: 8851620147763273111}
--- !u!136 &1067183535363547161
CapsuleCollider:
m_ObjectHideFlags: 8
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5865940515695367313}
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: 2
m_Radius: 0.2
m_Height: 1.35
m_Direction: 1
m_Center: {x: 0, y: 0.675, z: 0}
--- !u!114 &315944951666586202
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5865940515695367313}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4d1bc5515e3ab954e80599c538834774, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::KinematicCharacterController.KinematicCharacterMotor
Capsule: {fileID: 1067183535363547161}
CapsuleRadius: 0.2
CapsuleHeight: 1.35
CapsuleYOffset: 0.675
CapsulePhysicsMaterial: {fileID: 0}
GroundDetectionExtraDistance: 0
MaxStableSlopeAngle: 60
StableGroundLayers:
serializedVersion: 2
m_Bits: 4294967295
DiscreteCollisionEvents: 0
StepHandling: 1
MaxStepHeight: 0.5
AllowSteppingWithoutStableGrounding: 0
MinRequiredStepDepth: 0
LedgeAndDenivelationHandling: 1
MaxStableDistanceFromLedge: 0
MaxVelocityForLedgeSnap: 0
MaxStableDenivelationAngle: 180
InteractiveRigidbodyHandling: 1
RigidbodyInteractionType: 0
SimulatedCharacterMass: 1
PreserveAttachedRigidbodyMomentum: 1
HasPlanarConstraint: 0
PlanarConstraintAxis: {x: 0, y: 0, z: 1}
MaxMovementIterations: 5
MaxDecollisionIterations: 1
CheckMovementInitialOverlaps: 1
KillVelocityWhenExceedMaxMovementIterations: 1
KillRemainingMovementWhenExceedMaxMovementIterations: 1
--- !u!114 &4168235549514175667
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 5865940515695367313}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 45d9830d22b54832ade96a92f599643a, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Code.Game.Gameplay.Player.PlayerMovementController
Motor: {fileID: 315944951666586202}
Freeze: 0
MaxStableMoveSpeed: 3
StableMovementSharpness: 15
OrientationSharpness: 10
OrientationMethod: 0
MaxAirMoveSpeed: 15
AirAccelerationSpeed: 15
Drag: 0.1
BonusOrientationMethod: 0
BonusOrientationSharpness: 1
BonusOrientationGravitySharpness: 0
Gravity: {x: 0, y: -30, z: 0}
IgnoredColliders: []
--- !u!1 &6137683549794358498
GameObject:
m_ObjectHideFlags: 0
@@ -1751,6 +1893,7 @@ Transform:
m_Children:
- {fileID: 257380888280300741}
- {fileID: 8374810763302122734}
- {fileID: 342766060722697506}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!136 &6939642111494274883
@@ -1931,6 +2074,8 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: a1803413768b4cf990d25732721300ea, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::Code.OfficeGame.BattleMode.Actions.Attacks.BattleActionPlayerAttackMMA
holoCop: {fileID: 6894003323627830512}
animator: {fileID: 2511146916935397012}
--- !u!114 &4165226838920277257
MonoBehaviour:
m_ObjectHideFlags: 0
@@ -1972,6 +2117,121 @@ MonoBehaviour:
Collider: {fileID: 2873132192154572844}
- PartType: 3
Collider: {fileID: 1759856401891365470}
--- !u!1001 &3151904053883985926
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 342766060722697506}
m_Modifications:
- target: {fileID: -8679921383154817045, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_LocalScale.x
value: 80.4
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_LocalScale.y
value: 80.4
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_LocalScale.z
value: 80.4
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_LocalRotation.x
value: -0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_LocalRotation.y
value: -0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_LocalRotation.z
value: -0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: -8679921383154817045, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_ConstrainProportionsScale
value: 1
objectReference: {fileID: 0}
- target: {fileID: -6452266432751415832, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
- target: {fileID: -2321449255681548753, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_LocalScale.x
value: 0.87
objectReference: {fileID: 0}
- target: {fileID: -2321449255681548753, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_LocalScale.y
value: 0.87
objectReference: {fileID: 0}
- target: {fileID: -2321449255681548753, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_LocalScale.z
value: 0.87
objectReference: {fileID: 0}
- target: {fileID: -2321449255681548753, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_ConstrainProportionsScale
value: 1
objectReference: {fileID: 0}
- target: {fileID: 919132149155446097, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_Name
value: Player_M1_1
objectReference: {fileID: 0}
- target: {fileID: 5797954692085622370, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_Name
value: Player_M1
objectReference: {fileID: 0}
- target: {fileID: 5866666021909216657, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_Controller
value:
objectReference: {fileID: 9100000, guid: 0a88085cbabf38ae084dd83fcdd5e566, type: 2}
- target: {fileID: 9148548460791437811, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
--- !u!4 &3186131212207065069 stripped
Transform:
m_CorrespondingSourceObject: {fileID: -8679921383154817045, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
m_PrefabInstance: {fileID: 3151904053883985926}
m_PrefabAsset: {fileID: 0}
--- !u!95 &8851620147763273111 stripped
Animator:
m_CorrespondingSourceObject: {fileID: 5866666021909216657, guid: 22f5406d0dd3e496dab66400ad658fb8, type: 3}
m_PrefabInstance: {fileID: 3151904053883985926}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &8337279434272854789
PrefabInstance:
m_ObjectHideFlags: 0
+6
View File
@@ -22,6 +22,12 @@ MonoBehaviour:
m_SubObjectType:
m_SubObjectGUID:
m_EditorAssetChanged: 0
PlayerDecisionMarkerConfig:
m_AssetGUID: 5ff8bf03d4ecf4809a23c66411ca6f5a
m_SubObjectName:
m_SubObjectType:
m_SubObjectGUID:
m_EditorAssetChanged: 0
ParticleInfo: Particles
InputServiceConfig:
m_AssetGUID: e92086276d9b32213abd64903ad4b730