Mouse Folow (speed трабл)

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

Mouse Folow (speed трабл)

Сообщение Jakobs 01 фев 2010, 01:31

Код: Выделить всё
function Update () {
var speed = 10;
var playerPlane = new Plane(Vector3.up, transform.position);
var ray = Camera.main.ScreenPointToRay (Input.mousePosition); 
    var hitdist = 0.0;
    if (playerPlane.Raycast (ray, hitdist)) {
        var targetPoint = ray.GetPoint(hitdist);
        var targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
        transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, speed * Time.deltaTime);
      if (!Input.GetMouseButton (1))
      return;
      transform.position += transform.forward * speed * Time.deltaTime;
    }

}


Подскажите как сделать чтоб speed постепенно поднимался и опускался, при нажатии клавиши мыши, Или просто создать еффект скольжения
Аватара пользователя
Jakobs
UNIт
 
Сообщения: 103
Зарегистрирован: 08 янв 2010, 01:09
Откуда: Киев, Украина
  • Сайт
  • ICQ

Re: Mouse Folow (speed трабл)

Сообщение Paul Siberdt 01 фев 2010, 09:42

Ну, дык, а что делает скрипт понятно?
Вы перемещаете объект со статичной скоростью, приравнивая его позиции рассчитанное смещение.
Теперь сделайте так, чтобы смещение добавлялось/убавлялось самому значению скорости, а потом его уже применяйте для расчета позиции.
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Mouse Folow (speed трабл)

Сообщение Tolking 01 фев 2010, 09:46

if (!Input.GetMouseButton (1))
{speed=0;}
Else
{speed=speed+1;};

transform.position += transform.forward * speed * Time.deltaTime;


и
var speed = 10;
вынести в класс из функции.
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2718
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Mouse Folow (speed трабл)

Сообщение Jakobs 02 фев 2010, 16:15

Tolking писал(а):if (!Input.GetMouseButton (1))
{speed=0;}
Else
{speed=speed+1;};

transform.position += transform.forward * speed * Time.deltaTime;


и
var speed = 10;
вынести в класс из функции.


Пасиб =), терь проблема как лимитнуть скорость на 20 чтоб выше не прыгал, и сделать чтоб повышение было не по 1, а допустим по 0.5

Код: Выделить всё
var shipspeed = 0;
var maxspeed = 20;
var turnspeed = 4;
var chnspeed = 1;

function Update () {
var playerPlane = new Plane(Vector3.up, transform.position);
var ray = Camera.main.ScreenPointToRay (Input.mousePosition); 
    var hitdist = 0.0;
   if (!Input.GetMouseButton (1))
         {shipspeed=0;}
      else
         {shipspeed=shipspeed+chnspeed;};
   if(shipspeed > maxspeed)
   {shipspeed = maxspeed;}
    if (playerPlane.Raycast (ray, hitdist)) {
        var targetPoint = ray.GetPoint(hitdist);
        var targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
        transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, turnspeed * Time.deltaTime);
      if (!Input.GetMouseButton (1))
      return;
      transform.position += transform.forward * shipspeed * Time.deltaTime;
    }
}


зделал так
хотя если бы, таким методом я бы сделал в АС... то я бы получил по голове от директора =)
потому надеюсь что есть более правильный способ =)

+ отказываться передвигаться при chnspeed = 0.5; ( Решил поставив в переменных значение 0.0 )
+ Эффект скольжения остался загадкой =(
Аватара пользователя
Jakobs
UNIт
 
Сообщения: 103
Зарегистрирован: 08 янв 2010, 01:09
Откуда: Киев, Украина
  • Сайт
  • ICQ

Re: Mouse Folow (speed трабл)

Сообщение Tolking 03 фев 2010, 09:16

отказываться передвигаться при chnspeed = 0.5; ( Решил поставив в переменных значение 0.0 )

Естественно. Тип переменных нужно явно объявлять. Думаю после 3-4 часов поиска где компилятор "сам решил", что должен быть инт вместо флоата вы придете к мысли, что проще объявлять тип переменной чем потом глюки вылавливать.

Эффект скольжения остался загадкой

Почему загадкой? Скольжение - медленное снижение скорости под действием силы трения.
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2718
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: Mouse Folow (speed трабл)

Сообщение Jakobs 03 фев 2010, 17:16

Tolking писал(а):
Эффект скольжения остался загадкой

Почему загадкой? Скольжение - медленное снижение скорости под действием силы трения.


Ну теоретически да =)
а вот практически
Думал сделать также как и с набором только в обратную сторону, но скрипт не видет *GetMouseButtonDown* и *GetMouseButtonUp*
Точнее видет но не исполняет
Аватара пользователя
Jakobs
UNIт
 
