Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- using UnityEngine.UI;
- public class InputController : MonoBehaviour
- {
- private Vector3 point1;
- private Vector3 point2;
- private bool click1 = false;
- private bool click2 = false;
- public LineRenderer line; // в инспекторе задаём LineRenderer
- public Transform go; // в инспекторе задаём сферу
- [Range(2,50)]
- [Header("Количество сегментов линии")]
- public int segments = 10;
- [Space(10)]
- public float sphereRadius = 1;
- private LayerMask _lm;
- public float sens = 2.0f; // сенс вращения камеры
- public float moveSpeed = 0.1f; // скорость движения камеры
- public float verticalSpeed = 0.05f; // скорость подъема камеры (Space/Ctrl)
- public float rotateSens = 3.0f; // сенс вращения сферы
- // Use this for initialization
- void Start()
- {
- line.enabled = false; // выключаем линию
- _lm = LayerMask.GetMask("sphere"); // сохраняем маску для сферы
- TextManager.Instance.LoadLocalizationAsset("russian.txt", LoadDone);
- }
- private void LoadDone()
- {
- print("Localization loaded");
- TextManager.Instance.ReplaceAllText();
- }
- // Update is called once per frame
- void Update()
- {
- // здесь блок перемещения камеры WSAD + Space/Ctrl
- float forwardMove = Input.GetAxis("Vertical") * moveSpeed;
- float sideMove = Input.GetAxis("Horizontal") * moveSpeed;
- float verticalMove = Input.GetAxis("Jump") * verticalSpeed;
- Camera.main.transform.position += Camera.main.transform.forward * forwardMove +
- Camera.main.transform.right * sideMove +
- Camera.main.transform.up * verticalMove;
- // ПКМ - вращение камеры
- if (Input.GetMouseButton(1))
- {
- float mouseX = Input.GetAxis("Mouse X") * sens;
- float mouseY = Input.GetAxis("Mouse Y") * sens;
- Camera.main.transform.Rotate(Vector3.up, mouseX, Space.World);
- Camera.main.transform.Rotate(Vector3.right, -mouseY, Space.Self);
- }
- // СКМ - вращение сферы
- if (Input.GetMouseButton(2))
- {
- float mouseX = Input.GetAxis("Mouse X") * rotateSens;
- float mouseY = Input.GetAxis("Mouse Y") * rotateSens;
- go.rotation *= Quaternion.Euler(go.InverseTransformDirection(mouseY, -mouseX, 0f));
- }
- //ЛКМ - ставим точки на сфере
- if (Input.GetMouseButtonUp(0))
- {
- if (!click1) // если ни одной точки нет
- {
- RaycastHit rh;
- if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out rh, _lm))
- {
- click1 = true;
- point1 = (rh.point);
- line.enabled = false;
- return;
- }
- }
- if (click1 && !click2) // если первая точка есть, а второй нет
- {
- RaycastHit rh;
- if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out rh, _lm))
- {
- click2 = true;
- point2 = (rh.point);
- DrawLine();
- return;
- }
- }
- if (click1 && click2) // если обе точки есть
- {
- RaycastHit rh;
- if (Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out rh, _lm))
- {
- click2 = false;
- point1 = (rh.point);
- line.enabled = false;
- return;
- }
- }
- }
- }
- private void DrawLine()
- {
- line.numPositions = segments; // задаём количество сегментов
- for (int i=0; i<=segments-1; i++) // проходим по всем сегментам
- {
- Vector3 t = go.InverseTransformPoint( //преобразуем в локальные координаты
- (Vector3.Lerp(point1 - go.position, // точка-1 относительно центра
- point2 - go.position, // точка-2 относительно центра
- (i / (float)segments) // шаг лерпа относительно номера сегмента
- ).normalized * (sphereRadius + 0.01f)) // нормализуем и умножаем на размер сферы
- + go.position // смещаем в центр сферы
- );
- line.SetPosition(i, t); // задаём позицию сегмента
- }
- line.enabled = true; // включаем линию
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement