Перейти к содержанию
Авторизация  
MasterGH

Летающая камера

Рекомендуемые сообщения

Игровой движок Unity3d. Пример того как заставить летать камеру в игре отключив её от персонажа.


using UnityEngine;
using System.Collections;
public class CheatFlyCamera : MonoBehaviour {
public KeyCode keyActivated = KeyCode.CapsLock;
public float acceleration = 2f, minSpeed = 1f, maxSpeed = 20f;
public float mouseSensitivityX = 15f, mouseSensitivityY = 15f;
public GUIStyle guiStyle;
float speed = 1f, rotationY = 0f;
Transform myTransform;
bool isActive;
GameObject goPerson = null;
#region MonoBehavior
void Awake(){
myTransform = transform;
}
void OnGUI(){
GUILayout.Label("Press \"Caps Lock\" Button", guiStyle);
}
void Update(){
if(Input.GetKeyDown(KeyCode.Escape)){
Application.Quit();
}
if(Input.GetKeyDown(keyActivated)){
isActive = !isActive;
if(goPerson == null){
goPerson = GameObject.Find("3rd Person Controller");
}
goPerson.SetActive(!isActive);
}
if(isActive){
var isSomeKey = false;
var timePerFrame = Time.deltaTime;
if(Input.GetKey(KeyCode.W)){
isSomeKey = true;
speed += acceleration * timePerFrame;
speed = Mathf.Clamp(speed + timePerFrame, minSpeed, maxSpeed);
myTransform.position += ImullQuaternionToPpoint(myTransform.localRotation, Vector3.forward * speed * timePerFrame);
}
if(Input.GetKey(KeyCode.A)){
isSomeKey = true;
speed += acceleration * timePerFrame;
speed = Mathf.Clamp(speed + timePerFrame, minSpeed, maxSpeed);
myTransform.position += ImullQuaternionToPpoint(myTransform.localRotation, Vector3.left * speed * timePerFrame);
}
if(Input.GetKey(KeyCode.D)){
isSomeKey = true;
speed += acceleration * timePerFrame;
speed = Mathf.Clamp(speed + timePerFrame, minSpeed, maxSpeed);
myTransform.position += ImullQuaternionToPpoint(myTransform.localRotation, Vector3.right * speed * timePerFrame);
}
if(Input.GetKey(KeyCode.S)){
isSomeKey = true;
speed += acceleration * timePerFrame;
speed = Mathf.Clamp(speed + timePerFrame, minSpeed, maxSpeed);
myTransform.position += ImullQuaternionToPpoint(myTransform.localRotation, Vector3.back * speed * timePerFrame);
}
if(Input.GetKey(KeyCode.Space)){
isSomeKey = true;
speed += acceleration * timePerFrame;
speed = Mathf.Clamp(speed + timePerFrame, minSpeed, maxSpeed);
var pos = myTransform.position;
pos.y += speed * timePerFrame;
myTransform.position = pos;
}
if(!isSomeKey){
speed = Mathf.Lerp(speed, minSpeed, timePerFrame);
}
float rotationX = myTransform.localEulerAngles.y + Input.GetAxis("Mouse X") * mouseSensitivityX;
rotationY += Input.GetAxis("Mouse Y") * mouseSensitivityY;
rotationY = Mathf.Clamp (rotationY, -90f, 90f);
transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);
}
}
#endregion
public Vector3 ImullQuaternionToPpoint(Quaternion rotation, Vector3 point)
{
float num = rotation.x * 2f;
float num2 = rotation.y * 2f;
float num3 = rotation.z * 2f;
float num4 = rotation.x * num;
float num5 = rotation.y * num2;
float num6 = rotation.z * num3;
float num7 = rotation.x * num2;
float num8 = rotation.x * num3;
float num9 = rotation.y * num3;
float num10 = rotation.w * num;
float num11 = rotation.w * num2;
float num12 = rotation.w * num3;
Vector3 result;
result.x = (1f - (num5 + num6)) * point.x + (num7 - num12) * point.y + (num8 + num11) * point.z;
result.y = (num7 + num12) * point.x + (1f - (num4 + num6)) * point.y + (num9 - num10) * point.z;
result.z = (num8 - num11) * point.x + (num9 + num10) * point.y + (1f - (num4 + num5)) * point.z;
return result;
}

}

post-3-0-05697500-1401185268_thumb.jpg

FlyCamera_exe.rar

FlyCameraUnity3d4.3_package.part1.rar

FlyCameraUnity3d4.3_package.part2.rar

FlyCameraUnity3d4.3_package.part3.rar

FlyCameraUnity3d4.3_package.part4.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хотелось бы еще статью с описанием кода))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Хотелось бы еще статью с описанием кода))

Тут кода этого - кот наплакал, я не думаю, что его стоит разъяснять, ну а если он непонятен кому-то, то стоит задуматься о повышении уровня знаний.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К сожалению нет желания делать статью или комментировать код.

Движение персонажа и движение камеры описано кодом C#.

Пакадж проекта в аттаче позволит все посмотреть в деталях.

Документация Юнити. Очень все разжевано. Гугл Перводчик может перевести.

По поводу встраивания отладочного кода в чужую игру для управления камерой это уже другая тема и её надо изучать для конкретной игры. Я думаю в Интернете может быть пример про управление камерой не только тупо по жестким глобальным координатам, но и по локальным координатам с учетом локальных углов, т.е. так как я сделал в примере этой темы.

p.s. Кстати, для тех кто любит С++ в Unity3d 5.x планируется поддержка С++ синтаксиса.

post-3-0-79554300-1401205839_thumb.png

Подробнее здесь

Также будет улучшен рендеринг ран тайм.

На данный момент последняя версия Unity3d 4.5

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К сожалению нет желания делать статью или комментировать код.

Движение персонажа и движение камеры описано кодом C#.

Пакадж проекта в аттаче позволит все посмотреть в деталях.

Документация Юнити. Очень все разжевано. Гугл Перводчик может перевести.

По поводу встраивания отладочного кода в чужую игру для управления камерой это уже другая тема и её надо изучать для конкретной игры. Я думаю в Интернете может быть пример про управление камерой не только тупо по жестким глобальным координатам, но и по локальным координатам с учетом локальных углов, т.е. так как я сделал в примере этой темы.

p.s. Кстати, для тех кто любит С++ в Unity3d 5.x планируется поддержка С++ синтаксиса.

post-3-0-79554300-1401205839_thumb.png

Подробнее здесь

Также будет улучшен рендеринг ран тайм.

На данный момент последняя версия Unity3d 4.5

А разве Unity это не исключительно движок для C#/Java?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Последний опубликованный Юнити 4.5 "исключительно" поддерживает синтаксис трех языков JavaScript, C#, Boo.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

×

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.