Сообщения: 103
Зарегистрирован: 08 янв 2010, 01:09
Откуда: Киев, Украина
  • Сайт
  • ICQ

Re: Mouse Folow (speed трабл)

Сообщение warr11r 05 фев 2010, 01:18

Jakobs писал(а):
Tolking писал(а):
Эффект скольжения остался загадкой

Почему загадкой? Скольжение - медленное снижение скорости под действием силы трения.


Ну теоретически да =)
а вот практически
Думал сделать также как и с набором только в обратную сторону, но скрипт не видет *GetMouseButtonDown* и *GetMouseButtonUp*
Точнее видет но не исполняет


Возможно, коллайдеры к обьекту как-то криво прицеплены?
Мудрость - это когда начинаешь понимать, что все время занимаешься какой-то х...ней.
Изображение
Аватара пользователя
warr11r
UNITрон
 
Сообщения: 310
Зарегистрирован: 06 июн 2009, 03:21
Откуда: Украина, Ровно
  • ICQ

Re: Mouse Folow (speed трабл)

Сообщение Jakobs 05 фев 2010, 02:46

warr11r писал(а):
Jakobs писал(а):
Tolking писал(а):
Эффект скольжения остался загадкой

Почему загадкой? Скольжение - медленное снижение скорости под действием силы трения.


Ну теоретически да =)
а вот практически
Думал сделать также как и с набором только в обратную сторону, но скрипт не видет *GetMouseButtonDown* и *GetMouseButtonUp*
Точнее видет но не исполняет


Возможно, коллайдеры к обьекту как-то криво прицеплены?


Немного переделал скрипт и использовал не Transform а rigidbody.AddRelativeForce
правда до сех пор мучаюсь правлю все ошибки
Аватара пользователя
Jakobs
UNIт
 
Сообщения: 103
Зарегистрирован: 08 янв 2010, 01:09
Откуда: Киев, Украина
  • Сайт
  • ICQ

Re: Mouse Folow (speed трабл)

Сообщение Jakobs 05 фев 2010, 04:19

Столкнулся с новой проблемой

Код: Выделить всё
var  mass : float = 5.0;
static public var shipspeed = 80.0;
static public var enginepower = 10.0;
//--------------
var engine = 1.0;
var chnspeed = 1.0;
var  forwardDirection : Vector3 = new Vector3(0.0, 0.0, 1.0);
//--------------Other----------------------
function Start(){gameObject.rigidbody.mass = mass;}
//--------------Lets GO-------------------   
function Update ()
{
var maxspeed = engine * 3.0;
var turnspeed = 4.0 / mass + (engine / 10.0 );
//--------------Find Mouse-----------------
var playerPlane = new Plane(Vector3.up, transform.position);
var ray = Camera.main.ScreenPointToRay (Input.mousePosition);
var hitdist = 0.0;
//--------------Start my Engine-----------
   if (!Input.GetMouseButton (1))
         {enginepower=0.0;}
   else
         {enginepower=enginepower+chnspeed;
       if(enginepower > maxspeed)
       {enginepower = maxspeed;}}      
//--------------Turn to Mouse-------------
    if (playerPlane.Raycast (ray, hitdist))
      {
        var targetPoint = ray.GetPoint(hitdist);
        var targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
        transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, turnspeed * Time.deltaTime);
//--------------Take a Force--------------
      if (!Input.GetMouseButton (1))
         return;
         var Force : float = enginepower;    
            if (enginepower > 0.0)
               {Force *= shipspeed;}
            else
               {Force *= shipspeed;}
//--------------Push him!!!!-----------------         
         rigidbody.AddRelativeForce(forwardDirection * Force * Time.deltaTime);
         //transform.position += transform.forward * shipspeed * Time.deltaTime;
      }
   
}
@script RequireComponent (Rigidbody)


