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

Итак следующий билд.
RTS камера относительно готова.
Скачать ТЫК.

У камеры появился родительский пивот, который я двигаю "CamPapa".
Что умеет камера:
1. Двигаться в восьми направлениях, когда курсор доходит до края экрана.
2. Отдаляться и возвращаться обратно по пяти шагам колесом мышки.
3. Ориентироваться на местности по длине и ширине игрового уровня,
останавливая своё движение доходя до края.
(Размер игрового уровня сейчас равен размеру плейна).

Что камера не умеет:
Не умеет поворачиваться по осям. Во первых это функция
сомнительной нужности для геймдизайна моего проекта.
Во вторых, в данный момент если повернуть камеру,
то её ориентация в координатах игрового уровня
слетит к херам, превратившись из квадрата в неведомую
геометрическую фигуру. Чтобы поворачивать камеру,
придётся расчитывать ориентацию с учётом угла поворота
камеры, а это вам уже не 10 на 10 умножить так сказать,
придётся голову напрячь, возможно и реализую если потребуется.

Ограничение движения камеры коллизией с кубом, который натянут на уровень - не предлагать! слишком просто.

Говнокод управления камерой:


public class CamController : MonoBehaviour
{

    public GameObject CamPapa; // Пивот к которому привязана камера
    public int CamTranslateSpeed = 10; // Скорость движения камеры
    public float CamRemoveStep = 1.5f; // Шаг отдаления камеры
    public int CamDegreeRemove = 5; // Переменная со стартовым шагом, отсчёт идёт от 5 до 10, т.е. мы можем сделать максимум 5 шагов отдаляющих камеру, и после до 5 приближающих.
    public float CamMooveRangeX = 10f; // Область перемещения камеры по оси "x" соответствующая ширине игровой карты .
    public float CamMooveRangeZ = 10f; // Область перемещения камеры по оси "z" соответствующая длине игровой карты .
    public float CamPositionX; // Текущие координаты CamPapa по оси "x".
    public float CamPositionZ; // Текущие координаты CamPapa по оси "z".
    public Vector3 CamPapaCoordinate; //Резервная переменная для запроса вектора из трёх координат положения CamPapa.

    void Update()
    {

        //Проверка положения мыши в районе правого края экрана


        if (Input.mousePosition.x >= Screen.width - 5.3f)
        {
            CamPositionX = CamPapa.transform.position.x;

            //Если "x" координаты CamPapa меньше ширины игровой карты мы двигаем камеру вправо
            if (CamPositionX < CamMooveRangeX)
            {
            CamPapa.transform.Translate(Vector3.right * CamTranslateSpeed * Time.deltaTime);
            }
         }

        //Проверка положения мыши в районе левого края экрана
        if (Input.mousePosition.x <= 0.1f)
        {
            CamPositionX = CamPapa.transform.position.x;

            //Если "x" координаты CamPapa дальше начальной координаты игровой карты мы двигаем камеру влево
            if (CamPositionX > 0.01f)
            {
                CamPapa.transform.Translate(Vector3.left * CamTranslateSpeed * Time.deltaTime);
            }
        }

        //Проверка положения мыши в районе верхнего края экрана

        if (Input.mousePosition.y >= Screen.height - 2.3f)
        {
            CamPositionZ = CamPapa.transform.position.z;

            //Если "z" координаты CamPapa меньше длины игровой карты мы двигаем камеру вперёд

            if (CamPositionZ < CamMooveRangeZ)
            {
                CamPapa.transform.Translate(Vector3.forward * CamTranslateSpeed * Time.deltaTime);
            }
        }

        //Проверка положения мыши в районе нижнего края экрана

        if (Input.mousePosition.y <= 0.1f)
        {
            CamPositionZ = CamPapa.transform.position.z;

            //Если "z" координаты CamPapa дальше начальной координаты длины игровой карты мы двигаем камеру назад

            if (CamPositionZ > 0.01f)
            {
                CamPapa.transform.Translate(Vector3.back * CamTranslateSpeed * Time.deltaTime);
            }
        }
        //Отдаление и приближение колесом мыши

        if (Input.mouseScrollDelta.y > 0 && CamDegreeRemove < 10)
        {
            CamPapa.transform.position = new Vector3(CamPapa.transform.position.x, CamPapa.transform.position.y + CamRemoveStep, CamPapa.transform.position.z);
            CamPapa.transform.Translate(Vector3.back * CamRemoveStep);
            CamDegreeRemove = CamDegreeRemove + 1;
        }

        if (Input.mouseScrollDelta.y < 0 && CamDegreeRemove > 5)
        {
            CamPapa.transform.position = new Vector3(CamPapa.transform.position.x, CamPapa.transform.position.y - CamRemoveStep, CamPapa.transform.position.z);
            CamPapa.transform.Translate(Vector3.forward * CamRemoveStep);
            CamDegreeRemove = CamDegreeRemove - 1;
        }

        if (CamDegreeRemove > 10) CamDegreeRemove = 10;
        if (CamDegreeRemove < 5) CamDegreeRemove = 5;






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

Я на - TWITCH
Канал на YouTube

Последний раз редактировалось Crystal, 21.02.2020 в 14:05.
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо Crystal за это полезное сообщение:
ABTOMAT (19.02.2020), Arton (19.02.2020), Randomize (20.02.2020), St_AnGer (20.02.2020)