249 lines
7.0 KiB
C#
249 lines
7.0 KiB
C#
using System.Collections;
|
|
using Cinemachine;
|
|
using Convention.WindowsUI.Variant;
|
|
using UnityEngine;
|
|
|
|
namespace Demo.Game
|
|
{
|
|
public class CameraObject : ScriptableObject
|
|
{
|
|
private Camera MainCamera;
|
|
private CinemachineVirtualCamera VirtualCamera;
|
|
|
|
public static CameraObject MakeCameraObject()
|
|
{
|
|
Transform mainCameraTransform = Editor.EditorController.instance.MainGameController.MainCameraTransform;
|
|
if (mainCameraTransform.GetComponent<CameraObject>() != null)
|
|
{
|
|
Debug.LogError($"Too much {nameof(CameraObject)}", mainCameraTransform);
|
|
return null;
|
|
}
|
|
// Binding Output
|
|
FindObjectOfType<SceneGameWindow>().ModuleCamera =
|
|
mainCameraTransform.gameObject.GetComponent<CinemachineVirtualCameraBase>();
|
|
return mainCameraTransform.gameObject.AddComponent<CameraObject>();
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
MainCamera = Camera.main;
|
|
VirtualCamera = GetComponent<CinemachineVirtualCamera>();
|
|
}
|
|
|
|
public override IEnumerator LoadScript(string script)
|
|
{
|
|
yield return base.LoadScript(script);
|
|
}
|
|
|
|
public override IEnumerator UnloadScript()
|
|
{
|
|
yield return base.UnloadScript();
|
|
FindObjectOfType<SceneGameWindow>().ModuleCamera = null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置是否为正交相机
|
|
/// </summary>
|
|
/// <param name="arg"></param>
|
|
[ScriptableCall(@"
|
|
<summary>
|
|
设置是否为正交相机
|
|
</summary>
|
|
<param name=""arg""></param>
|
|
")]
|
|
public void SetOrthographic(string arg)
|
|
{
|
|
MainCamera.orthographic = ConvertValue<bool>(arg);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置相机视野角度
|
|
/// </summary>
|
|
/// <param name="arg"></param>
|
|
[ScriptableCall(@"
|
|
<summary>
|
|
设置相机视野角度
|
|
</summary>
|
|
<param name=""arg"">视野角度值</param>
|
|
")]
|
|
public void SetFieldOfView(string arg)
|
|
{
|
|
MainCamera.fieldOfView = Parse(arg);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置正交相机的尺寸
|
|
/// </summary>
|
|
/// <param name="arg"></param>
|
|
[ScriptableCall(@"
|
|
<summary>
|
|
设置正交相机的尺寸
|
|
</summary>
|
|
<param name=""arg"">正交相机尺寸值</param>
|
|
")]
|
|
public void SetOrthographicSize(string arg)
|
|
{
|
|
MainCamera.orthographicSize = Parse(arg);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置近裁剪面距离
|
|
/// </summary>
|
|
/// <param name="arg"></param>
|
|
[ScriptableCall(@"
|
|
<summary>
|
|
设置近裁剪面距离
|
|
</summary>
|
|
<param name=""arg"">近裁剪面距离值</param>
|
|
")]
|
|
public void SetNearClipPlane(string arg)
|
|
{
|
|
MainCamera.nearClipPlane = Parse(arg);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置远裁剪面距离
|
|
/// </summary>
|
|
/// <param name="arg"></param>
|
|
[ScriptableCall(@"
|
|
<summary>
|
|
设置远裁剪面距离
|
|
</summary>
|
|
<param name=""arg"">远裁剪面距离值</param>
|
|
")]
|
|
public void SetFarClipPlane(string arg)
|
|
{
|
|
MainCamera.farClipPlane = Parse(arg);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置相机深度
|
|
/// </summary>
|
|
/// <param name="arg"></param>
|
|
[ScriptableCall(@"
|
|
<summary>
|
|
设置相机深度
|
|
</summary>
|
|
<param name=""arg"">相机深度值</param>
|
|
")]
|
|
public void SetDepth(string arg)
|
|
{
|
|
MainCamera.depth = Parse(arg);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置虚拟相机跟随目标
|
|
/// </summary>
|
|
/// <param name="targetName">对象相对路径</param>
|
|
[ScriptableCall(@"
|
|
<summary>
|
|
设置虚拟相机跟随目标
|
|
</summary>
|
|
<param name=""targetName"">对象相对路径</param>
|
|
")]
|
|
public void SetVirtualCameraFollow(string targetName)
|
|
{
|
|
var target = FindWithPath(targetName, false);
|
|
if (target != null)
|
|
{
|
|
VirtualCamera.Follow = target.transform;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置虚拟相机观察目标
|
|
/// </summary>
|
|
/// <param name="targetName">对象相对路径</param>
|
|
[ScriptableCall(@"
|
|
<summary>
|
|
设置虚拟相机观察目标
|
|
</summary>
|
|
<param name=""targetName"">对象相对路径</param>
|
|
")]
|
|
public void SetVirtualCameraLookAt(string targetName)
|
|
{
|
|
var target = FindWithPath(targetName, false);
|
|
if (target != null)
|
|
{
|
|
VirtualCamera.LookAt = target.transform;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置虚拟相机跟随偏移
|
|
/// </summary>
|
|
/// <param name="x">X轴偏移</param>
|
|
/// <param name="y">Y轴偏移</param>
|
|
/// <param name="z">Z轴偏移</param>
|
|
[ScriptableCall(@"
|
|
<summary>
|
|
设置虚拟相机跟随偏移
|
|
</summary>
|
|
<param name=""x"">X轴偏移</param>
|
|
<param name=""y"">Y轴偏移</param>
|
|
<param name=""z"">Z轴偏移</param>
|
|
")]
|
|
public void SetVirtualCameraFollowOffset(string x, string y, string z)
|
|
{
|
|
var body = VirtualCamera.GetCinemachineComponent<Cinemachine.CinemachineTransposer>();
|
|
if (body != null)
|
|
{
|
|
body.m_FollowOffset = new Vector3(
|
|
Parse(x),
|
|
Parse(y),
|
|
Parse(z)
|
|
);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置虚拟相机跟随阻尼
|
|
/// </summary>
|
|
/// <param name="x">X轴阻尼</param>
|
|
/// <param name="y">Y轴阻尼</param>
|
|
/// <param name="z">Z轴阻尼</param>
|
|
[ScriptableCall(@"
|
|
<summary>
|
|
设置虚拟相机跟随阻尼
|
|
</summary>
|
|
<param name=""x"">X轴阻尼</param>
|
|
<param name=""y"">Y轴阻尼</param>
|
|
<param name=""z"">Z轴阻尼</param>
|
|
")]
|
|
public void SetVirtualCameraFollowDamping(string x, string y, string z)
|
|
{
|
|
var body = VirtualCamera.GetCinemachineComponent<Cinemachine.CinemachineTransposer>();
|
|
if (body != null)
|
|
{
|
|
body.m_XDamping = Parse(x);
|
|
body.m_YDamping = Parse(y);
|
|
body.m_ZDamping = Parse(z);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 设置虚拟相机观察阻尼
|
|
/// </summary>
|
|
/// <param name="x">X轴阻尼</param>
|
|
/// <param name="y">Y轴阻尼</param>
|
|
/// <param name="z">Z轴阻尼</param>
|
|
[ScriptableCall(@"
|
|
<summary>
|
|
设置虚拟相机观察阻尼
|
|
</summary>
|
|
<param name=""x"">X轴阻尼</param>
|
|
<param name=""y"">Y轴阻尼</param>
|
|
<param name=""z"">Z轴阻尼</param>
|
|
")]
|
|
public void SetVirtualCameraLookAtDamping(string x, string y, string z)
|
|
{
|
|
var aim = VirtualCamera.GetCinemachineComponent<Cinemachine.CinemachineComposer>();
|
|
if (aim != null)
|
|
{
|
|
aim.m_HorizontalDamping = Parse(x);
|
|
aim.m_VerticalDamping = Parse(y);
|
|
}
|
|
}
|
|
}
|
|
}
|