не могу вытянуть значение Force... Которое хочу использовать для спидометра
пробувал static var spd = Force; переменную кидал везде где тока мона было в скрипте =(
Аватара пользователя
Jakobs
UNIт
 
Сообщения: 103
Зарегистрирован: 08 янв 2010, 01:09
Откуда: Киев, Украина
  • Сайт
  • ICQ

Re: Mouse Folow (speed трабл)

Сообщение warr11r 05 фев 2010, 10:57

Я для спидометра банально считывал rigidbody.velocity.
Мудрость - это когда начинаешь понимать, что все время занимаешься какой-то х...ней.
Изображение
Аватара пользователя
warr11r
UNITрон
 
Сообщения: 310
Зарегистрирован: 06 июн 2009, 03:21
Откуда: Украина, Ровно
  • ICQ

Re: Mouse Folow (speed трабл)

Сообщение Zaicheg 05 фев 2010, 11:13

Jakobs писал(а):не могу вытянуть значение Force... Которое хочу использовать для спидометра
пробувал static var spd = Force; переменную кидал везде где тока мона было в скрипте =(

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

Re: Mouse Folow (speed трабл)

Сообщение Jakobs 05 фев 2010, 13:30

Zaicheg писал(а):
Jakobs писал(а):не могу вытянуть значение Force... Которое хочу использовать для спидометра
пробувал static var spd = Force; переменную кидал везде где тока мона было в скрипте =(

Такого не бывает. Вы можете вытянуть значения Force любым ... = Force. Это не внушение.
Другое дело, что значение Force оказывается не таким, как вы предполагаете. А вот тут помочь сложно — у вас в коде совершенно непонятно, какие переменные за что отвечают и из каких соображений изменяются.
А скорость смотрите через rigidbody.velocity, да.


а можно пример с командой дать
а то что то найти нечё не могу =(
Аватара пользователя
Jakobs
UNIт
 
Сообщения: 103
Зарегистрирован: 08 янв 2010, 01:09
Откуда: Киев, Украина
  • Сайт
  • ICQ

Re: Mouse Folow (speed трабл)

Сообщение Jakobs 05 фев 2010, 15:10

Всем спасибо разобрался
поучилась конфетка очень большая и вкусная =)

последнее что мешает, этот трабл с значением после точки, мне бы эти значения нафиг убрать
Аватара пользователя
Jakobs
UNIт
 
Сообщения: 103
Зарегистрирован: 08 янв 2010, 01:09
Откуда: Киев, Украина
  • Сайт
  • ICQ

Re: Mouse Folow (speed трабл)

Сообщение Zaicheg 05 фев 2010, 17:18

Jakobs писал(а):последнее что мешает, этот трабл с значением после точки, мне бы эти значения нафиг убрать

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

Re: Mouse Folow (speed трабл)

Сообщение warr11r 06 фев 2010, 02:15

Скрипт спидометра выглядит подобным образом:

(c#)

Код: Выделить всё
using System;
using System.Collections.Generic;
using UnityEngine;

public class Speedometer : MonoBehaviour{
   
   public GUISkin guiskin;
   public GameObject Car;
   public float CurrentSpeed {
      get { return Car.rigidbody.velocity.magnitude * 3.6f; }
   }
       void OnGUI() {
      if (guiskin != null) GUI.skin = guiskin;
         GUILayout.BeginArea(new Rect(Screen.width - 350, Screen.height - 165, 440, 75));
         GUILayout.Label((int)CurrentSpeed + " km/h");
         GUILayout.EndArea();
      return;
   }
}


Кидаете на переменную ГО, скорость которой хотите измерять.
Меряете в флоат, игроку показываете целое.
Мудрость - это когда начинаешь понимать, что все время занимаешься какой-то х...ней.
Изображение
Аватара пользователя
warr11r
UNITрон
 
Сообщения: 310
Зарегистрирован: 06 июн 2009, 03:21
Откуда: Украина, Ровно
  • ICQ

След.

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

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

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