|
Общие вопросы вопросы не попадающие ни в один из доступных разделов |
15.02.2013, 02:02
|
#1
|
ПроЭктировщик
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
|
Камера как в Dead space
Привет,
Вопрос о камере в игре
Сделал я камеру, вид такой как на моем скриншоте,
Но сейчас камера не поворачиваеться, а поворачиваеться только когда я игрока поварачиваю клавишами,
А хотелось бы сделать обзор игрока с камеры,
Как можна создать точку рядом с игроком(как создавать я знаю) что бы получался обзор вокруг этой точки
тот кто играл Dead Space поймет как это =)
я немного о своем вопросе сделал рисунки
Мне просто интересно как можна сделать прывязку камеры к точке?
Сам скрипт текущей камеры
using UnityEngine; using System.Collections; [AddComponentMenu("Camera-Control/Mouse Look")] public class MouseLook : MonoBehaviour { public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 } public RotationAxes axes = RotationAxes.MouseXAndY; public float sensitivityX = 15F; public float sensitivityY = 15F; public float minimumX = -360F; public float maximumX = 360F; public float minimumY = -60F; public float maximumY = 60F; float rotationY = 0F; void Update () { if (axes == RotationAxes.MouseXAndY) { float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX; rotationY += Input.GetAxis("Mouse Y") * sensitivityY; rotationY = Mathf.Clamp (rotationY, minimumY, maximumY); transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0); } else if (axes == RotationAxes.MouseX) { transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityX, 0); } else { rotationY += Input.GetAxis("Mouse Y") * sensitivityY; rotationY = Mathf.Clamp (rotationY, minimumY, maximumY); transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0); } } void Start () { if (rigidbody) rigidbody.freezeRotation = true; } }
возможно этот скрипт и не очень и нужен будет, ну я незнаю)
Подскажите мне что сделать надо так как я россказал?
|
(Offline)
|
|
15.02.2013, 09:19
|
#2
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Камера как в Dead space
|
(Offline)
|
|
15.02.2013, 10:32
|
#3
|
ПроЭктировщик
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
|
Ответ: Камера как в Dead space
Неа, это не то не работает, камера улетает
Сейчас уточню
Камера получаеться должна быть не ззади него, а что бы можно было вращать её её вокруг игрока
|
(Offline)
|
|
15.02.2013, 10:44
|
#4
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Камера как в Dead space
вот там в примере
transform.RotateAround (Vector3.zero, Vector3.up, 20 * Time.deltaTime);
надо заменить на
transform.RotateAround (rotationPivot.position, Vector3.up, 20 * Time.deltaTime);
где rotationPivot - это пивот (Transform), вокруг которого должно быть вращение. Вероятнее всего вращение надо делать в LateUpdate
UPD
На самом деле есть способ проще:
1. создать "точку"
2. поместить камеру в "точку"
3. вращать точку, а не камеру
|
(Offline)
|
|
15.02.2013, 23:05
|
#5
|
ПроЭктировщик
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
|
Ответ: Камера как в Dead space
Спасибо! Помогло))))
|
(Offline)
|
|
16.02.2013, 00:20
|
#6
|
Бывалый
Регистрация: 21.12.2008
Адрес: UA
Сообщений: 878
Написано 105 полезных сообщений (для 357 пользователей)
|
Ответ: Камера как в Dead space
Я когда-то делал, чтобы камера за плечом была.
public class CameraOrbit : MonoBehaviour {
public Transform target;
public Vector3 targetOffset = new Vector3(0, 1.5f, 0);
private Vector3 smoothTargetPosition;
public float minAngleX = -20, maxAngleX = 60;
private Vector3 angles;
private const float minDistance = 1.0f;
private float distance;
public float maxDistance = 7.0f;
public Vector3 cameraOffset = new Vector3(1, 0, 0);
void OnEnable() {
if( !target ) return;
angles = transform.eulerAngles;
distance = maxDistance;
smoothTargetPosition = target.TransformPoint(targetOffset);
}
void FixedUpdate() {
if( !target ) return;
Vector3 targetPosition = target.TransformPoint(targetOffset);
smoothTargetPosition = Vector3.Lerp(smoothTargetPosition, targetPosition, 20*Time.deltaTime);
}
void LateUpdate () {
if( !target ) return;
angles += GetInputRotation();
angles.x = ClampAngle(angles.x, minAngleX, maxAngleX);
Quaternion rotation = Quaternion.Euler(angles);
Quaternion smoothRotation = Quaternion.Slerp(transform.rotation, rotation, 20*Time.deltaTime);
ComputeTransform(smoothTargetPosition, smoothRotation, maxDistance, cameraOffset);
CollisionTest(smoothTargetPosition);
}
private void ComputeTransform(Vector3 targetPosition, Quaternion rotation, float distance, Vector3 cameraOffset) {
transform.rotation = rotation;
transform.position = targetPosition;
transform.Translate(0, 0, -distance);
transform.Translate(cameraOffset * distance);
}
private void CollisionTest(Vector3 targetPosition) {
float newDistance = CameraCollider.CollisionTest(camera, targetPosition, maxDistance);
newDistance = Mathf.Max(newDistance, 0.5f);
newDistance = Mathf.Lerp(distance, newDistance, 10*Time.deltaTime);
Vector3 dir = transform.position - targetPosition;
transform.position = targetPosition + dir.normalized * newDistance;
distance = newDistance;
}
private static float ClampAngle(float angle, float min, float max) {
if (angle < -360) angle += 360;
if (angle > 360) angle -= 360;
return Mathf.Clamp (angle, min, max);
}
private Vector3 GetInputRotation() {
#if (UNITY_ANDROID || UNITY_IOS) && !UNITY_EDITOR
return MobileInput.GetRotation();
#else
if( !Input.GetMouseButton(1) ) return Vector2.zero;
float dx = Input.GetAxis( "Mouse X" )*4;
float dy = Input.GetAxis( "Mouse Y" )*4;
return new Vector2(-dy, dx);
#endif
}
}
|
(Offline)
|
|
16.02.2013, 00:28
|
#7
|
[object Object]
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,361
Написано 2,473 полезных сообщений (для 6,856 пользователей)
|
Ответ: Камера как в Dead space
float dx = Input.GetAxis( "Mouse X" )*4; float dy = Input.GetAxis( "Mouse Y" )*4;
Это всерьёз?
__________________
Retry, Abort, Ignore? █
Intel Core i7-9700 4.70 Ghz; 64Gb; Nvidia RTX 4090 3070
AMD Ryzen 7 3800X 4.3Ghz; 64Gb; Nvidia 1070Ti
AMD Ryzen 7 1700X 3.4Ghz; 8Gb; AMD RX 570
AMD Athlon II 2.6Ghz; 8Gb; Nvidia GTX 750 Ti
|
(Offline)
|
|
16.02.2013, 00:32
|
#8
|
ПроЭктировщик
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
|
Ответ: Камера как в Dead space
Я попробывал твой скрипт и у меня выдает ошибку
Assets/NewBehaviourScript.cs(51,37): error CS0103: The name `CameraCollider' does not exist in the current context
|
|
(Offline)
|
|
16.02.2013, 00:35
|
#9
|
ПроЭктировщик
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
|
Ответ: Камера как в Dead space
Или так нужно назвать камеру? 0_О
хотя вроде нет
|
(Offline)
|
|
16.02.2013, 00:40
|
#10
|
ПроЭктировщик
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
|
Ответ: Камера как в Dead space
Ну то ладно, камера у меня и так за плечом и все хорошо работает, хороший обзорчик игрока,
вот ище интересно
Вот камера всегда на одном расстоянии, когда касаеться камера collider обьектов она ззади, как баг получаеться, можна смотреть так через стены
можна сделать так что бы камера когда в упор к стене не за ней была ,а как то отталкивалась типо, ну что бы не пролазила через стену ,
незнаю как правильно обьяснить.
|
(Offline)
|
|
16.02.2013, 11:07
|
#11
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Камера как в Dead space
Можно сделать рейкаст или spherecast в сторону камеры от игрока, определить расстояние, на котором можно поместить камеру и поместить ее на это расстояние.
|
(Offline)
|
|
16.02.2013, 12:25
|
#12
|
ПроЭктировщик
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
|
Ответ: Камера как в Dead space
А как это сделать?
|
(Offline)
|
|
16.02.2013, 12:40
|
#13
|
Знающий
Регистрация: 08.01.2013
Адрес: Самара
Сообщений: 284
Написано 104 полезных сообщений (для 180 пользователей)
|
Ответ: Камера как в Dead space
|
(Offline)
|
|
16.02.2013, 13:37
|
#14
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Камера как в Dead space
|
(Offline)
|
|
16.02.2013, 14:25
|
#15
|
ПроЭктировщик
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
|
Ответ: Камера как в Dead space
Я посмотрю, спасибо
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 11:07.
|