Камера для типа - стратегия, как ?

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

Камера для типа - стратегия, как ?

Сообщение zhenya88 01 июл 2010, 16:51

Привет! тут ламаю се голову уже неделю как перетюнить камеру так чтоб она была как в стратегиях, тоисть была стрелка которая за рамки екрана не выходила и когда ты подводиш к краю то перемещаешся над почвой камерой (например варкрафт). Подскажыте кто знает плиз, заранее благодарен.
zhenya88
UNец
 
Сообщения: 5
Зарегистрирован: 01 июл 2010, 16:44

Re: Камера для типа - стратегия, как ?

Сообщение Golandez 01 июл 2010, 17:03

zhenya88 писал(а):как перетюнить камеру .

Это язык детей Эмо? Общепринятым не свойственно общаться?
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Камера для типа - стратегия, как ?

Сообщение Zaicheg 01 июл 2010, 17:12

zhenya88 писал(а):Привет! тут ламаю се голову уже неделю как перетюнить камеру так чтоб она была как в стратегиях, тоисть была стрелка которая за рамки екрана не выходила и когда ты подводиш к краю то перемещаешся над почвой камерой (например варкрафт). Подскажыте кто знает плиз, заранее благодарен.

Отслеживаешь координаты мыши относительно границ экрана, перемещаешь камеру. Ещё вопросы?
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Камера для типа - стратегия, как ?

Сообщение zhenya88 01 июл 2010, 17:25

Golandez писал(а):
zhenya88 писал(а):как перетюнить камеру .

Это язык детей Эмо? Общепринятым не свойственно общаться?

Ну у меня на фирме (девелоперской) слово "перетюнить" считаеться нормальным, незнаю к чему ты к ІТ - Эмо вяжеш )))))


Zaicheg писал(а):
zhenya88 писал(а):Привет! тут ламаю се голову уже неделю как перетюнить камеру так чтоб она была как в стратегиях, тоисть была стрелка которая за рамки екрана не выходила и когда ты подводиш к краю то перемещаешся над почвой камерой (например варкрафт). Подскажыте кто знает плиз, заранее благодарен.

Отслеживаешь координаты мыши относительно границ экрана, перемещаешь камеру. Ещё вопросы?


ну вообщем с логикой того как оно должно работать у меня проблем нету, проблема что я незнаю как ето зделать на [unity 3D]


вопрос как зделать чтоб стрелку засасовало в игру и она не выходила за области игры пока не нажмеш ескейп
zhenya88
UNец
 
Сообщения: 5
Зарегистрирован: 01 июл 2010, 16:44

Re: Камера для типа - стратегия, как ?

Сообщение Golandez 01 июл 2010, 17:52

zhenya88 писал(а):Ну у меня на фирме (девелоперской) слово "перетюнить" считаеться нормальным, незнаю к чему ты к ІТ - Эмо вяжеш )))))

:ymdaydream: Безграмотность тоже на вашей фирме считается нормально?
P.S.*Ушел за попкорном*
Ты нужен только тогда,когда нужен.(С)
Сказать спасибо
Аватара пользователя
Golandez
Пилигрим
 
Сообщения: 1637
Зарегистрирован: 06 авг 2009, 13:55
Откуда: Харьков
Skype: lestardigital

Re: Камера для типа - стратегия, как ?

Сообщение zhenya88 01 июл 2010, 17:56

Golandez писал(а):
zhenya88 писал(а):Ну у меня на фирме (девелоперской) слово "перетюнить" считаеться нормальным, незнаю к чему ты к ІТ - Эмо вяжеш )))))

:ymdaydream: Безграмотность тоже на вашей фирме считается нормально?
P.S.*Ушел за попкорном*



я Украинец, и Руский никогда не учил, еще вопросы ? или те по укр писать ? лутше бы дал мудрый совет по вопросу, чем умничать кто и как пишет....
zhenya88
UNец
 
Сообщения: 5
Зарегистрирован: 01 июл 2010, 16:44

Re: Камера для типа - стратегия, как ?

Сообщение Zaicheg 01 июл 2010, 18:00

zhenya88 писал(а):ну вообщем с логикой того как оно должно работать у меня проблем нету, проблема что я незнаю как ето зделать на Unity

На Unity это делается через ScriptReference и:
Input (mousePosition)
Screen (height, width)
Transform (Translate, position, etc)
Terrain (sampleHeight)
Дьяченко Роман
e-mail: _zaicheg.reg@gmail.com
skype: zaicheg12
vkontakte: _vk.com/zaichegq
Работа: _wie3.com _www.sanviz.com
Аватара пользователя
Zaicheg
Адепт
 
