MasterGH

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

6 сообщений в этой теме

Игровой движок 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

0

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


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

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

0

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


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

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

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

0

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


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

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

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

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

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

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

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

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

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

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

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

0

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


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

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

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

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

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

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

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

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

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

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

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

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

0

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


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

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

0

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


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

Создайте аккаунт или войдите для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас