camera weights added

This commit is contained in:
2024-05-01 14:35:40 +01:00
parent 7e3cc463de
commit e1402f96bf
17 changed files with 430 additions and 45 deletions

View File

@@ -1,4 +1,5 @@
using Cinemachine;
using FMODUnity;
using System.Collections;
using System.Collections.Generic;
using System.Xml.Serialization;
@@ -16,8 +17,11 @@ public class CameraManager : MonoBehaviour
private List<GameObject> m_CameraObjects = new List<GameObject>();
private int m_SameCameraTypeCount;
private List<CameraSettings> m_CameraSettings = new List<CameraSettings>();
private float m_TotalWeight = 0;
private int m_SameCameraTypeCount;
[Header("Layer Masks")]
public LayerMask m_Everything;
@@ -84,7 +88,7 @@ public class CameraManager : MonoBehaviour
if(Input.GetKeyDown(KeyCode.Alpha0 + ( i - ( m_CameraIndex * 10 ) ))){
foreach(GameObject obj in m_CameraObjects){
if(count == i){
Debug.Log($"Swapping to:{obj.name}");
Debug.Log($"Swapping to:{obj.name}, {m_CameraSettings[i].cameraWeight}");
SetCamera(obj);
break;
}
@@ -130,44 +134,45 @@ public class CameraManager : MonoBehaviour
private void SetNewCamera()
{
// Get all objects with 0 prio
// Get all objects with 0 priority
List<int> deactiveCameras = new List<int>();
bool switchCameraType = false;
if (m_SameCameraTypeCount >= 3)
switchCameraType = true;
// Count through camera objects, check if 0 priority (off), we add to
// list of deactivated cameras.
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];
deactiveCameras.Add(i);
if (selectedCamera.tag == m_ActiveCamera.tag)
{
m_SameCameraTypeCount++;
SetCamera(selectedCamera);
}
else
{
m_SameCameraTypeCount = 0;
SetCamera(selectedCamera);
}
List<int> shuffledList = ShuffleList(deactiveCameras);
float totalWeight = CalculateNewTotalWeight(shuffledList);
float randomIndex = Random.Range(0f, totalWeight);
Debug.Log($"Random Number: {randomIndex}");
GameObject selectedCamera = null;
int selectedCameraIndex = 0;
for (int i = 0; i < shuffledList.Count; i++){
randomIndex -= m_CameraSettings[shuffledList[i]].cameraWeight;
Debug.Log($"Adj Index: {randomIndex}, Weight: {totalWeight}, {m_CameraSettings[shuffledList[i]].cameraWeight}, Name: {m_CameraObjects[shuffledList[i]].name}");
if(randomIndex <= 0){
// Activate Selected Camera
selectedCamera = m_CameraObjects[shuffledList[i]];
selectedCameraIndex = shuffledList[i];
break;
}
}
Debug.Log($"Selected Camera: {selectedCamera.name}, {m_CameraSettings[selectedCameraIndex].cameraWeight}");
SetCamera(selectedCamera);
}
private void SetCamera(GameObject camera)
@@ -243,9 +248,42 @@ public class CameraManager : MonoBehaviour
}
Debug.Log($"Camera Count: {m_CameraObjects.Count}");
CreateCameraSettingsList();
}
private void CreateCameraSettingsList(){
VirtualCameraSettings camSettings = null;
foreach(GameObject cam in m_CameraObjects){
camSettings = null;
try{
camSettings = cam.GetComponent<VirtualCameraSettings>();
} catch {
Debug.LogError("No Camera Settings found.");
}
if(camSettings != null){
m_CameraSettings.Add(camSettings.m_CameraSettings);
m_TotalWeight += camSettings.m_CameraSettings.cameraWeight;
}
}
Debug.Log($"Total Weight: {m_TotalWeight}");
}
private float CalculateNewTotalWeight(List<int> deactiveCameras){
float totalWeight = 0;
foreach(int index in deactiveCameras){
totalWeight += m_CameraSettings[index].cameraWeight;
}
return totalWeight;
}
void AddActiveChildrenRecursively(Transform parentTransform)
{
foreach (Transform child in parentTransform)
@@ -260,7 +298,15 @@ public class CameraManager : MonoBehaviour
}
}
private List<int> ShuffleList(List<int> list){
for (int i = list.Count - 1; i > 0; i--){
int j = Random.Range(0, i + 1);
int temp = list[i];
list[i] = list[j];
list[j] = temp;
}
return list;
}
}

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 08e9c5308778a774d9d27349795c67db
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 4acebc972c495fd4d9e7ad7fbcda1013
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,16 @@
%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: 0f7b5c8cb85f2ca47917380097e32b3f, type: 3}
m_Name: ActutationsCamera
m_EditorClassIdentifier:
cameraWeight: 0.4
cameraLayer: 0

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 3fb4b8e2fc7d5ce48888b95813dab32c
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,16 @@
%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: 0f7b5c8cb85f2ca47917380097e32b3f, type: 3}
m_Name: AgentCamera
m_EditorClassIdentifier:
cameraWeight: 1
cameraLayer: 0

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 90cce8c1021807447945bddba695e15e
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,16 @@
%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: 0f7b5c8cb85f2ca47917380097e32b3f, type: 3}
m_Name: BodyCamera
m_EditorClassIdentifier:
cameraWeight: 0.4
cameraLayer: 0

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 0f775fd92a022f441a939e36bbcd6b1e
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,16 @@
%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: 0f7b5c8cb85f2ca47917380097e32b3f, type: 3}
m_Name: EnvironmentCamera
m_EditorClassIdentifier:
cameraWeight: 0.3
cameraLayer: 0

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 42c5ba543fa15ee47bcc3879b6527f54
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,15 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[CreateAssetMenu]
public class CameraSettings : ScriptableObject
{
[Range(0f, 1f)]
[Tooltip("Camera Weight")]
public float cameraWeight = 0;
[Range(0, 1)]
[Tooltip("Layer")]
public int cameraLayer = 0;
}

View File

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

View File

@@ -0,0 +1,8 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class VirtualCameraSettings : MonoBehaviour
{
public CameraSettings m_CameraSettings;
}

View File

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