Камера от третьего лица

Лучший способ помочь другим, поделиться своими находками.

Камера от третьего лица

Сообщение Umnik 03 май 2010, 01:42

Немного дописал скрипт из Standart Assets -> MouseOrbit.

Теперь камера вращается только при зажатой правой кнопки мыши, как в любой ММОРПГ, а так же работает Zoom при помощи прокрутки колесика мыши.

Синтаксис:
Используется javascript
var target : Transform;
var distance = 10.0;
var min_distance = 3.0;
var max_distance = 15.0;

var xSpeed = 250.0;
var ySpeed = 120.0;

var yMinLimit = -20;
var yMaxLimit = 80;

private var x = 0.0;
private var y = 0.0;

@AddComponentMenu("Camera-Control/Mouse Orbit")
partial class MouseOrbit { }

function Start () {
    var angles = transform.eulerAngles;
    x = angles.y;
    y = angles.x;

        // Make the rigid body not change rotation
        if (rigidbody)
                rigidbody.freezeRotation = true;
}

function LateUpdate () {
    if (target) {
        if(Input.GetMouseButton(1)){
        x += Input.GetAxis("Mouse X") * xSpeed * 0.02;
        y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;
                }
                y = ClampAngle(y, yMinLimit, yMaxLimit);
               
                if(Input.GetAxis("Mouse ScrollWheel")){
                distance=distance-Input.GetAxis("Mouse ScrollWheel")*5;
                if (distance < min_distance) {distance=min_distance;}
                if (distance > max_distance) {distance=max_distance;}
                }
                       
        var rotation = Quaternion.Euler(y, x, 0);
        var position = rotation * Vector3(0.0, 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);
}


Я сам долго всех расспрашивал и искал, вдруг кому понадобится.
Core i7 920 / GeForce GTX 295 / 8 GB MEM DDRIII / Windows Seven Ultimate x64
Developer project: Resource War / dev.ramgames.ru
Аватара пользователя
Umnik
UNец
 
Сообщения: 8
Зарегистрирован: 23 апр 2010, 18:58
Откуда: Россия, г. Раменское
  • Сайт
  • ICQ

Re: Камера от третьего лица

Сообщение Garu 03 май 2010, 11:49

Неимоверно большое спасибо! (3A4OT)
А то скриптовики разбежались, а штуковина нужна была =)
Слушай, вопрос на засыпку, а не пробовал смутить камерку, шоб с коллизией была? Ну т.е. не проходила сквозь объекты, а как раз по общей дистанции приближалась от этого, м? Такая штуковинка была бы многим крайне полезна думаю, особенно для ММО, простых РПГ и прочих радостей жизни =)
Аватара пользователя
Garu
UNITрон
 
Сообщения: 199
Зарегистрирован: 13 авг 2009, 18:26

Re: Камера от третьего лица

Сообщение Umnik 08 май 2010, 18:45

Хорошо сделаю.
Core i7 920 / GeForce GTX 295 / 8 GB MEM DDRIII / Windows Seven Ultimate x64
Developer project: Resource War / dev.ramgames.ru
Аватара пользователя
Umnik
UNец
 
Сообщения: 8
Зарегистрирован: 23 апр 2010, 18:58
Откуда: Россия, г. Раменское
  • Сайт
  • ICQ

Re: Камера от третьего лица

Сообщение 3dmax 10 авг 2010, 00:21

так что, есть скрипт, чтобы камера не проходила сквозь объекты ?
3dmax
UNец
 
Сообщения: 29
Зарегистрирован: 27 сен 2009, 14:41

Re: Камера от третьего лица

Сообщение Левш@ 10 авг 2010, 02:11

Это проблемка... коллайдеры не помогают.
Надо наверное щупать рейкастом растояние от камеры до ближ коллайдера и при критическом значении двигать ее к персу.
При отдалении обратно. У меня вид от первого лица, так что этой проблемы нет, сам не делал, но думаю работать будет.
_X.cor.R (Prologue)
Аватара пользователя
Левш@
Адепт
 
Сообщения: 4073
Зарегистрирован: 14 окт 2009, 16:34
Откуда: IBERIA
Skype: bars_levsha
  • Сайт

Re: Камера от третьего лица

Сообщение Garu 10 авг 2010, 02:28

Код: Выделить всё
var target : Transform;
var targetHeight = 2.0;
var distance = 2.8;
var maxDistance = 10;
var minDistance = 0.5;
var xSpeed = 250.0;
var ySpeed = 120.0;
var yMinLimit = -40;
var yMaxLimit = 80;
var zoomRate = 20;
var rotationDampening = 3.0;
private var x = 0.0;
private var y = 0.0;
var isTalking:boolean = false;

@script AddComponentMenu("Camera-Control/WoW Camera")

function Start () {
    var angles = transform.eulerAngles;
    x = angles.y;
    y = angles.x;

   // Make the rigid body not change rotation
      if (rigidbody)
      rigidbody.freezeRotation = true;
}