Сообщения: 3024
Зарегистрирован: 19 июн 2009, 15:12
Откуда: Череповец

Re: Камера для типа - стратегия, как ?

Сообщение Serge 01 июл 2010, 18:31

zhenya88 писал(а):я Украинец, и Руский никогда не учил, еще вопросы ? или те по укр писать ? лутше бы дал мудрый совет по вопросу, чем умничать кто и как пишет....


Грубить на форуме не нужно. Достаточно было сказать, что вы русского не знаете. А что на украинском теперь знаки препинания отдельно пишутся?
О, сколько нам открытий чудных Готовят просвещенья дух И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель.
Аватара пользователя
Serge
UNIверсал
 
Сообщения: 476
Зарегистрирован: 20 мар 2009, 15:53
Откуда: Сибирь г. Омск
  • Сайт
  • ICQ

Re: Камера для типа - стратегия, как ?

Сообщение DbIMok 01 июл 2010, 20:49

думаю нет смысла "держать" мышку в игре. при нахождении мышки в пределах n-пиксельной зоны в течении m-миллисекунд, начинать двигать камеру над поверхностью в этом направлении, пока мышка остается в этой n-пиксельной зоне. реализовать можно как большие невидимые кнопки по границам игровой области или через отслеживание координат. надо смотреть что оптимальнее в зависимости от конкретной ситуации.
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Камера для типа - стратегия, как ?

Сообщение Garu 01 июл 2010, 20:56

Попробуй юзнуть эту штуку, может поможет...

Код: Выделить всё
var speed = 10;
var rotspeed = 40;
var maxdist = 400;
var mask : LayerMask;
private var horiz : float = 0;
private var vert : float = 0;
private var zoom : float = 0;
private var roty : float = 0;
private var rotx : float = 0;
private var hit : RaycastHit;
private var prehit : RaycastHit;
function FixedUpdate () {
   vert = Input.GetAxis ("Vertical");
   horiz = Input.GetAxis ("Horizontal");
   zoom = Input.GetAxis ("Zoom");
   rotx = Input.GetAxis ("Rotatex");
   roty = Input.GetAxis ("Rotatey");
   if (horiz != 0 || vert != 0 || zoom != 0) {
      dir = transform.TransformDirection(Vector3.up);
      dir.y = 0;
      dir = dir.normalized;
      
      dir2 = transform.TransformDirection(Vector3.right);
      dir2.y = 0;
      dir2 = dir2.normalized;
      
      dir3 = transform.TransformDirection(Vector3.forward);
      //dir3.y = 0;
      dir3 = dir3.normalized;
      /*var dir = transform.TransformDirection (Vector3.right);
      var dir2 = transform.TransformDirection (Vector3.up);
      dir2.y = 0;
      pos += dir * horiz;
      pos += dir2 * vert;
      transform.position = pos;*/
      rigidbody.AddForce (dir2 * Time.deltaTime * horiz * speed);
      rigidbody.AddForce (dir * Time.deltaTime * vert * speed);
      if (transform.position.y <= maxdist || zoom > 0) {
         rigidbody.AddForce (dir3 * Time.deltaTime * zoom * speed);
      }
      //transform.position = Vector3.Lerp (transform.position, pos, Time.deltaTime * smooth);
   }
   if (rotx != 0 || roty != 0) {
      Physics.Raycast (transform.position,transform.TransformDirection (Vector3.forward),hit,1500, mask);
      if (hit.point != Vector3.zero) {
         transform.RotateAround (hit.point, Vector3.up, rotspeed * Time.deltaTime * rotx);
         transform.RotateAround (hit.point, transform.TransformDirection (Vector3.right), rotspeed * Time.deltaTime * roty);
         prehit = hit;
      } else {
         transform.RotateAround (prehit.point, Vector3.up, rotspeed * Time.deltaTime * rotx);
         transform.RotateAround (prehit.point, transform.TransformDirection (Vector3.right), rotspeed * Time.deltaTime * roty);
      }
   }
}
Аватара пользователя
Garu
UNITрон
 
Сообщения: 199
Зарегистрирован: 13 авг 2009, 18:26

Re: Камера для типа - стратегия, как ?

Сообщение zhenya88 02 июл 2010, 12:23

Garu писал(а):Попробуй юзнуть эту штуку, может поможет...

