Перейти к содержанию

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


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

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

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

×
×
  • Создать...

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

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