Скрипт камеры для RTS. - Форум Игроделов
Пт, 17 Май 2024, 06:04 
 
Приветствую Вас Гость Главная | Регистрация | Вход
Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум Игроделов » UNITY3D » СКРИПТИНГ » Скрипт камеры для RTS. ([JS])
Скрипт камеры для RTS.
Zer0nДата: Пн, 20 Июн 2011, 08:32 | Сообщение # 1
 
Сообщений: 880
Награды: 23
Репутация: 516
Статус: Offline
Как использовать: создать пустой ГО, приаттачить скрипт, придочерить ГО повернутую под углом камеру.


Настройка скрипта:

Должен быть создан следующий аксис в Input Manager: "Turn Camera".

Code

/*** Скрипт поведения камеры ***/
   
var cameraMoveSpeed: float;     // скорость передвижения камеры
var cameraRotateSpeed: float;   // скорость поворота камеры  
var cameraScrollSpeed: float;   // скорость перемещения камеры
   
var minYPos: float;
var maxYPos: float;           // минимальная и максимальная высота камеры над землей
   
private var newPos: Vector3;            // новая позиция камеры
private var yRot:   float = 0;      // поворот по оси y
   
function LateUpdate () {
         if (!(Input.GetButton("Turn Camera"))) {  // зажата ли клавиша перемещения
                 //код перемещения
                 newPos = Vector3.zero;
          
          
                 // проверим, подвел ли юзер курсор мыши к краю экрана
                 if (Input.mousePosition.x <= 5) {
                         newPos = Vector3(transform.position.x - 20, 0, 0);
                         transform.Translate(newPos * cameraMoveSpeed);
                 }
          
                 if (Input.mousePosition.y <= 5) {
                         newPos = Vector3(0, 0, transform.position.z - 3);
                         transform.Translate(-newPos * cameraMoveSpeed);
                 }
          
                 if (Input.mousePosition.x >= (Screen.width - 5) ) {
                         newPos = Vector3(transform.position.x + 20, 0, 0);
                         transform.Translate(newPos * cameraMoveSpeed);
                 }
          
                 if (Input.mousePosition.y >= (Screen.height - 5)) {
                         newPos = Vector3(0, 0, transform.position.z + 3);
                         transform.Translate(newPos * cameraMoveSpeed);
                 }
         }
          
     else {
      
         yRot -= Input.GetAxis("Mouse X") * cameraRotateSpeed * -0.02;
                         
         var rotation = Quaternion.Euler(0, yRot, 0);
          
         transform.rotation = rotation;
     }
      
     var mouseWheel: float = Input.GetAxis("Mouse ScrollWheel");    
         // проверим нижнюю точку под камерой
         var hit : RaycastHit;
         var distanceToGround: float;
           
                 if (Physics.Raycast (transform.position, -Vector3.up, hit,      transform.position.y * 2)) { // посылаем рэйкаст вниз
                 distanceToGround = hit.distance;
             }
         
         var currentHeight: float;
         currentHeight = transform.position.y;
          
         var minY = minYPos + (currentHeight - distanceToGround);   //исходя из данных RaycastHit, рассчитывает минимальную высоту камеры
          
         // изменить высоту камеры основываясь на заданной скорости
         currentHeight -= mouseWheel * cameraScrollSpeed * Time.deltaTime;
          
         // проверим позицию на переход допустимых значений
         if (currentHeight < minY)  
                 currentHeight = minY;
         if (currentHeight > maxYPos)   
                 currentHeight = maxYPos;
                  
         transform.position = new Vector3(transform.position.x, currentHeight, transform.position.z);
          
}



Чейнджлог:
[code]

v1.1 - камера не пролетает сквозь террайн.
v1.2 - небольшие доработки.
v2.0 - полная переработка кода, теперь камера не зависит от террайна.


 
СообщениеКак использовать: создать пустой ГО, приаттачить скрипт, придочерить ГО повернутую под углом камеру.


