void EditCombatZone(CameraZone _zone) { EditorGUI.BeginChangeCheck(); Vector3 cornerA = Handles.FreeMoveHandle(_zone.cornerA_access, Quaternion.identity, 1, Vector3.zero, Handles.SphereHandleCap); Vector3 cornerB = Handles.FreeMoveHandle(_zone.cornerB_access, Quaternion.identity, 1, Vector3.zero, Handles.SphereHandleCap); if (Tools.current == Tool.Rotate) { Tools.current = Tool.None; } Quaternion rot = Handles.Disc(_zone.transform.rotation, _zone.transform.position, new Vector3(0, 1, 0), 3, false, 0); Handles.Label(cornerA, "Corner A"); Handles.Label(cornerB, "Corner B"); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(_zone, "Change Look At Target Position"); float deltaRotation = Quaternion.Angle(rot, _zone.transform.rotation); float dir = (rot.eulerAngles.y < _zone.transform.rotation.eulerAngles.y) ? -1 : 1; if (deltaRotation != 0) { cornerA = RotatePointAroundPivot(cornerA, _zone.transform.position, new Vector3(0, deltaRotation * dir, 0)); cornerB = RotatePointAroundPivot(cornerB, _zone.transform.position, new Vector3(0, deltaRotation * dir, 0)); } _zone.cornerA_access = cornerA; _zone.cornerB_access = cornerB; _zone.transform.localRotation = rot; _zone.Update(); } }
// Use this for initialization void Start() { agent = gameObject.GetComponent <NavMeshAgent>(); cz = gameObject.GetComponent <CameraZone>(); MoveToNextNode(); }
/// <summary> /// 사용자 정의 속성을 다룹니다. /// </summary> /// <param name="gameObject">대상 GameObject입니다.</param> /// <param name="customProperties">사용자 정의 속성 딕셔너리입니다.</param> public override void HandleCustomProperties(GameObject gameObject, IDictionary <string, string> customProperties) { // 자신이 관리할 객체가 아니라면 종료합니다. if (IsValid(customProperties) == false) { return; } // 사용할 변수를 선언합니다. CameraZone component = gameObject.GetComponent <CameraZone>(); // 속성을 업데이트합니다. component._cameraZoneID = GetIntValue(customProperties, "_cameraZoneID"); component._isCheckpoint = GetBooleanValue(customProperties, "_Checkpoint"); component._checkpointIndex = GetIntValue(customProperties, "_CheckpointIndex"); component._isTopBounded = GetBooleanValue(customProperties, "_isTopBounded"); component._isTopFirst = GetBooleanValue(customProperties, "_isTopFirst"); component._isLeftBounded = GetBooleanValue(customProperties, "_isLeftBounded"); component._isLeftFirst = GetBooleanValue(customProperties, "_isLeftFirst"); component._isRightBounded = GetBooleanValue(customProperties, "_isRightBounded"); component._isRightFirst = GetBooleanValue(customProperties, "_isRightFirst"); component._isBottomBounded = GetBooleanValue(customProperties, "_isBottomBounded"); component._isBottomFirst = GetBooleanValue(customProperties, "_isBottomFirst"); }
public static void ClearCameraZone(CameraZone cz) { if (cameraZone == cz) { ClearCameraZone(); } }
public void SetZoomArea(CameraZone zone) { if (camZone != zone) { camZone = zone; StartCoroutine(_animateSize(zone.zoomSize, zone.zoomDuration, zone)); } }
/// <summary> /// Initialise this instance. /// </summary> protected override void Init() { if (transform.parent != null) { parentZone = transform.parent.GetComponentInParent<CameraZone> (); } if (parentZone == null) Debug.LogError ("A CameraTransitionPoint must be the child of a CameraZone"); }
void OnTriggerEnter2D(Collider2D other) { if (other.gameObject == Player.S.gameObject) { CameraZone.current = this; MainCam.S.LockCamera(position, scale); } }
public void RemoveZone(CameraZone zone) { _currentZones.Remove(zone); if (_currentZones.Count > 0) { _currentZones.Last().ResetMove(); } }
private void HandlePlayerEnterOffice(CameraZone zone) { if (zone == RegionManager.Instance.brutusOffice) { RegionManager.Instance.OnPlayerEnterZone -= HandlePlayerEnterOffice; StartCoroutine(MissionManager.Instance.DisablePlayerMovementDuringCutscene(onEnterCutscene)); } }
private void WaitForPlayerToLeaveMap(CameraZone zone) { if (RegionManager.Instance.GetPlayerCurrentZone() != null) { return; } RegionManager.Instance.OnPlayerExitZone -= WaitForPlayerToLeaveMap; StartCoroutine(GameOver()); }
private void Awake() { arenaFinished = false; currentWaveIndex = -1; zone = GetComponentInChildren <CameraZone>(); if (startOnTriggerEnter && zone != null) { zone.onZoneActivation.AddListener(StartArena); } }
void OnTriggerExit2D(Collider2D other) { if (CameraZone.current != this) return; if (other.gameObject == Player.S.gameObject) { MainCam.S.ReleaseCameraLock(); CameraZone.current = null; } }
/// <summary> /// MonoBehaviour 개체를 초기화 합니다. /// </summary> protected virtual void Start() { // _database = DataBase.Instance; _stageManager = StageManager.Instance; _camera = Camera.main; _camZ = _camera.transform.position.z; _cameraZoneParent = CameraZoneParent.Instance; _cameraZoneBorderParent = CameraZoneBorderParent.Instance; _map = _database.Map; _player = _stageManager.MainPlayer; // 카메라 관련 필드를 초기화합니다. { // 카메라 존 집합을 초기화합니다. CameraZone[] cameraZones = _cameraZoneParent.GetComponentsInChildren <CameraZone>(); _cameraZones = new CameraZone[cameraZones.Length]; foreach (CameraZone cameraZone in cameraZones) { // 음이 아닌 카메라 존 ID의 경우 집합에 추가합니다. int camZoneID = cameraZone._cameraZoneID; if (camZoneID >= 0) { _cameraZones[cameraZone._cameraZoneID] = cameraZone; } } CameraZoneBorder[] borders = _cameraZoneBorderParent.GetComponentsInChildren <CameraZoneBorder>(); foreach (CameraZoneBorder border in borders) { // 음이 아닌 식별자들에 대해서만 처리합니다. if (border._fromID >= 0 && border._toID >= 0) { border._from = _cameraZones[border._fromID]; border._to = _cameraZones[border._toID]; } } // 시작 카메라 존을 맞춥니다. /// _startCameraZone = _cameraZones[0]; _startCameraZone = _stageManager.GetCheckpointCameraZone (_database.GameManager.SpawnPositionIndex); if (_startCameraZone == null) { throw new Exception("시작 카메라 존이 설정되지 않았습니다."); } /// _currentCameraZone = _startCameraZone; UpdateCameraZone(_startCameraZone, false); } // 카메라 뷰 박스를 초기화합니다. InitializeCameraViewBox(); }
static void GenerateCombatZone() { //Restricted tool list List <Tool> i_restrictedTools = new List <Tool>(); i_restrictedTools.Add(Tool.Move); i_restrictedTools.Add(Tool.Rotate); i_restrictedTools.Add(Tool.Scale); //Generates main zone object GameObject i_newZone = new GameObject(); i_newZone.name = "Fight Zone"; i_newZone.AddComponent <ToolRestrictor>().restrictedTools = i_restrictedTools; //Add wave component i_newZone.AddComponent <WaveController>(); //Generates zone selector object GameObject i_zoneSelector = new GameObject(); i_zoneSelector.name = "Camera zone"; i_zoneSelector.transform.SetParent(i_newZone.transform); CameraZone camZone = i_zoneSelector.AddComponent <CameraZone>(); camZone.GenerateZone(CameraCustomType.Combat); //Generate the camera pivot GameObject i_cameraPivot = new GameObject(); i_cameraPivot.name = "Camera pivot"; i_cameraPivot.transform.SetParent(i_newZone.transform); i_cameraPivot.AddComponent <ToolRestrictor>().restrictedTools = i_restrictedTools; //Generate the virtual camera GameObject i_virtualCamera = new GameObject(); i_virtualCamera.name = "Virtual camera"; i_virtualCamera.transform.SetParent(i_cameraPivot.transform); CinemachineVirtualCamera virtualCameraScript = i_virtualCamera.AddComponent <CinemachineVirtualCamera>(); virtualCameraScript.m_Lens.FieldOfView = 60; i_virtualCamera.transform.localPosition = new Vector3(0, 20, -30); i_virtualCamera.transform.localRotation = Quaternion.Euler(30, 0, 0); CameraBehaviour cam = i_virtualCamera.AddComponent <CameraBehaviour>(); cam.pivot = i_cameraPivot.transform; cam.InitCamera(CameraCustomType.Combat, camZone); camZone.linkedCameraBehaviour = cam; i_newZone.transform.position = new Vector3(0, 0.5f, 0); Selection.activeGameObject = i_zoneSelector; }
/// <summary> /// 카메라 존을 업데이트합니다. /// </summary> /// <param name="cameraZone"></param> public void UpdateCameraZone_dep(CameraZone cameraZone, bool beginTransition) { _currentCameraZone = cameraZone; _currentCameraZone_Unity = _currentCameraZone; // 카메라 전이 애니메이션을 시작합니다. if (beginTransition) { _transitioning = true; _transitioningTime = 0f; } }
IEnumerator <WaitForSeconds> _animateSize(float size, float duration, CameraZone zone) { float startT = Time.timeSinceLevelLoad; float progress = 0; float startSize = orthoGraphicSizeAreaTarget; while (progress < 1f && zone == camZone) { progress = Mathf.Clamp01((Time.timeSinceLevelLoad - startT) / duration); orthoGraphicSizeAreaTarget = Mathf.Lerp(startSize, size, progress); yield return(new WaitForSeconds(0.0015f)); } orthoGraphicSizeAreaTarget = size; }
void GenPrefabs() { List <MapPos> Generated = new List <MapPos>(); int prefabX; int prefabY; int mapX = 0; int mapY = 0; for (int y = 0; y < mapData.height; y = y + 2) { for (int x = 0; x < mapData.width; x = x + 2) { MapPos cPos = new MapPos(x, y); if (mapX == (mapData.width / 2) + 1) { mapX = 0; mapY++; } prefabX = mapX * MapData.ROOMWIDTH; prefabY = mapY * MapData.ROOMHEIGHT; GameObject go; if (mapData.LargeRoomPositions.Contains(cPos)) { Generated.AddRange(getLargeRoomPositions(x, y)); go = GenRoom(prefabX, prefabY + MapData.ROOMHEIGHT, _64x64[mapData.Rng.Next(0, _64x64.Count)], true, cPos); CameraZone camZone = go.GetComponent <CameraZone>(); BoxCollider2D camColl = go.GetComponent <BoxCollider2D>(); camZone.zoneWidth = MapData.ROOMWIDTH * 2; camZone.zoneHeight = MapData.ROOMHEIGHT * 2; camColl.size = new Vector2(MapData.ROOMWIDTH * 2, MapData.ROOMHEIGHT * 2); camColl.offset = new Vector2(MapData.ROOMWIDTH, -MapData.ROOMHEIGHT); } else if (mapData.Map[x, y] == 1 && !Generated.Contains(cPos)) { go = GenRoom(prefabX, prefabY, _32x32[mapData.Rng.Next(0, _32x32.Count)], false, cPos); if (cPos.Equals(StartPos)) { CameraZone camZone = go.GetComponent <CameraZone>(); GameObject.FindGameObjectWithTag("MainCamera").GetComponent <CameraController>().curCamZone = camZone; } } mapX++; } } }
protected virtual void OnSceneGUI() { CameraZone i_zone = (CameraZone)target; switch (i_zone.type) { case CameraCustomType.Combat: EditCombatZone(i_zone); break; case CameraCustomType.Circle: EditCircleZone(i_zone); break; } }
public static bool DoesOverlapAnyZone(Vector2 point, ref CameraZone active) { for (int z = 0; z < All.Count; z++) { for (int i = 0; i < All[z].colliders.Length; i++) { if (All[z].colliders[i].OverlapPoint(point)) { active = All[z]; return(true); } } } active = null; return(false); }
void EditCircleZone(CameraZone _zone) { if (Tools.current == Tool.Move) { Tools.current = Tool.None; } EditorGUI.BeginChangeCheck(); Vector3 position = Handles.PositionHandle(_zone.transform.position, _zone.transform.rotation); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(_zone, "Change Look At Target Position"); _zone.transform.position = position; _zone.Update(); } }
private void HandleEnterKitchen(CameraZone zone) { if (zone != RegionManager.Instance.kitchen) { return; } RegionManager.Instance.OnPlayerEnterZone -= HandleEnterKitchen; if (startCutscenePlayed) { return; } GameManager.Instance.GetPlayerController().EnablePlayerInput = false; CameraManager.Instance.OnBlendingComplete += StartDenturesCutscene; }
/// <summary> /// MonoBehaviour 개체를 초기화 합니다. /// </summary> void Start_dep() { // 일반 필드를 초기화합니다. { _camera = Camera.main; /// gameObject.GetComponent<Camera>(); _camZ = _camera.transform.position.z; _map = _database.Map; _player = _map.Player; } // 카메라 관련 필드를 초기화합니다. { // 카메라 뷰 박스의 크기를 초기화합니다. float frustumHeight = Mathf.Abs(2.0f * _camera.transform.position.z * Mathf.Tan(_camera.fieldOfView * 0.5f * Mathf.Deg2Rad)); float frustumWidth = Mathf.Abs(frustumHeight * _camera.aspect); _cameraViewBox.size = new Vector2(frustumWidth, frustumHeight); _cameraViewBox.transform.position = new Vector3 (_camera.transform.position.x, _camera.transform.position.y, 0); // 카메라 존 집합을 초기화합니다. CameraZone[] cameraZones = _cameraZoneParent.GetComponentsInChildren <CameraZone>(); _cameraZones = new CameraZone[cameraZones.Length]; foreach (CameraZone cameraZone in cameraZones) { _cameraZones[cameraZone._cameraZoneID] = cameraZone; } CameraZoneBorder[] borders = _cameraZoneBorderParent.GetComponentsInChildren <CameraZoneBorder>(); foreach (CameraZoneBorder border in borders) { border._from = _cameraZones[border._fromID]; border._to = _cameraZones[border._toID]; } // 시작 카메라 존을 맞춥니다. _startCameraZone = _cameraZones[0]; if (_startCameraZone == null) { throw new Exception("시작 카메라 존이 설정되지 않았습니다."); } /// _currentCameraZone = _startCameraZone; UpdateCameraZone_dep(_startCameraZone, false); } }
/// <summary> /// 카메라 존을 업데이트합니다. /// </summary> /// <param name="cameraZone"></param> public void UpdateCameraZone(CameraZone cameraZone, bool beginTransition) { _currentCameraZone = cameraZone; UpdateCameraZoneBound(); // 카메라 전이 애니메이션을 시작합니다. if (beginTransition) { _transitioning = true; _transitioningTime = 0f; // _xTransitionEnded = false; _yTransitionEnded = false; } }
public void SetCamZone(CameraZone zone) { curCamZone = zone; /* // centered hotspot * min.x = curCamZone.transform.position.x - ((curCamZone.zoneWidth / 2)); * max.x = curCamZone.transform.position.x + (curCamZone.zoneWidth / 2); * min.y = curCamZone.transform.position.y - (curCamZone.zoneHeight / 2); * max.y = curCamZone.transform.position.y + (curCamZone.zoneHeight / 2); */ // top left hotspot min.x = curCamZone.transform.position.x; max.x = curCamZone.transform.position.x + (curCamZone.zoneWidth); min.y = curCamZone.transform.position.y - (curCamZone.zoneHeight); max.y = curCamZone.transform.position.y; }
/// <summary> /// 사용자 정의 속성을 다룹니다. /// </summary> /// <param name="gameObject">대상 GameObject입니다.</param> /// <param name="customProperties">사용자 정의 속성 딕셔너리입니다.</param> public override void HandleCustomProperties(GameObject gameObject, IDictionary <string, string> customProperties) { // 자신이 관리할 객체가 아니라면 종료합니다. if (IsValid(customProperties) == false) { return; } // 사용할 변수를 선언합니다. CameraZone component = gameObject.GetComponent <CameraZone>(); // 속성을 업데이트합니다. component._cameraZoneID = GetIntValue(customProperties, "_cameraZoneID"); // 체크 포인트 속성을 업데이트합니다. bool isCheckpoint = GetBooleanValue(customProperties, "_Checkpoint"); int checkpointIndex = GetIntValue(customProperties, "_CheckpointIndex"); component._isCheckpoint = isCheckpoint; component._checkpointIndex = checkpointIndex; // 바운드 속성을 업데이트합니다. component._isTopBounded = GetBooleanValue(customProperties, "_isTopBounded"); component._isTopFirst = GetBooleanValue(customProperties, "_isTopFirst"); component._isLeftBounded = GetBooleanValue(customProperties, "_isLeftBounded"); component._isLeftFirst = GetBooleanValue(customProperties, "_isLeftFirst"); component._isRightBounded = GetBooleanValue(customProperties, "_isRightBounded"); component._isRightFirst = GetBooleanValue(customProperties, "_isRightFirst"); component._isBottomBounded = GetBooleanValue(customProperties, "_isBottomBounded"); component._isBottomFirst = GetBooleanValue(customProperties, "_isBottomFirst"); // if (isCheckpoint) { // component.name = "Checkpoint" + checkpointIndex; // StageManager stageManager = StageManager.Instance; stageManager._checkpointCameraZones[checkpointIndex] = gameObject.GetComponent <CameraZone>(); } }
public void CustomizePrefab(GameObject prefab) { CameraZone camZone = prefab.AddComponent <CameraZone>(); BoxCollider2D camColl = prefab.GetComponent <BoxCollider2D>(); camZone.zoneWidth = MapData.ROOMWIDTH; camZone.zoneHeight = MapData.ROOMHEIGHT; camColl.size = new Vector2(MapData.ROOMWIDTH, MapData.ROOMHEIGHT); camColl.offset = new Vector2(MapData.ROOMWIDTH / 2, -(MapData.ROOMHEIGHT / 2)); camColl.isTrigger = true; prefab.AddComponent <DoorManager>(); DoorManager doorManager = prefab.GetComponent <DoorManager>(); if (doorManager.doors == null) { doorManager.doors = new List <Door>(); } for (int i = 0; i < prefab.transform.childCount; i++) { GameObject child = prefab.transform.GetChild(i).gameObject; if (child.name.Contains("Door")) { child.gameObject.SetActive(false); doorManager.doors.Add(child.GetComponent <Door>()); } else if (child.name.Contains("Spawners")) { Vector3 cPos = child.gameObject.transform.position; cPos.Set(cPos.x + 0.5f, cPos.y + 0.5f, cPos.z); foreach (BoxCollider2D box2d in child.GetComponentsInChildren <BoxCollider2D>()) { BoxCollider2D.DestroyImmediate(box2d); } } } }
public void SetActiveCameraZone(CameraZone currentCamZone) { activeCamZone = currentCamZone; }
/// <summary> /// 플레이어가 특정 카메라 존 안에 있는지를 확인합니다. /// </summary> /// <param name="cameraZone">플레이어가 포함되었는지를 확인할 카메라 존입니다.</param> /// <returns>카메라 존 안에 플레이어가 있다면 참입니다.</returns> public bool IsInCameraZone(CameraZone cameraZone) { return(_currentCameraZone.GetInstanceID() == cameraZone.GetInstanceID()); }
public void removeZone(CameraZone zone) { insideZones.Remove(zone); }
public void InitCamera(CameraCustomType _type, CameraZone _zone) { type = _type; zone = _zone; }
private CameraZone zone; //the parent that contains this trigger and the view Camera private void Start() { zone = transform.parent.gameObject.GetComponent <CameraZone>(); gameObject.GetComponent <SpriteRenderer>().enabled = false; }
void GrabMainCameraStats(CameraZone script) { script.CameraPosition = Camera.main.transform.position; script.CameraRotation = Camera.main.transform.rotation.eulerAngles; }
public void AssignCameraZone(CameraZone zone) { Global.instance.AssignCameraZone(zone); }
//Given a CameraZone, takes its playerFocus and followSpeed and returns a CameraZoneSettings object. public static CameraZoneSettings extractSettings(CameraZone camZone) { return(new CameraZoneSettings(camZone.playerFocus, camZone.followSpeed)); }