This commit is contained in:
MrTorex committed 2026-02-07 10:54:20 +03:00
1 parent 8151450cdc
commit a70076ebe9
7 files changed
+1619 -2

No files matched your search

+69
View File
@@ -0,0 +1,69 @@
using Code.Base;
using UnityEngine;
namespace Code.Lab2
{
public class ArriveAvoid : AgentBehaviour
{
public float targetRadius = 5f;
public float slowRadius = 10f;
public float timeToTarget = 0.1f;
public Transform obstacle;
public float avoidanceRadius = 10f;
public float maxAvoidForce = 50f;
public override Steering GetSteering()
{
var steering = new Steering();
var toTarget = target.transform.position - transform.position;
var distanceToTarget = toTarget.magnitude;
if (distanceToTarget < targetRadius)
return steering;
var targetSpeed = distanceToTarget > slowRadius
? Agent.maxSpeed
: Agent.maxSpeed * (distanceToTarget / slowRadius);
var desiredVelocity = toTarget.normalized * targetSpeed;
var arriveForce = (desiredVelocity - Agent.velocity) / timeToTarget;
var avoidForce = Vector3.zero;
if (obstacle)
{
var toObstacle = obstacle.position - transform.position;
var distToObstacle = toObstacle.magnitude;
if (distToObstacle < avoidanceRadius)
{
var forward = Agent.velocity.normalized;
if (forward == Vector3.zero) forward = toTarget.normalized;
var awayFromObstacle = -toObstacle;
var lateral = awayFromObstacle - Vector3.Project(awayFromObstacle, forward);
if (lateral.magnitude < 0.1f)
{
lateral = new Vector3(-forward.z, 0f, forward.x).normalized;
}
var avoidanceStrength = 1f - (distToObstacle / avoidanceRadius);
avoidForce = lateral.normalized * (maxAvoidForce * avoidanceStrength);
}
}
steering.Linear = arriveForce + avoidForce;
if (steering.Linear.magnitude > Agent.maxAcceleration)
{
steering.Linear = steering.Linear.normalized * Agent.maxAcceleration;
}
return steering;
}
}
}
+3
View File
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 102365b663634ccbaaf4b927b4d65075
timeCreated: 1770448799
+5
View File
@@ -20,6 +20,7 @@ namespace Code.UI
[SerializeField] private Button toMenuButton;
[SerializeField] private Button resetButton;
[SerializeField] private Button dopButton;
private Slider _arriveTargetRadiusSlider;
private Slider _arriveSlowRadiusSlider;
@@ -80,6 +81,8 @@ namespace Code.UI
toMenuButton.onClick.AddListener(LoadMainMenu);
if (resetButton != null)
resetButton.onClick.AddListener(ResetAgents);
if (dopButton != null)
dopButton.onClick.AddListener(LoadDop);
}
private void Start()
@@ -247,6 +250,7 @@ namespace Code.UI
}
private static void LoadMainMenu() => SceneManager.LoadScene("MainMenu");
private static void LoadDop() => SceneManager.LoadScene("Lab2Dop");
private void OnDestroy()
{
@@ -266,6 +270,7 @@ namespace Code.UI
if (toMenuButton != null) toMenuButton.onClick.RemoveListener(LoadMainMenu);
if (resetButton != null) resetButton.onClick.RemoveListener(ResetAgents);
if (dopButton != null) resetButton.onClick.RemoveListener(LoadDop);
}
}
}
+262 -2
View File
@@ -266,6 +266,127 @@ RectTransform:
m_AnchoredPosition: {x: -5, y: 0}
m_SizeDelta: {x: -20, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &53562054
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 53562055}
- component: {fileID: 53562058}
- component: {fileID: 53562057}
- component: {fileID: 53562056}
m_Layer: 5
m_Name: DopButton
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &53562055
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 53562054}
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: 1954699991}
m_Father: {fileID: 1044328680}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 0}
m_AnchoredPosition: {x: 600, y: 100}
m_SizeDelta: {x: -1400, y: 100}
m_Pivot: {x: 0.5, y: 0}
--- !u!114 &53562056
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 53562054}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Button
m_Navigation:
m_Mode: 3
m_WrapAround: 0
m_SelectOnUp: {fileID: 0}
m_SelectOnDown: {fileID: 0}
m_SelectOnLeft: {fileID: 0}
m_SelectOnRight: {fileID: 0}
m_Transition: 1
m_Colors:
m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
m_ColorMultiplier: 1
m_FadeDuration: 0.1
m_SpriteState:
m_HighlightedSprite: {fileID: 0}
m_PressedSprite: {fileID: 0}
m_SelectedSprite: {fileID: 0}
m_DisabledSprite: {fileID: 0}
m_AnimationTriggers:
m_NormalTrigger: Normal
m_HighlightedTrigger: Highlighted
m_PressedTrigger: Pressed
m_SelectedTrigger: Selected
m_DisabledTrigger: Disabled
m_Interactable: 1
m_TargetGraphic: {fileID: 53562057}
m_OnClick:
m_PersistentCalls:
m_Calls: []
--- !u!114 &53562057
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 53562054}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
m_Type: 1
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &53562058
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 53562054}
m_CullTransparentMesh: 1
--- !u!1 &77168447
GameObject:
m_ObjectHideFlags: 0
@@ -4726,6 +4847,7 @@ RectTransform:
- {fileID: 1947221969}
- {fileID: 2080304810}
- {fileID: 1447469624}
- {fileID: 53562055}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
@@ -5564,7 +5686,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 0}
m_AnchoredPosition: {x: 300, y: 100}
m_AnchoredPosition: {x: 0, y: 100}
m_SizeDelta: {x: -1400, y: 100}
m_Pivot: {x: 0.5, y: 0}
--- !u!114 &1447469625
@@ -6050,6 +6172,7 @@ MonoBehaviour:
leaveTarget: {fileID: 1575067295}
toMenuButton: {fileID: 2080304811}
resetButton: {fileID: 1447469625}
dopButton: {fileID: 53562056}
--- !u!1 &1542833677
GameObject:
m_ObjectHideFlags: 0
@@ -8152,6 +8275,143 @@ RectTransform:
m_AnchoredPosition: {x: -5, y: 0}
m_SizeDelta: {x: -20, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &1954699990
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1954699991}
- component: {fileID: 1954699993}
- component: {fileID: 1954699992}
m_Layer: 5
m_Name: Text (TMP)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1954699991
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1954699990}
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: 53562055}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1954699992
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1954699990}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: Dop
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: bec623f98c6d4c87a996583e4e315f82, type: 2}
m_sharedMaterial: {fileID: -3152264912835432353, guid: bec623f98c6d4c87a996583e4e315f82, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4281479730
m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 72
m_fontSizeBase: 72
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_characterHorizontalScale: 1
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_TextWrappingMode: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 0
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_EmojiFallbackSupport: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!222 &1954699993
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1954699990}
m_CullTransparentMesh: 1
--- !u!1 &1972281804
GameObject:
m_ObjectHideFlags: 0
@@ -8827,7 +9087,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 0}
m_AnchoredPosition: {x: -300, y: 100}
m_AnchoredPosition: {x: -600, y: 100}
m_SizeDelta: {x: -1400, y: 100}
m_Pivot: {x: 0.5, y: 0}
--- !u!114 &2080304811
File diff suppressed because it is too large. Load diff
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: ad04b4e3db8e92a8dae1c954ee95f817
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant: