Browse Source

camera manager added

main
Cailean Finn 6 months ago
parent
commit
6ec36a39a4
  1. 203
      Assets/5_Scenes/DreconDemo.unity
  2. 210
      Assets/8_Scripts/1_Managers/CameraManager.cs
  3. 11
      Assets/8_Scripts/1_Managers/CameraManager.cs.meta
  4. 2
      Assets/ML-Agents/Timers/DreconDemo_timers.json
  5. 4
      ProjectSettings/TagManager.asset

203
Assets/5_Scenes/DreconDemo.unity

@ -168,7 +168,7 @@ GameObject:
- component: {fileID: 153031627}
m_Layer: 0
m_Name: Face On
m_TagString: Untagged
m_TagString: vc_Agent
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
@ -584,7 +584,7 @@ MonoBehaviour:
m_BlendUpdateMethod: 1
m_DefaultBlend:
m_Style: 1
m_Time: 2
m_Time: 3
m_CustomCurve:
serializedVersion: 2
m_Curve: []
@ -740,85 +740,6 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
attenuationObject: {fileID: 0}
--- !u!1 &372654295
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 372654296}
- component: {fileID: 372654297}
m_Layer: 0
m_Name: Mound-Side
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &372654296
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 372654295}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0.8935517, z: -0, w: 0.4489604}
m_LocalPosition: {x: 34, y: 9, z: 12.8}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 2103700521}
m_Father: {fileID: 1346050330}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &372654297
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 372654295}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 45e653bab7fb20e499bda25e1b646fea, type: 3}
m_Name:
m_EditorClassIdentifier:
m_ExcludedPropertiesInInspector:
- m_Script
m_LockStageInInspector:
m_StreamingVersion: 20170927
m_Priority: 10
m_StandbyUpdate: 2
m_LookAt: {fileID: 0}
m_Follow: {fileID: 0}
m_Lens:
FieldOfView: 4.64
OrthographicSize: 0.63
NearClipPlane: 0.01
FarClipPlane: 5000
Dutch: 0
ModeOverride: 2
LensShift: {x: 0, y: 0}
GateFit: 2
FocusDistance: 10
m_SensorSize: {x: 1, y: 1}
Iso: 200
ShutterSpeed: 0.005
Aperture: 16
BladeCount: 5
Curvature: {x: 2, y: 11}
BarrelClipping: 0.25
Anamorphism: 0
m_Transitions:
m_BlendHint: 0
m_InheritPosition: 0
m_OnCameraLive:
m_PersistentCalls:
m_Calls: []
m_LegacyBlendHint: 0
m_ComponentOwner: {fileID: 2103700521}
--- !u!1 &410087039
GameObject:
m_ObjectHideFlags: 0
@ -1082,7 +1003,7 @@ GameObject:
- component: {fileID: 552738674}
m_Layer: 0
m_Name: Mound-Top
m_TagString: Untagged
m_TagString: vc_Body
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
@ -1435,7 +1356,7 @@ GameObject:
- component: {fileID: 882491595}
m_Layer: 0
m_Name: POV
m_TagString: Untagged
m_TagString: vc_Agent
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
@ -1766,7 +1687,7 @@ Canvas:
m_Enabled: 1
serializedVersion: 3
m_RenderMode: 0
m_Camera: {fileID: 0}
m_Camera: {fileID: 330585545}
m_PlaneDistance: 100
m_PixelPerfect: 0
m_ReceivesEvents: 1
@ -2085,7 +2006,7 @@ GameObject:
m_Component:
- component: {fileID: 1346050330}
m_Layer: 0
m_Name: CM
m_Name: CM List
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@ -2107,7 +2028,6 @@ Transform:
- {fileID: 153031625}
- {fileID: 1955078060}
- {fileID: 882491598}
- {fileID: 372654296}
- {fileID: 552738672}
m_Father: {fileID: 547443783}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@ -2143,9 +2063,9 @@ RectTransform:
m_Children: []
m_Father: {fileID: 951379159}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 1}
m_AnchorMax: {x: 0.5, y: 1}
m_AnchoredPosition: {x: 0, y: -64.3}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 430}
m_SizeDelta: {x: 1800, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1361807061
@ -2168,7 +2088,9 @@ MonoBehaviour:
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: 900,0000
m_text: '900,0000
1.00'
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: e43a431f01118124d8d1cf15a46635c3, type: 2}
m_sharedMaterial: {fileID: -966069743490610113, guid: e43a431f01118124d8d1cf15a46635c3,
@ -2203,7 +2125,7 @@ MonoBehaviour:
m_fontSizeMin: 100
m_fontSizeMax: 175
m_fontStyle: 0
m_HorizontalAlignment: 2
m_HorizontalAlignment: 1
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
@ -2622,7 +2544,7 @@ GameObject:
- component: {fileID: 1955078057}
m_Layer: 0
m_Name: Feet
m_TagString: Untagged
m_TagString: vc_Agent
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
@ -2714,7 +2636,7 @@ Transform:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1955078056}
serializedVersion: 2
m_LocalRotation: {x: 0.0000005639385, y: 0.7132504, z: -0.7009093, w: 0.0000005738679}
m_LocalRotation: {x: -0.000000563939, y: 0.7132504, z: -0.7009093, w: -0.0000005738685}
m_LocalPosition: {x: 18.113062, y: 10.981609, z: -0.6314695}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
@ -2731,8 +2653,9 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 2024068565}
- component: {fileID: 2024068566}
m_Layer: 0
m_Name: CameraManager
m_Name: Camera Manager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
@ -2753,6 +2676,34 @@ Transform:
m_Children: []
m_Father: {fileID: 760971828}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &2024068566
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2024068564}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c001ebec265d2834486167f0ecb3d40d, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Everything:
serializedVersion: 2
m_Bits: 383
m_Agent:
serializedVersion: 2
m_Bits: 127
m_Bodies:
serializedVersion: 2
m_Bits: 311
m_Environment:
serializedVersion: 2
m_Bits: 63
m_CameraBlendMin: 3
m_CameraBlendMax: 4
m_CameraSwapMin: 7
m_CameraSwapMax: 21
--- !u!1 &2036798639
GameObject:
m_ObjectHideFlags: 0
@ -2817,68 +2768,6 @@ Transform:
- {fileID: 410087041}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &2103700520
GameObject:
m_ObjectHideFlags: 3
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2103700521}
- component: {fileID: 2103700522}
- component: {fileID: 2103700523}
m_Layer: 0
m_Name: cm
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2103700521
Transform:
m_ObjectHideFlags: 3
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2103700520}
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: 372654296}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &2103700522
MonoBehaviour:
m_ObjectHideFlags: 3
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2103700520}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ac0b09e7857660247b1477e93731de29, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &2103700523
MonoBehaviour:
m_ObjectHideFlags: 3
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 2103700520}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 68bb026fafb42b14791938953eaace77, type: 3}
m_Name:
m_EditorClassIdentifier:
m_NoiseProfile: {fileID: 11400000, guid: a3dacaec0287d7444b4bd276816e1666, type: 2}
m_PivotOffset: {x: 0, y: 0, z: 0}
m_AmplitudeGain: 0.31
m_FrequencyGain: 0.34
mNoiseOffsets: {x: -47.187897, y: 705.16565, z: -658.32715}
--- !u!1 &2115541932
GameObject:
m_ObjectHideFlags: 0
@ -2913,7 +2802,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0}
m_AnchorMax: {x: 0.5, y: 0}
m_AnchoredPosition: {x: -5, y: 103.3}
m_AnchoredPosition: {x: -5, y: 103.29999}
m_SizeDelta: {x: 1600, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &2115541934

210
Assets/8_Scripts/1_Managers/CameraManager.cs

@ -0,0 +1,210 @@
using Cinemachine;
using System.Collections;
using System.Collections.Generic;
using System.Xml.Serialization;
using UnityEngine;
public class CameraManager : MonoBehaviour
{
public static CameraManager _instance { get; private set; }
private GameObject m_Brain;
private Camera m_Camera;
private GameObject m_ActiveCamera;
private List<GameObject> m_CameraObjects = new List<GameObject>();
private int m_SameCameraTypeCount;
[Header("Layer Masks")]
public LayerMask m_Everything;
public LayerMask m_Agent;
public LayerMask m_Bodies;
public LayerMask m_Environment;
[Header("Camera Settings")]
[Range(2, 20)]
public int m_CameraBlendMin;
[Range(2, 20)]
public int m_CameraBlendMax;
[Range(5, 180)]
public int m_CameraSwapMin;
[Range(5, 180)]
public int m_CameraSwapMax;
private void Awake()
{
if(_instance != null)
Destroy(this);
else
_instance = this;
}
private void OnEnable()
{
CreateCameraList();
InitialCameraSetup();
SetCullingMask();
}
private void Start()
{
StartCoroutine(CameraSwitch());
}
IEnumerator CameraSwitch()
{
SetNewCamera();
yield return new WaitForSecondsRealtime(Random.Range(m_CameraSwapMin, m_CameraSwapMax));
StartCoroutine(CameraSwitch());
}
private void SetCullingMask()
{
m_Camera = m_Brain.GetComponent<Camera>();
string currentTag = m_ActiveCamera.tag;
switch (currentTag)
{
case "vc_Agent":
m_Camera.cullingMask = m_Agent;
break;
case "vc_Body":
m_Camera.cullingMask = m_Bodies;
break;
case "vc_Environment":
m_Camera.cullingMask = m_Bodies;
break;
default:
case "vc_Default":
m_Camera.cullingMask = m_Everything;
break;
}
}
private void SetNewCamera()
{
// Get all objects with 0 prio
List<int> deactiveCameras = new List<int>();
bool switchCameraType = false;
if (m_SameCameraTypeCount >= 3)
switchCameraType = true;
for(int i = 0; i < m_CameraObjects.Count; i++)
{
GameObject t = m_CameraObjects[i];
CinemachineVirtualCamera virtualCamera = t.GetComponent<CinemachineVirtualCamera>();
if (virtualCamera != null && virtualCamera.Priority == 0)
{
if (switchCameraType)
{
if(t.tag != m_ActiveCamera.tag)
deactiveCameras.Add(i);
}
else
{
deactiveCameras.Add(i);
}
}
}
int randomIndex = deactiveCameras[Random.Range(0, deactiveCameras.Count - 1)];
GameObject selectedCamera = m_CameraObjects[randomIndex];
if (selectedCamera.tag == m_ActiveCamera.tag)
{
m_SameCameraTypeCount++;
SetCamera(selectedCamera);
}
else
{
m_SameCameraTypeCount = 0;
SetCamera(selectedCamera);
}
}
private void SetCamera(GameObject camera)
{
SetCameraBlend(camera);
// Set all camera to active, and set all priorities to 0, bar the first camera
foreach (GameObject obj in m_CameraObjects)
{
CinemachineVirtualCamera vCam = obj.GetComponent<CinemachineVirtualCamera>();
vCam.Priority = 0;
}
camera.GetComponent<CinemachineVirtualCamera>().Priority = 1;
m_ActiveCamera = camera;
SetCullingMask();
}
private void SetCameraBlend(GameObject pastCamera)
{
// Check activate camera tag, and apply the necessary blend-mode
CinemachineBrain cmBrain = m_Brain.GetComponent<CinemachineBrain>();
float blendtime = (float)Random.Range(m_CameraBlendMin, m_CameraBlendMax);
if (AreDifferentPairs(pastCamera.tag, m_ActiveCamera.tag, "vc_Body", "vc_Agent"))
blendtime = 0;
cmBrain.m_DefaultBlend.m_Time = blendtime;
}
private bool AreDifferentPairs(string a, string b, string pair1, string pair2)
{
return (a == pair1 && b == pair2) || (a == pair2 && b == pair1);
}
private void InitialCameraSetup()
{
// Set all camera to active, and set all priorities to 0, bar the first camera
foreach(GameObject obj in m_CameraObjects)
{
CinemachineVirtualCamera vCam = obj.GetComponent<CinemachineVirtualCamera>();
vCam.Priority = 0;
}
m_CameraObjects[0].GetComponent<CinemachineVirtualCamera>().Priority = 1;
m_ActiveCamera = m_CameraObjects[0];
}
private void CreateCameraList()
{
GameObject parentObject = GameObject.Find("CM List");
if(parentObject != null)
{
foreach(Transform child in parentObject.transform)
{
m_CameraObjects.Add(child.gameObject);
}
}
else
{
Debug.LogError("CM List <GameObject> not found.");
}
try
{
m_Brain = GameObject.Find("CM Brain");
}
catch
{
Debug.LogError("CM Brain <GameObject> could not be found.");
}
}
}

11
Assets/8_Scripts/1_Managers/CameraManager.cs.meta

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: c001ebec265d2834486167f0ecb3d40d
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

2
Assets/ML-Agents/Timers/DreconDemo_timers.json

@ -1 +1 @@
{"count":1,"self":104.3282752,"total":107.71104799999999,"children":{"InitializeActuators":{"count":1,"self":0.0010256,"total":0.0010256,"children":null},"InitializeSensors":{"count":1,"self":0.0010049,"total":0.0010049,"children":null},"AgentSendState":{"count":6105,"self":0.0373762,"total":1.0367875,"children":{"CollectObservations":{"count":3053,"self":0.979634,"total":0.979634,"children":null},"WriteActionMask":{"count":3053,"self":0.0015037,"total":0.0015037,"children":null},"RequestDecision":{"count":3053,"self":0.018273599999999997,"total":0.018273599999999997,"children":null}}},"DecideAction":{"count":6105,"self":1.3827178,"total":1.3827178,"children":null},"AgentAct":{"count":6105,"self":0.9609070999999999,"total":0.9609070999999999,"children":null}},"gauges":{"DReCon-v0.CumulativeReward":{"count":4,"max":1010.40234,"min":79.1054459,"runningAverage":510.454529,"value":246.063034,"weightedAverage":369.397522}},"metadata":{"timer_format_version":"0.1.0","start_time_seconds":"1712679548","unity_version":"2022.3.5f1","command_line_arguments":"C:\\Program Files\\Unity\\Hub\\Editor\\2022.3.5f1\\Editor\\Unity.exe -projectpath C:\\Users\\caile\\Desktop\\Projects\\24_3-Moloch\\2_Unity\\Expeirments\\Drecon2022 -useHub -hubIPC -cloudEnvironment production -licensingIpc LicenseClient-caile -hubSessionId 8620dcf5-e9e3-4cd2-bcfa-e78675b590b7 -accessToken W8bcU9OX7gbO8pWddkbaY47YgOdJ_03h8gDPK3m_oOE005f","communication_protocol_version":"1.5.0","com.unity.ml-agents_version":"2.0.1","scene_name":"DreconDemo","end_time_seconds":"1712679656"}}
{"count":1,"self":150.3252224,"total":156.5476267,"children":{"InitializeActuators":{"count":1,"self":0.00050539999999999992,"total":0.00050539999999999992,"children":null},"InitializeSensors":{"count":1,"self":0.0010003,"total":0.0010003,"children":null},"AgentSendState":{"count":8983,"self":0.0698756,"total":2.1456021,"children":{"CollectObservations":{"count":4492,"self":2.0270064,"total":2.0270064999999997,"children":null},"WriteActionMask":{"count":4492,"self":0.0142121,"total":0.0142121,"children":null},"RequestDecision":{"count":4492,"self":0.0345079,"total":0.0345079,"children":null}}},"DecideAction":{"count":8983,"self":2.7714388,"total":2.7714387,"children":null},"AgentAct":{"count":8983,"self":1.3038522,"total":1.3038522,"children":null}},"gauges":{"DReCon-v0.CumulativeReward":{"count":8,"max":908.505,"min":32.20705,"runningAverage":211.35524,"value":225.457748,"weightedAverage":177.7208}},"metadata":{"timer_format_version":"0.1.0","start_time_seconds":"1712753603","unity_version":"2022.3.5f1","command_line_arguments":"C:\\Program Files\\Unity\\Hub\\Editor\\2022.3.5f1\\Editor\\Unity.exe -projectpath C:\\Users\\caile\\Desktop\\drecon-unity -useHub -hubIPC -cloudEnvironment production -licensingIpc LicenseClient-cail -hubSessionId 4874cbb0-3ab6-4370-af74-dc24d0dd5dbe -accessToken gtOVuQT275ZJTcNaM_jom0CkevszjNJVBq4tQAWtuSU005f","communication_protocol_version":"1.5.0","com.unity.ml-agents_version":"2.0.1","scene_name":"DreconDemo","end_time_seconds":"1712753760"}}

4
ProjectSettings/TagManager.asset

@ -3,7 +3,9 @@
--- !u!78 &1
TagManager:
serializedVersion: 2
tags: []
tags:
- vc_Agent
- vc_Body
layers:
- Default
- TransparentFX

Loading…
Cancel
Save