Код: Выделить всё
var speed = 10;
var rotspeed = 40;
var maxdist = 400;
var mask : LayerMask;
private var horiz : float = 0;
private var vert : float = 0;
private var zoom : float = 0;
private var roty : float = 0;
private var rotx : float = 0;
private var hit : RaycastHit;
private var prehit : RaycastHit;
function FixedUpdate () {
   vert = Input.GetAxis ("Vertical");
   horiz = Input.GetAxis ("Horizontal");
   zoom = Input.GetAxis ("Zoom");
   rotx = Input.GetAxis ("Rotatex");
   roty = Input.GetAxis ("Rotatey");
   if (horiz != 0 || vert != 0 || zoom != 0) {
      dir = transform.TransformDirection(Vector3.up);
      dir.y = 0;
      dir = dir.normalized;
      
      dir2 = transform.TransformDirection(Vector3.right);
      dir2.y = 0;
      dir2 = dir2.normalized;
      
      dir3 = transform.TransformDirection(Vector3.forward);
      //dir3.y = 0;
      dir3 = dir3.normalized;
      /*var dir = transform.TransformDirection (Vector3.right);
      var dir2 = transform.TransformDirection (Vector3.up);
      dir2.y = 0;
      pos += dir * horiz;
      pos += dir2 * vert;
      transform.position = pos;*/
      rigidbody.AddForce (dir2 * Time.deltaTime * horiz * speed);
      rigidbody.AddForce (dir * Time.deltaTime * vert * speed);
      if (transform.position.y <= maxdist || zoom > 0) {
         rigidbody.AddForce (dir3 * Time.deltaTime * zoom * speed);
      }
      //transform.position = Vector3.Lerp (transform.position, pos, Time.deltaTime * smooth);
   }
   if (rotx != 0 || roty != 0) {
      Physics.Raycast (transform.position,transform.TransformDirection (Vector3.forward),hit,1500, mask);
      if (hit.point != Vector3.zero) {
         transform.RotateAround (hit.point, Vector3.up, rotspeed * Time.deltaTime * rotx);
         transform.RotateAround (hit.point, transform.TransformDirection (Vector3.right), rotspeed * Time.deltaTime * roty);
         prehit = hit;
      } else {
         transform.RotateAround (prehit.point, Vector3.up, rotspeed * Time.deltaTime * rotx);
         transform.RotateAround (prehit.point, transform.TransformDirection (Vector3.right), rotspeed * Time.deltaTime * roty);
      }
   }
}


какой ефект ета штука должна дать ? ее пихать в скрипт а потом к камере ?

DbIMok писал(а):думаю нет смысла "держать" мышку в игре. при нахождении мышки в пределах n-пиксельной зоны в течении m-миллисекунд, начинать двигать камеру над поверхностью в этом направлении, пока мышка остается в этой n-пиксельной зоне. реализовать можно как большие невидимые кнопки по границам игровой области или через отслеживание координат. надо смотреть что оптимальнее в зависимости от конкретной ситуации.


ты в риалтайм стратегии играл ? ты се продставляеш какое будет юзабилити если юзер должен еще думать про то что ему ненужно перепрыгнуть какуето область, я не прав в том что я не написал что игра будет разчитана только но фулскрин, там наверно и ета проблема пропадет совсем.


Zaicheg писал(а):
zhenya88 писал(а):ну вообщем с логикой того как оно должно работать у меня проблем нету, проблема что я незнаю как ето зделать на Unity

На Unity это делается через ScriptReference и:
Input (mousePosition)
Screen (height, width)
Transform (Translate, position, etc)
Terrain (sampleHeight)



хорошая подсказака если б я уже шарил в Unity, но я совсем еще новичок, просто погуглил и ненашел решения потому и написал, я надеялся может ктото уже такое делал
zhenya88
UNец
 
Сообщения: 5
Зарегистрирован: 01 июл 2010, 16:44

Re: Камера для типа - стратегия, как ?

Сообщение zhenya88 02 июл 2010, 23:50

с камерой немного разобрался, как теперь зеделать чтоб она по высоте "ползла" по Тerain, тоисть на высотах тоже делалась выше никто с таким не стыкался ?
zhenya88
UNец
 
Сообщения: 5
Зарегистрирован: 01 июл 2010, 16:44

Re: Камера для типа - стратегия, как ?

Сообщение DbIMok 03 июл 2010, 00:00

Zaicheg писал(а):Terrain (sampleHeight)

http://unity3d.com/support/documentatio ... eight.html
правильный вопрос - половина ответа. учитесь формулировать вопросы понятно.
Новости > _Telegram чат @unity3d_ru (11.6k/4.8k online) > _Telegram канал @unity_news (4.7k подписчиков) > Телеграм тема > "Спасибо"
Аватара пользователя
DbIMok
Адепт
 
