Сообщение от ABTOMAT
У меня всё ровно.
Покажи код упдейта кубика штоле.
|
Chel - куб
Navigator - пивот за которым он бегает
|
public class PersController : MonoBehaviour
{
public Camera Camera; //Камера конечно
public GameObject plane; //Плоскость в которую будем лучом стрелять
public GameObject Chel; // Персонаж
public Vector3 ChelCoordinate; //Сюда записываем координаты персонажа
public GameObject Navigator; // Маячок с координатами для следования персонажа
public Vector3 RaycastPickCoordinates; //Конечные координаты падения луча в рейкасте на коллайдер
public string RaycastObjNow; // Текстовая переменная, содержит имя объекта коллайдер которого попал под луч
public float DistCheltoNavigator; //Дистанция между персонажем и навигатором
public int PersMooveSystem = 0; //Система направления и движения персонажа
public int PersSpeed = 4; //Скорость движения персонажа
void Update()
{
//Сам луч, начинается от позиции камеры и направлен в сторону мыши
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
//Структура луча, нужна для получения информации из Raycast
RaycastHit PickRay;
//Пускаем луч
Physics.Raycast(ray, out PickRay);
//Если нажата ЛКМ
if (Input.GetMouseButtonDown(0))
{
//Если запустили луч
if (Physics.Raycast(ray, out PickRay))
{
//Получаем координаты пика на коллайдере
RaycastPickCoordinates = new Vector3(PickRay.point.x, PickRay.point.y, PickRay.point.z);
//Выводим координаты в дебаггер
Debug.Log("Координаты падения луча на какой-либо коллайдер игрового объекта" + RaycastPickCoordinates);
//Пишем в RaycastObjNow и деббагер конкретно во что воткнулся луч
RaycastObjNow = PickRay.collider.name;
Debug.Log("Пишем в RaycastObjNow имя коллайдера попавшего в рейкаст:" + RaycastObjNow);
//Если луч попал в плейн
if (RaycastObjNow == "Plane")
{
Debug.Log("Тыкнули в плейн, и двигаем Navigator!");
//Перемещаем навигатор персонажа в точку пика на данном коллайдере
Navigator.transform.position = new Vector3(PickRay.point.x, PickRay.point.y, PickRay.point.z);
//Определяем координаты персонажа
ChelCoordinate = Chel.transform.position * Time.deltaTime;
Debug.Log("Координаты персонажа: " + ChelCoordinate);
//Определяем дистанцию между персонажем и навигатором
DistCheltoNavigator = Vector3.Distance(Chel.transform.position, RaycastPickCoordinates);
Debug.Log("Дистанция между Navigator и Персонажем: " + DistCheltoNavigator);
//Если дистанция между персонажем и навигатором больше определённой величины
if (DistCheltoNavigator >= 0.5f)
{
//Активируем систему направления и движения персонажа
PersMooveSystem = 1;
if (PersMooveSystem > 1)
{
PersMooveSystem = 1;
}
Debug.Log("Активирована система направления и движения персонажа");
}
}
//Если луч попал в коллайдер игрового объекта
if (PickRay.collider.gameObject)
{
//Пишем в дебаггере название объекта, в который попал луч
Debug.Log("Луч попал в коллайдер игрового объекта: " + PickRay.collider.name);
}
}
}
//Визуализируем луч в окне сцены
Debug.DrawLine(ray.origin, PickRay.point, Color.red);
//Проверка активации системы перемещения персонажа
if (PersMooveSystem >= 1)
{
if (Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.DownArrow) || Input.GetKey(KeyCode.LeftArrow) || Input.GetKey(KeyCode.RightArrow))
{
PersMooveSystem = 0;
}
//Создаём навигационный вектор позиции на который будем поворачивать персонажа, он состоит из точки падения луча на коллайдер по координатам "x" и "z", сохраня в "y" вектора координату "y" позиции персонажа
Vector3 NavigatorPosition = new Vector3(RaycastPickCoordinates.x, Chel.transform.position.y, RaycastPickCoordinates.z);
//Поворачиваем персонажа на точку падения луча на коллайдер используя навигационный вектор позиции NavigatorPosition
Chel.transform.LookAt(NavigatorPosition);
// Двигаем персонажа вперёд соблюдая такты времени
Chel.transform.Translate(Vector3.forward * Time.deltaTime * PersSpeed);
//Определяем дистанцию между персонажем и навигатором
DistCheltoNavigator = Vector3.Distance(Chel.transform.position, RaycastPickCoordinates);
//Проверяем дистанцию между персонажем и навигатором
if (DistCheltoNavigator < 0.5f)
{
//Отключаем систему направления и движения персонажа
PersMooveSystem = 0;
Debug.Log("Отключена система направления и движения персонажа");
}
Debug.Log("Активность системы направления и движения персонажа:" + PersMooveSystem);
}
}
}