using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// <summary> /// текст над маркером /// </summary> public class LabelObjectScript : MonoBehaviour { RectTransform canvasRect; GameObject text; Button button; public bool TrackMarker = true; public uint UserId; // Start is called before the first frame update void Start() { //text = Instantiate(Resources.Load("GameObjects/Capsule", typeof(GameObject))) as GameObject; cameraController = Camera.main.GetComponent<CameraController>(); canvasRect = transform.GetChild(0).GetComponent<RectTransform>(); text = transform.GetChild(0).GetChild(0).GetChild(0).gameObject; var player = PlayerController.instance; if (TrackMarker) { button = transform.GetChild(0).GetChild(0).GetChild(1).GetComponent<Button>(); button.onClick.AddListener(() => player.BroadcastStart(UserId)); } } // Update is called once per frame void Update() { // Offset position above object bbox (in world space) float offsetPosY = transform.position.y + 1.5f; // Final position of marker above GO in world space Vector3 offsetPos = new Vector3(transform.position.x, offsetPosY, transform.position.z); // Calculate *screen* position (note, not a canvas/recttransform position) Vector2 canvasPos; Vector2 screenPoint = Camera.main.WorldToScreenPoint(offsetPos); // Convert screen position to Canvas / RectTransform space <- leave camera null if Screen Space Overlay RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasRect, screenPoint, null, out canvasPos); // Set //markerRtra.localPosition = canvasPos; //if(TrackMarker) text.transform.localPosition = canvasPos; //else text.transform.parent.transform.localPosition = canvasPos; } CameraController cameraController; void OnMouseDown() { if (TrackMarker) { cameraController.target = transform; cameraController.axes = CameraController.RotationAxes.TrackMarker; } } void BroadcastStart() { var player = PlayerController.instance; if (player.user_broadcast != UserId) { if (player.user_broadcast != null) { var client = Client.instance; client.ImageStreamStopSend(player.user_broadcast.Value); } player.user_broadcast = UserId; player.broadcast = true; } } }