Сообщения: 6372
Зарегистрирован: 31 июл 2009, 14:05

Re: Камера для типа - стратегия, как ?

Сообщение Str 10 июл 2010, 19:55

как теперь зеделать чтоб она по высоте "ползла" по Тerain


я вот так сделал, вроде робит ... код на (c#)

Код: Выделить всё
if (transform.position.y <= Terrain.activeTerrain.SampleHeight(transform.position))
            transform.position = new Vector3(transform.position.x, transform.position.y + 50f, transform.position.z);
Str
UNец
 
Сообщения: 16
Зарегистрирован: 02 фев 2010, 20:52

Re: Камера для типа - стратегия, как ?

Сообщение Str 11 июл 2010, 19:37

Народ прив. Значит то ж делаю камеру, как в стратегии реалтайм :-)
Значит так: есть скритп на (c#)
Код: Выделить всё
using UnityEngine;
using System.Collections;

public class MainCamera : MonoBehaviour {

    public float MainCameraSpeed;
    public float MainCameraScrollSpeed;
    public Vector2 MousePosition;

    private float x, y, z;
    private float SpeedScreen = 40f;
    private float MainCameraHight;
 
    // В эти переменные записываются процентное отношения экрана со всех сторон
    private float sForward, sBack, sLeft, sRigth;

   void Start ()
    {
        MainCameraHight = 100f;
   
    }

   void Update ()
    {
        // Привязка высоты камеры к высоте террайна
        transform.position = new Vector3(transform.position.x, Terrain.activeTerrain.SampleHeight(transform.position) + MainCameraHight, transform.position.z);

        MousePosition = Input.mousePosition;

        x = transform.position.x;
        y = transform.position.y;
        z = transform.position.z;

        // Движение камеры по карте
        float antToMovieH = (Input.GetAxisRaw("Horizontal") * MainCameraSpeed * Time.deltaTime);
        float antToMovieV = (Input.GetAxisRaw("Vertical") * MainCameraSpeed * Time.deltaTime);
        transform.Translate(Vector3.right * antToMovieH, Space.World);
        transform.Translate(Vector3.forward * antToMovieV, Space.World);
       
        // ограничение на скрол по оси У
        if (transform.position.y >= 500f)
        {
            transform.position = new Vector3(transform.position.x, 500f, transform.position.z);
            transform.position = new Vector3(x, y, z);
        }

        // Что бы не вылетала за пределы карты
        if (transform.position.x <= 221f)
            transform.position = new Vector3(221f, transform.position.y, transform.position.z);
        if (transform.position.x >= 4788f)
            transform.position = new Vector3(4788f, transform.position.y, transform.position.z);
        if (transform.position.z <= 100f)
            transform.position = new Vector3(transform.position.x, transform.position.y, 100f);
        if (transform.position.z >= 4900f)
            transform.position = new Vector3(transform.position.x, transform.position.y, 4900f);
 
        // Высчитываем процентное отношение экрана с каждой стороны
        sForward = (Screen.height * 98) / 100;
        sBack = (Screen.height * 2) / 100;
        sRigth = (Screen.width * 98) / 100;
        sLeft = (Screen.width * 2) / 100;

        // Движние экрана, если курсор мыши приближается к его краю
        if (MousePosition.y >= sForward)
            transform.Translate(Vector3.forward * SpeedScreen, Space.World);
        if (MousePosition.y <= sBack)
            transform.Translate(Vector3.back * SpeedScreen, Space.World);
        if (MousePosition.x >= sRigth)
            transform.Translate(Vector3.right * SpeedScreen, Space.World);
        if (MousePosition.x <= sLeft)
            transform.Translate(Vector3.left * SpeedScreen, Space.World);
       
           
   }
}


Сия строчка:
transform.position = new Vector3(transform.position.x, Terrain.activeTerrain.SampleHeight(transform.position) + MainCameraHight, transform.position.z);

привязывает высоту камеры к высоте террайна, а сия переменная MainCameraHight говорит на сколько высоко камера будет от террайна и вот собственно вопрос: Мне необходимо, что бы когда я крутил колесико мышки к верху, то переменная должна делать такую магческую вещь - MainCameraHight++; а когда вниз то сответственно - MainCameraHight--;

Но через Mouse ScrollWheel это сделать по моему не реально, если кто шарит отпишитесь плз :-?? через GetKey нет проблем, но кто ж в управлении прокрутку камеры вешает на клавиши :-t :D короч кто может помогите, как это можно реализовать... заранее спс.
Str
UNец
 
Сообщения: 16
Зарегистрирован: 02 фев 2010, 20:52

След.

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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9