c# скрипт управление камерой как в rts

Программирование на Юнити.

c# скрипт управление камерой как в rts

Сообщение Spel 09 ноя 2012, 17:01

Здравствуйте!
Есть скрипт перемещение камеры как в RTS, необходимо остановить передвижение камеры когда заканчиваеться террейн, как это сделать?
Синтаксис:
Используется csharp
using UnityEngine;
public class CameraDrag : MonoBehaviour

{

    public float dragSpeed = 2;
        Vector3 current_position = Vector3.zero;
    private Vector3 dragOrigin;
    void Update()

    {
        if (Input.GetMouseButtonDown(0))

        {
            dragOrigin = Input.mousePosition;

            return;

        }

        if (!Input.GetMouseButton(0)) return;
        Vector3 pos = Camera.main.ScreenToViewportPoint(Input.mousePosition - dragOrigin);
               
               
               
        Vector3 move = new Vector3(pos.x * dragSpeed, 0, pos.y * dragSpeed);

 

        transform.Translate(move * -1, Space.World);  

    }
}
 
Spel
UNец
 
Сообщения: 5
Зарегистрирован: 02 ноя 2012, 17:34

Re: c# скрипт управление камерой как в rts

Сообщение gturk 11 ноя 2012, 22:16

1 способ:
По границам террейна поставить коллайдеры в виде "стен". на саму камеру тоже придется повесить коллайдер, а это может привести к тому что она будет сталкиваться с другими игровыми объектами и вам придется сделать так чтобы камера летала гарантированно выше любого объекта с коллайдером в сцене

2 способ:
перед тем как двигать камеру добавить в коде проверку "а не вйдем ли мы границы террейна если попытаемся двинуться". Здесь вам поможет свойство Terrain.terrainData.size
Если ваш террейн лежит в плоскости XOZ, то проверка будет примерно такая
Синтаксис:
Используется csharp
if(terrain.transform.position.x - terrain.terrainData.size.x< camera.transform.position.x)&&
//аналогичный код для проверки не вышли ли мы за другие 3 границы

 
Аватара пользователя
gturk
UNITрон
 
Сообщения: 239
Зарегистрирован: 01 апр 2012, 18:49

Re: c# скрипт управление камерой как в rts

Сообщение archimozes 19 дек 2012, 11:39

Поставил коллайдеры по периметру terraina, и на камеру накинул коллайдер, все равно не останавливается... высота отрегулирована почему не получается, помогите.
archimozes
UNец
 
Сообщения: 46
Зарегистрирован: 26 ноя 2012, 21:04

Re: c# скрипт управление камерой как в rts

Сообщение KaMiKaZa 19 дек 2012, 17:26

archimozes писал(а):Поставил коллайдеры по периметру terraina, и на камеру накинул коллайдер, все равно не останавливается... высота отрегулирована почему не получается, помогите.

Лучше используйте второй способ, который вам предложили. С проверкой координат.
Аватара пользователя
KaMiKaZa
UNIт
 
Сообщения: 75
Зарегистрирован: 29 окт 2012, 15:42
Откуда: ЯНАО, Надым

Re: c# скрипт управление камерой как в rts

Сообщение Multirezonator 22 дек 2012, 21:40

Если зона в которой может двигаться GO прямоугольная - по координатам легче всего проверять можно ли дальше идти (rect.Contains(position) для 2D или bounds.Contains(position) для 3D). Для локаций другой формы обычно использую коллайдеры.
Скрытый текст:



Аватара пользователя
Multirezonator
UNITрон
 
Сообщения: 248
Зарегистрирован: 15 фев 2010, 16:12
Откуда: Украина, Луганск
  • Сайт

Re: c# скрипт управление камерой как в rts

Сообщение stilfer 23 дек 2012, 22:38

Воспользуйся функцией http://docs.unity3d.ru/ScriptReference/Mathf.Clamp.html , ограничь камеру по осям x и z.
stilfer
UNец
 
Сообщения: 12
Зарегистрирован: 01 апр 2012, 01:07
Откуда: Ставрополь
  • ICQ

Re: c# скрипт управление камерой как в rts

Сообщение sonapax 19 мар 2013, 23:25

stilfer писал(а):Воспользуйся функцией http://docs.unity3d.ru/ScriptReference/Mathf.Clamp.html , ограничь камеру по осям x и z.


спасибо! елегантное решение )

cameraOBJ.transform.position = new Vector3(Mathf.Clamp(cameraOBJ.transform.position.x, -48.0F, 48.0F), 3, Mathf.Clamp(cameraOBJ.transform.position.z, -48.0F, 48.0F));
sonapax
UNец
 
Сообщения: 28
Зарегистрирован: 11 окт 2012, 10:42


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 12