123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- /* ActivateCameraScript.cs
- * author: Lydia Ebbinghaus, Jana-Sophie Schönfeld, Trung-Hoa Ha
- */
- using System.Collections.Generic;
- using UnityEngine;
- using RosSharp.RosBridgeClient;
- using UnityEngine.UI;
- // Script that activates/deletes and shows/hides a camera when selected with a laser pointer.
- // Attached to child of Button (Camera Scroll Menu > Scrollview > Viewport > Content).
- public class ActivateCameraScript : MonoBehaviour
- {
- Dictionary<string,ImageSubscriberMod> imageSubscribers;
- GameObject cameraPlane;
- Color oldColor;
- // Creating dictonary to store and access current image subscribers.
- public void Start()
- {
- imageSubscribers = new Dictionary<string, ImageSubscriberMod>();
- }
- // Reacts on pushed camera button in menu.
- // If button was already selected: deactivate and hide camera.
- // If button was not selected: activate and show camera.
- public void ActivateDeactivateCamera()
- {
-
- // Getting name of selected camera.
- string cameraName = transform.parent.GetChild(0).GetComponentInChildren<TMPro.TextMeshProUGUI>().name;
- if(cameraName == null){
- Debug.Log("ActivateCameraScript.cs: No name was found for the camera. Check if script is attached to the button as a child.");
- }
- GameObject parentCamera = GameObject.Find("Automatic Cameras");
- if(parentCamera == null){
- Debug.Log("ActivateCameraScript.cs: Automatic Cameras object was not found. Check if Automatic Cameras has the correct name.");
- }
- Transform[] trs = parentCamera.GetComponentsInChildren<Transform>(true);
-
- // Searching in automatic camers for selected camera.
- foreach(Transform t in trs){
- if(t.name == cameraName){
- Debug.Log("ActivateCameraScript.cs: found camera" + t.name + cameraName);
- cameraPlane = t.gameObject;
- }
- }
- if (cameraPlane != null){
- if (cameraPlane.activeSelf == true){
- DeactivateCamera();
- }
- else
- {
- ActivateCamera();
- }
- }
- else
- {
- Debug.LogError("ActivateCameraScript.cs: Camera " + cameraName + " not found. Can't activate/deactivate. Check if name of camera object is the same as text of button.");
- }
- }
- // Activates camera and shows at defined position.
- private void ActivateCamera()
- {
- GameObject cam = GameObject.Find("VRCamera");
- cameraPlane.SetActive(true);
- // Choosing location where camera should appear.
- cameraPlane.transform.rotation = cam.transform.rotation;
- cameraPlane.transform.Rotate(new Vector3(0,180,0));
- // Use this instead to use a plane.
- //cameraPlane.transform.Rotate(new Vector3(90,180,0));
- cameraPlane.transform.position = cam.transform.position + cam.transform.forward * 0.5f;
- // Adds specific image subscriber for camera.
- var currentImageSubscriber = GameObject.Find("RosBridge").AddComponent<ImageSubscriberMod>();
- currentImageSubscriber.meshRenderer = cameraPlane.GetComponent<MeshRenderer>();
- currentImageSubscriber.Topic = cameraPlane.name;
- // Higlights selected camera in menu.
- this.transform.parent.GetChild(2).GetComponent<RawImage>().color=Color.green;
- imageSubscribers.Add(cameraPlane.name,currentImageSubscriber);
- }
- // Deactivates camera.
- private void DeactivateCamera()
- {
- // Hides camera and deletes higlight in menu.
- cameraPlane.SetActive(false);
- this.transform.parent.GetChild(2).GetComponent<RawImage>().color=Color.white;
- // Destroys image subscriber.
- // Otherwise huge lags, which cause small fps. Contributes to VR-sickness.
- Destroy(imageSubscribers[cameraPlane.name]);
- imageSubscribers.Remove(cameraPlane.name);
- }
- }
|