Files
zeling_v2/Assets/Feel/MMFeedbacks/MMFeedbacksForThirdParty/Cinemachine/Helpers/MMCinemachineHelpers.cs
2026-05-08 11:04:00 +08:00

100 lines
3.7 KiB
C#

using MoreMountains.Feedbacks;
using MoreMountains.Tools;
using UnityEngine;
#if MM_CINEMACHINE
using Cinemachine;
#elif MM_CINEMACHINE3
using Unity.Cinemachine;
#endif
namespace MoreMountains.FeedbacksForThirdParty
{
public class MMCinemachineHelpers : MonoBehaviour
{
public static GameObject AutomaticCinemachineShakersSetup(MMF_Player owner, string feedbackName)
{
GameObject virtualCameraGo = null;
#if MM_CINEMACHINE || MM_CINEMACHINE3
bool newVcam = false;
string additions = owner.name + " "+feedbackName+" feedback automatic shaker setup : ";
#endif
#if MM_CINEMACHINE
//looks for a Cinemachine Brain in the scene
CinemachineBrain cinemachineBrain = (CinemachineBrain)Object.FindObjectOfType(typeof(CinemachineBrain));
if (cinemachineBrain == null)
{
cinemachineBrain = Camera.main.gameObject.AddComponent<CinemachineBrain>();
additions += "Added a Cinemachine Brain to the scene. ";
}
// looks for a vcam in the scene
CinemachineVirtualCamera virtualCamera = (CinemachineVirtualCamera)Object.FindObjectOfType(typeof(CinemachineVirtualCamera));
if (virtualCamera == null)
{
GameObject newVirtualCamera = new GameObject("CinemachineVirtualCamera");
if (Camera.main != null)
{
newVirtualCamera.transform.position = Camera.main.transform.position;
}
virtualCamera = newVirtualCamera.AddComponent<CinemachineVirtualCamera>();
additions += "Added a Cinemachine Virtual Camera to the scene. ";
newVcam = true;
}
virtualCameraGo = virtualCamera.gameObject;
CinemachineImpulseListener impulseListener = virtualCamera.GetComponent<CinemachineImpulseListener>();
if (impulseListener == null)
{
impulseListener = virtualCamera.gameObject.AddComponent<CinemachineImpulseListener>();
additions += "Added an impulse listener. ";
}
#elif MM_CINEMACHINE3
//looks for a Cinemachine Brain in the scene
CinemachineBrain cinemachineBrain = (CinemachineBrain)Object.FindObjectOfType(typeof(CinemachineBrain));
if (cinemachineBrain == null)
{
cinemachineBrain = Camera.main.gameObject.AddComponent<CinemachineBrain>();
additions += "Added a Cinemachine Brain to the scene. ";
}
// looks for a vcam in the scene
CinemachineCamera virtualCamera = (CinemachineCamera)Object.FindObjectOfType(typeof(CinemachineCamera));
if (virtualCamera == null)
{
GameObject newVirtualCamera = new GameObject("CinemachineCamera");
if (Camera.main != null)
{
newVirtualCamera.transform.position = Camera.main.transform.position;
}
virtualCamera = newVirtualCamera.AddComponent<CinemachineCamera>();
additions += "Added a Cinemachine Camera to the scene. ";
newVcam = true;
}
virtualCameraGo = virtualCamera.gameObject;
CinemachineImpulseListener impulseListener = virtualCamera.GetComponent<CinemachineImpulseListener>();
if (impulseListener == null)
{
impulseListener = virtualCamera.gameObject.AddComponent<CinemachineImpulseListener>();
additions += "Added an impulse listener. ";
}
#endif
#if MM_CINEMACHINE || MM_CINEMACHINE3
if (newVcam)
{
virtualCameraGo.MMGetOrAddComponent<MMCinemachineCameraShaker>();
virtualCameraGo.MMGetOrAddComponent<MMCinemachineZoom>();
virtualCameraGo.MMGetOrAddComponent<MMCinemachinePriorityListener>();
virtualCameraGo.MMGetOrAddComponent<MMCinemachineClippingPlanesShaker>();
virtualCameraGo.MMGetOrAddComponent<MMCinemachineFieldOfViewShaker>();
additions += "Added camera shaker, zoom, priority listener, clipping planes shaker and field of view shaker to the Cinemachine Camera. ";
}
MMDebug.DebugLogInfo( additions + "You're all set.");
#endif
return virtualCameraGo;
}
}
}