Слежение за мышью и передвижение от 3го лица

Научился сам? Помоги начинающему.

Слежение за мышью и передвижение от 3го лица

Сообщение EagleOwle 08 янв 2015, 22:49

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

Буду благодарен, если форумчане подскажут, как улучшить код.

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

В качестве цели, за которой следит башня я выбрал пустой обьект Target. Он же выполняет роль точки, куда полетят снаряды моего оружия.
На башню вешаем скрипт
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class LookAt : MonoBehaviour {

        public Transform Target; //Назначает обьект Target, который будет мишенью и в который полетят снаряды
        void LateUpdate ()
        {
                transform.LookAt(Target); //следить за обьектом Target
        }

        void Start ()
        {
       
        }
       
        void Update ()
        {

        }
}


На Target вешаем скрипт слежения за мышью. Это переделанный скрипт Mouse Orbit.

Синтаксис:
Используется javascript
 var target : Transform;
var distance = 3.0; // расстояние от персонажа, на котором держится  мишень
var robot : GameObject; // наш персонаж

//скорость движения мишени по оси Х и по оси Y
var xSpeed = 250.0;
var ySpeed = 120.0;

// Минимальные и максимальные углы ограничения по X и Y относительно персонажа
var yMinLimit = -60;
var yMaxLimit = 0;
var xMinLimit = -60;
var xMaxLimit = 60;

//временные переменные
private var x = 0.0;
private var y = 0.0;


function Start ()
   {
    robot = GameObject.Find("robot");
   }


function Update ()
   {
        //получаем координаты мыши
        x += (Input.GetAxis("Mouse X") * xSpeed * 0.02);
        y -=(Input.GetAxis("Mouse Y") * ySpeed * 0.02);

        //ограничиваем координаты мыши, если это требуется
        x = ClampAngle(x, xMinLimit, xMaxLimit);
        y = ClampAngle(y, yMinLimit, yMaxLimit);
       
        //поворачиваем мишень исходя из полученных координат мыши и углов поворота персонажа     
        var rotation = Quaternion.Euler(y, robot.transform.eulerAngles.y + x, 0);
        var position = rotation * Vector3(0, 0, distance) + target.position;
       
        //присваиваем полученные значения мишени
        transform.rotation = rotation;
        transform.position = position;
       
    }
   
static function ClampAngle (angle : float, min : float, max : float)
   {
        if (angle < -360)
                angle += 360;
        if (angle > 360)
                angle -= 360;
        return Mathf.Clamp (angle, min, max);
   }



Ну а на сам танк (персонажа) вешаем скрипт управления с клавиатуры, которых полно в интернете.

Что бы камера следила за мишенью вешаем ее как дочернюю на башню или прописываем в ней скрипт LookAt
В итоге имеем персонажа, который бегает с клавиатуры и следит за мышкой (точнее за целью, которая движется за мышкой) Если отключить отображение курсора мыши, то разница почти не заметна.
EagleOwle
UNIверсал
 
Сообщения: 493
Зарегистрирован: 02 янв 2015, 16:27

Вернуться в Уроки

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

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


cron