Unity3D管理多相机很是繁琐,"Camera Preview"着实解决了相机的切换,然而窗口小,比例不能调整,并且在多个相机中禁用启用设置相机视角也很不方便,所以也不是很实用。
Security Camera就简化了这个过程。以下是Security Camera脚本的使用说明:
1、将SecurityCameraEditor放在Editor中,其脚本为:
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
using UnityEngine;
using UnityEditor;
using System.Collections;
[CustomEditor(typeof(SecurityCamera))]
public class SecurityCameraEditor : Editor
{
SecurityCamera _target = null;
void OnEnable(){
if(_target == null && !Application.isPlaying){
_target = (SecurityCamera)target;
_target.camera.depth = 999999;
}
}
void OnDisable(){
if (!Application.isPlaying && _target != null) {
_target.camera.depth = -999999;
}
}
}
2、将SecurityCamera脚本和CameraSwap脚本放在Camera Script文件夹下,其中SecurityCamera脚本要加在每个相机上(主相机MainCamera的Tag为MainCamera,其他相机如Camera1,Camera2,Camera3),CameraSwap脚本加在GameObject(或者其他的物体上)。
SecurityCamera脚本:
using UnityEngine;
using System.Collections;
public class CameraSwap : MonoBehaviour
{
void Update ()
{
//pressing 0, 1, 2, and 3 will swap before the cameras named "Main Camera",
//"Camera 1", "Camera 2", and "Camera 3" which have Security Camera added:
if (Input.GetKeyDown(KeyCode.Alpha0)) {
SecurityCamera.ChangeCamera("Main Camera");
}
if (Input.GetKeyDown(KeyCode.Alpha1)) {
SecurityCamera.ChangeCamera("Camera1");
}
if (Input.GetKeyDown(KeyCode.Alpha2)) {
SecurityCamera.ChangeCamera("Camera2");
}
if (Input.GetKeyDown(KeyCode.Alpha3)) {
SecurityCamera.ChangeCamera("Camera3");
}
}
}
CameraSwap脚本为:
using UnityEngine;
using System.Collections;
public class CameraSwap : MonoBehaviour
{
void Update ()
{
//pressing 0, 1, 2, and 3 will swap before the cameras named "Main Camera",
//"Camera 1", "Camera 2", and "Camera 3" which have Security Camera added:
if (Input.GetKeyDown(KeyCode.Alpha0)) {
SecurityCamera.ChangeCamera("Main Camera");
}
if (Input.GetKeyDown(KeyCode.Alpha1)) {
SecurityCamera.ChangeCamera("Camera1");
}
if (Input.GetKeyDown(KeyCode.Alpha2)) {
SecurityCamera.ChangeCamera("Camera2");
}
if (Input.GetKeyDown(KeyCode.Alpha3)) {
SecurityCamera.ChangeCamera("Camera3");
}
}
}
其文件组织格式如下: