Страница 1 из 1

Перемещение ГО по клику мыши [Решено]

СообщениеДобавлено: 16 ноя 2011, 20:32
Behind1243
Собственно по теме. Как можно реализовать такое же движение героя, как во всех банальных RPG?

Re: Перемещение ГО по клику мыши

СообщениеДобавлено: 16 ноя 2011, 21:36
seaman
1. Во всех "банальных" РПГ ГГ перемещается не по клику мыши, а клавишами wasd.
2. В Юнити это уже реализовано в ThirdPersonController.
3. Если же Вам все же нужно по клику мыши как в большинстве RTS, то ищите на форуме был пример.

Re: Перемещение ГО по клику мыши

СообщениеДобавлено: 17 ноя 2011, 20:25
Behind1243
Весь день фактически рыл форум и Google, ничего толкового так и не нашел. Может плохо искал...
По какому принципу можно реализовать движения? Может кто подтолкнет человека на путь истинный?)

Заранее благодарю.

Re: Перемещение ГО по клику мыши [Актуально]

СообщениеДобавлено: 17 ноя 2011, 21:02
seaman
Интересно почему я нашел вот это меньше чем за минуту:
http://unity3d.ru/distribution/viewtopic.php?f=18&t=2244&p=19054
Может потому что искал?

Re: Перемещение ГО по клику мыши [Актуально]

СообщениеДобавлено: 17 ноя 2011, 22:54
Левш@
По какому принципу можно реализовать движения? Может кто подтолкнет человека на путь истинный?)

Тыкаем мышей в террайн, получаем поинт, рендерим в точке кружочек (типа эффект), вычисляем направление (вектор) между ГГ и точкой, движемся к поинту.

Re: Перемещение ГО по клику мыши [Актуально]

СообщениеДобавлено: 18 ноя 2011, 15:09
Behind1243
seaman писал(а):Интересно почему я нашел вот это меньше чем за минуту:
http://unity3d.ru/distribution/viewtopic.php?f=18&t=2244&p=19054
Может потому что искал?


Ну искал, не нашел, с каждым бывает)

Re: Перемещение ГО по клику мыши [Актуально]

СообщениеДобавлено: 18 ноя 2011, 22:38
Behind1243
И снова столкнулся с проблемой. Когда я тыкаю по террейну, он к этой точке направляется, НО он эту точку проходит. Плюс через некоторое время я проваливаюсь под землю. Вот собственно скрипт:

Синтаксис:
Используется javascript
public var speed : float = 5.0f;
public var col : Collider;
public var Waypoint : Transform;
var pos : Vector3;
var hit : RaycastHit;  
var rot : Vector3;

var character : Transform;
var went : boolean = false;

function Update () {

         var dist = Vector3.Distance(Waypoint.position, character.position);

         if (Input.GetMouseButtonDown(0)) {
             went = true;
             var ray : Ray = Camera.main.ScreenPointToRay (Input.mousePosition);

         if (col.Raycast(ray, hit, 150.0f)) {
            Debug.DrawLine (ray.origin, hit.point);
            pos = hit.point;
            Instantiate (Waypoint, hit.point, transform.rotation);
            transform.LookAt(hit.point);
            }
      }

         if (went) {
            transform.eulerAngles = new Vector3(rot.x, transform.eulerAngles.y, rot.z);
            transform.Translate(Vector3.forward * Time.deltaTime * speed);
      }

         if(dist <= 0.5) {
             went = false;
         }  
}


Снова прошу вашей помощи :(

Только не кидайтесь в меня тапками, пожалуйста :((

Re: Перемещение ГО по клику мыши [Ещё актуально]

СообщениеДобавлено: 18 ноя 2011, 23:46
Левш@
transform.Translate(Vector3.forward * Time.deltaTime * speed);

Вместо этого метода нужно использовать ЧарКонтроллер.
Синтаксис:
Используется javascript
var flags = controller.Move(moveDirection * Time.deltaTime);

Это будет корректно отрабатывать коллизии с террайном.
+ надо мерять расстояние до точки и останавливать.

Re: Перемещение ГО по клику мыши [Ещё актуально]

СообщениеДобавлено: 19 ноя 2011, 16:14
Behind1243
Спасибо, попробую и отпишусь)

Re: Перемещение ГО по клику мыши [Ещё актуально]

СообщениеДобавлено: 27 ноя 2011, 18:12
Rip
if(Vector3.Distance(transform.position,pos)<1.2)went=false;
у меня не доходит персонаж, а если сравнение поставить меньше, то он не остановится.

Re: Перемещение ГО по клику мыши [Ещё актуально]

СообщениеДобавлено: 30 ноя 2011, 21:52
Rip
Все решил! :D Конечно тупил я сам :p
Оказалось, дело в y.
Синтаксис:
Используется csharp
transform.LookAt(new Vector3(hit.point.x,transform.position.y,hit.point.z));
if(Vector3.Distance(transform.position,new Vector3(pos.x,
                 transform.position.y,pos.z))<Distance)went=false;
 

Нужно было поставить сравнение с transform.position.y , иначе получалось что модель находится все время выше.