function LateUpdate () {
   if(!target)
      return;
   
   // If either mouse buttons are down, let them govern camera position
   if (Input.GetMouseButton(1) || (Input.GetMouseButton(1))){
   x += Input.GetAxis("Mouse X") * xSpeed * 0.02;
   y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02;
   
   
   // otherwise, ease behind the target if any of the directional keys are pressed
   } else if(Input.GetAxis("Vertical") || Input.GetAxis("Horizontal")) {
      //var targetRotationAngle = target.eulerAngles.y;
      //var currentRotationAngle = transform.eulerAngles.y;
      //x = Mathf.LerpAngle(currentRotationAngle, targetRotationAngle, rotationDampening * Time.deltaTime);
    }
     

   distance -= (Input.GetAxis("Mouse ScrollWheel") * Time.deltaTime) * zoomRate * Mathf.Abs(distance);
   distance = Mathf.Clamp(distance, minDistance, maxDistance);
   
   y = ClampAngle(y, yMinLimit, yMaxLimit);
   
  // ROTATE CAMERA:
   var rotation:Quaternion = Quaternion.Euler(y, x, 0);
   transform.rotation = rotation;
   
   // POSITION CAMERA:
   var position = target.position - (rotation * Vector3.forward * distance + Vector3(0,-targetHeight,0));
   transform.position = position;
   
   // IS VIEW BLOCKED?
    var hit : RaycastHit;
    var trueTargetPosition : Vector3 = target.transform.position - Vector3(0,-targetHeight,0);
   // Cast the line to check:
    if (Physics.Linecast (trueTargetPosition, transform.position, hit)) { 
      // If so, shorten distance so camera is in front of object:
      var tempDistance = Vector3.Distance (trueTargetPosition, hit.point) - 0.28;
      // Finally, rePOSITION the CAMERA:
      position = target.position - (rotation * Vector3.forward * tempDistance + Vector3(0,-targetHeight,0));
      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);
   
}
Аватара пользователя
Garu
UNITрон
 
Сообщения: 199
Зарегистрирован: 13 авг 2009, 18:26

Re: Камера от третьего лица

Сообщение djz 10 авг 2010, 08:38

Garu, спасип )

Немножко обнаглев спрошу, а можно ещё скриптик движения этого transform, к которому прикреплена камера, к точке получаемой тыком лев.кн.мыши на объектах уровня. Как здесь http://www.arongranberg.com/unity/a-pathfinding/ , но без замудренных поисков путей, просто тыкнули на террайне или объекте и трансформ поплелся к месту тычка?
Изображение
Аватара пользователя
djz
UNец
 
Сообщения: 30
Зарегистрирован: 07 апр 2009, 07:01
  • ICQ

Re: Камера от третьего лица

Сообщение Paul Siberdt 10 авг 2010, 13:33

Как тебе не стыдно, ежатый, такое спрашивать! :ymparty:
Аватара пользователя
Paul Siberdt
Адепт
 
Сообщения: 5317
Зарегистрирован: 20 июн 2009, 21:24
Откуда: Moscow, Russia
Skype: siberdt
  • Сайт

Re: Камера от третьего лица

Сообщение djz 10 авг 2010, 18:45

хорошо хоть не еЖанутый ))
я хлупый рисоваська, мну можно
Изображение
Аватара пользователя
djz
UNец
 
Сообщения: 30
Зарегистрирован: 07 апр 2009, 07:01
  • ICQ

Re: Камера от третьего лица

Сообщение Golandez 10 авг 2010, 19:42

Синтаксис:
Используется csharp
Ray ray_new;
RaycastHit hit_new;

 void Awake()
    {
         hero = GameObject.FindGameObjectWithTag("Hero").transform;
    }
void Update()
    {
        if (Input.GetButtonDown("Fire1"))
        {
 ray_new = gameObject.camera.ScreenPointToRay(Input.mousePosition);

            if (Physics.Raycast(ray_new, out hit_new, Mathf.Infinity, 5))
            {                
                   if (hit_new.collider.tag == "Floor")
                    {                        
                                GameObject waypoint = new GameObject("goPick");
                                waypoint.tag = "Waypoint";
                                waypoint.transform.position = new Vector3(hit_new.point.x, Terrain.activeTerrain.SampleHeight(hit_new.point) + 1, hit_new.point.z);
                                Destroy(waypoint, 10);
                                hero.GetComponent<Hero>().targetPath = waypoint.transform;
                                                           
                      }
              }
}
 


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

Re: Камера от третьего лица

Сообщение KuzmaProduction 11 окт 2010, 15:59

я кстати сделал коллайдером, сделал пустой геймобжект, повесл на него колайдер и ригид боди с масой 0 (чтобы не сдвигал другие ригидбоди) и без гравитации, управление камерой повесил на коллайдер а камеру привязал к позиции и повороту колайдера
Mayaвец.. 3д - 2д аниматор...
Аватара пользователя
KuzmaProduction
UNIт
 
Сообщения: 62
Зарегистрирован: 02 сен 2010, 11:54
  • ICQ

Re: Камера от третьего лица

Сообщение Selff 30 мар 2012, 00:52

А как вверх вниз смотреть?все туториалы которые я видел упорна избегают этой темы(((
Selff
UNец
 
Сообщения: 3
Зарегистрирован: 29 мар 2012, 02:50

Re: Камера от третьего лица

Сообщение seaman 30 мар 2012, 12:51

все туториалы которые я видел упорна избегают этой темы

Весьма странно. Во всех уроках, которые я видел это было реализовано. Во всяком случае в первом посту этой темы все отлично вращается и по вертикали.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Камера от третьего лица

Сообщение Selff 30 мар 2012, 13:50

Реализовано то да но ни слова о том как!По горизонтали карера вращается все как надо а по вертикали бред какой то((подскажите плиз даже если считаете это фигней которую должен знать каждый все равно подскажите...очень буду благодарен!!)
Selff
UNец
 
Сообщения: 3
Зарегистрирован: 29 мар 2012, 02:50

Re: Камера от третьего лица

Сообщение seaman 30 мар 2012, 15:43

Почитайте мою подпись.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

След.

Вернуться в Исходники (Копилка)

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

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