Тема: I.D.S. MONSTERS
Показать сообщение отдельно
Старый 19.02.2020, 07:55   #30
Crystal
Терабайт исходников
 
Аватар для Crystal
 
Регистрация: 05.07.2007
Сообщений: 5,196
Написано 1,721 полезных сообщений
(для 5,374 пользователей)
Ответ: I.D.S. MONSTERS

Сообщение от 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);
        }

    }
}
__________________
Проект "Deathbring World - Rangers" и его финансовая поддержка:
https://boosty.to/deathbringrangers

Я на - TWITCH
Канал на YouTube
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Randomize (20.02.2020)