Настройка скрипта:

Должен быть создан следующий аксис в Input Manager: "Turn Camera".

Code

/*** Скрипт поведения камеры ***/
   
var cameraMoveSpeed: float;     // скорость передвижения камеры
var cameraRotateSpeed: float;   // скорость поворота камеры  
var cameraScrollSpeed: float;   // скорость перемещения камеры
   
var minYPos: float;
var maxYPos: float;           // минимальная и максимальная высота камеры над землей
   
private var newPos: Vector3;            // новая позиция камеры
private var yRot:   float = 0;      // поворот по оси y
   
function LateUpdate () {
         if (!(Input.GetButton("Turn Camera"))) {  // зажата ли клавиша перемещения
                 //код перемещения
                 newPos = Vector3.zero;
          
          
                 // проверим, подвел ли юзер курсор мыши к краю экрана
                 if (Input.mousePosition.x <= 5) {
                         newPos = Vector3(transform.position.x - 20, 0, 0);
                         transform.Translate(newPos * cameraMoveSpeed);
                 }
          
                 if (Input.mousePosition.y <= 5) {
                         newPos = Vector3(0, 0, transform.position.z - 3);
                         transform.Translate(-newPos * cameraMoveSpeed);
                 }
          
                 if (Input.mousePosition.x >= (Screen.width - 5) ) {
                         newPos = Vector3(transform.position.x + 20, 0, 0);
                         transform.Translate(newPos * cameraMoveSpeed);
                 }
          
                 if (Input.mousePosition.y >= (Screen.height - 5)) {
                         newPos = Vector3(0, 0, transform.position.z + 3);
                         transform.Translate(newPos * cameraMoveSpeed);
                 }
         }
          
     else {
      
         yRot -= Input.GetAxis("Mouse X") * cameraRotateSpeed * -0.02;
                         
         var rotation = Quaternion.Euler(0, yRot, 0);
          
         transform.rotation = rotation;
     }
      
     var mouseWheel: float = Input.GetAxis("Mouse ScrollWheel");    
         // проверим нижнюю точку под камерой
         var hit : RaycastHit;
         var distanceToGround: float;
           
                 if (Physics.Raycast (transform.position, -Vector3.up, hit,      transform.position.y * 2)) { // посылаем рэйкаст вниз
                 distanceToGround = hit.distance;
             }
         
         var currentHeight: float;
         currentHeight = transform.position.y;
          
         var minY = minYPos + (currentHeight - distanceToGround);   //исходя из данных RaycastHit, рассчитывает минимальную высоту камеры
          
         // изменить высоту камеры основываясь на заданной скорости
         currentHeight -= mouseWheel * cameraScrollSpeed * Time.deltaTime;
          
         // проверим позицию на переход допустимых значений
         if (currentHeight < minY)  
                 currentHeight = minY;
         if (currentHeight > maxYPos)   
                 currentHeight = maxYPos;
                  
         transform.position = new Vector3(transform.position.x, currentHeight, transform.position.z);
          
}



Чейнджлог:
[code]

v1.1 - камера не пролетает сквозь террайн.
v1.2 - небольшие доработки.
v2.0 - полная переработка кода, теперь камера не зависит от террайна.

Автор - Zer0n
Дата добавления - 20 Июн 2011 в 08:32
stalkeryaДата: Пн, 20 Июн 2011, 09:56 | Сообщение # 2
 
Сообщений: 5
Награды: 0
Репутация: 30
Статус: Offline
Спасибо... Пригодится. smile

Привет.
 
СообщениеСпасибо... Пригодится. smile

Автор - stalkerya
Дата добавления - 20 Июн 2011 в 09:56
Форум Игроделов » UNITY3D » СКРИПТИНГ » Скрипт камеры для RTS. ([JS])
  • Страница 1 из 1
  • 1
Поиск:
Загрузка...

Game Creating CommUnity © 2009 - 2024