Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 연속 펄스 부분 수열의 합
- 오브젝트 풀링
- Lv.3
- Back Tracking
- Animation State Machine
- 충돌위험 찾기
- 유니티
- 양과 늑대
- dfs
- Hp바
- 플레이어 이동
- Algorithm
- pccp 기출문제 1번
- Lv2
- pccp 기출문제 3번
- LayerMark
- Blend Type
- 프로그래머스
- Ainimation Blending
- heap tree
- 2D슈팅게임
- dp 알고리즘
- pccp 기출문제 2번
- CSharp #자료구조
- C#
- 플레이어 방향전환
- 백준 c++ 9375번
- 미로 탈출 명령어
- 9375번
- Unity
Archives
- Today
- Total
주녘공부일지
[해피스케치] 카메라 인스펙터 툴 본문
카메라 인스펙터 툴
해피스케치의 요청에 따라 모션 감지를 이용한 AR게임 프로토타입 모델을 제작하는 과정에서 구현
- 여러 가지 미니게임 스테이지를 구현하여 2명의 사용자가 대전을 하는 AR 멀티 게임
- 기획자가 직접 특정 스테이지의 카메라 세팅 값을 설정하여 Save&Load 할 수 있음
- 인게임에서 사용되는 TeamCamera 클래스를 상속받아 CameraEditor를 구현
- 스테이지가 로드되면 저장되어 있던 데이터를 스테이지 시작 시 로드하여 세팅하도록 설계
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(CameraEditor))]
public class EditCamera : Editor
{
bool isInitUnlocked = false;
bool isLoadUnlocked = false;
bool isSaveUnocked = false;
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
CameraEditor cameraEditor = (CameraEditor)target;
GUILayout.Space(10);
GUILayout.Label("[ 카메라 에디터 ]", EditorStyles.boldLabel);
// 초기 값 세팅
GUILayout.Space(10);
isInitUnlocked = EditorGUILayout.Toggle("초기 세팅 잠금 해제 ", isInitUnlocked);
GUILayout.Space(5);
if (GUILayout.Button("초기 값으로 세팅") && isInitUnlocked)
{
isInitUnlocked = false;
cameraEditor.InitCameraInfo();
Debug.Log("초기 값으로 세팅 완료");
}
// 데이터 불러오기
GUILayout.Space(5);
isLoadUnlocked = EditorGUILayout.Toggle("불러오기 잠금 해제 ", isLoadUnlocked);
GUILayout.Space(5);
if (GUILayout.Button("데이터 불러오기") && isLoadUnlocked)
{
isLoadUnlocked = false;
if(cameraEditor.LoadCameraInfo())
Debug.Log("스테이지 데이터 불러오기 완료");
}
// 데이터 저장
GUILayout.Space(5);
isSaveUnocked = EditorGUILayout.Toggle("저장하기 잠금 해제 ", isSaveUnocked);
GUILayout.Space(5);
if (GUILayout.Button("데이터 저장하기") && isSaveUnocked)
{
isSaveUnocked = false;
if (cameraEditor.SaveCameraInfo())
Debug.Log("스테이지 데이터 저장하기 완료");
}
GUILayout.Space(20);
}
}
#if UNITY_EDITOR
using System;
using System.IO;
using UnityEngine;
public class CameraEditor : TeamCamera
{
[Header ("[ 카메라 세팅 영역 ]")]
[Space(5f)] [SerializeField] EStageType stageType = EStageType.None;
[Space(5f)] [SerializeField] BaseObject testTarget;
[Space(10f)]
[Range(0f, 180f)] [SerializeField] float fieldOfView = 60f;
[Range(5f, 15f)] [SerializeField] float targetDistance = 5f;
[Range(-10f, 10f)] [SerializeField] float cameraHeight = 5f;
[Range(-10f, 10f)] [SerializeField] float lookAtHeight = 0f;
private void Update() { ... }
private void UpdateCameraInfo() { ... }
public override bool Init() { ... }
public void InitCameraInfo() { ... }
public bool LoadCameraInfo()
{
if(stageType == EStageType.None)
{
Debug.LogWarning("스테이지 타입이 세팅되지 않았습니다.");
return false;
}
string loadPath = Application.dataPath + DataPath.STAGE_JSONDATA_PATH + $"/CameraData{(int)stageType}.json";
return base.LoadCameraDataInfo(loadPath);
}
public bool SaveCameraInfo()
{
if (stageType == EStageType.None)
{
Debug.LogWarning("스테이지 타입이 세팅되지 않았습니다.");
return false;
}
string savePath = Application.dataPath + DataPath.STAGE_JSONDATA_PATH + $"/CameraData{(int)stageType}";
Util.Editor_FileDelete(savePath);
string jsonData = JsonUtility.ToJson(cameraInfoData);
File.WriteAllText(savePath + ".json", jsonData);
return true;
}
}
#endif
'GameDevelopment > [Unity] Project' 카테고리의 다른 글
[마법사의 길] 캐릭터 상태 관리 (0) | 2024.09.09 |
---|---|
[더 챌린저스] 동기화(RPC) & 네트워크(Photon) (1) | 2024.09.09 |
[더 챌린저스] 캐릭터 (0) | 2024.09.09 |
[더 챌린저스] 게임 플레이 영상 (2) | 2024.09.04 |
[페인트 맨] 파이어베이스 DB 관리 (0) | 2024.03.29 |