Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Общие вопросы

Общие вопросы вопросы не попадающие ни в один из доступных разделов

Ответ
 
Опции темы
Старый 15.02.2013, 02:02   #1
SGREED
ПроЭктировщик
 
Аватар для SGREED
 
Регистрация: 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 0MouseX 1MouseY }
    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.Input.GetAxis("Mouse X") * sensitivityX;
            
            
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
            
rotationY Mathf.Clamp (rotationYminimumYmaximumY);
            
            
transform.localEulerAngles = new Vector3(-rotationYrotationX0);
        }
        else if (
axes == RotationAxes.MouseX)
        {
            
transform.Rotate(0Input.GetAxis("Mouse X") * sensitivityX0);
        }
        else
        {
            
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
            
rotationY Mathf.Clamp (rotationYminimumYmaximumY);
            
            
transform.localEulerAngles = new Vector3(-rotationYtransform.localEulerAngles.y0);
        }
    }
    
    
void Start ()
    {
        if (
rigidbody)
            
rigidbody.freezeRotation true;
    }

возможно этот скрипт и не очень и нужен будет, ну я незнаю)
Подскажите мне что сделать надо так как я россказал?
Миниатюры
Нажмите на изображение для увеличения
Название: 14.02.png
Просмотров: 1426
Размер:	728.7 Кб
ID:	18782  Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 1305
Размер:	31.5 Кб
ID:	18783  Нажмите на изображение для увеличения
Название: Безымянный2.png
Просмотров: 1266
Размер:	16.8 Кб
ID:	18784  
(Offline)
 
Ответить с цитированием
Старый 15.02.2013, 09:19   #2
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Камера как в Dead space

Не играл в дед спейс, но есть функция http://docs.unity3d.com/Documentatio...ateAround.html
Еще может камера из этого примера тебе подойдет http://u3d.as/content/unity-technologies/bootcamp/28W
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 15.02.2013, 10:32   #3
SGREED
ПроЭктировщик
 
Аватар для SGREED
 
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
Ответ: Камера как в Dead space

Неа, это не то не работает, камера улетает
Сейчас уточню
Камера получаеться должна быть не ззади него, а что бы можно было вращать её её вокруг игрока
(Offline)
 
Ответить с цитированием
Старый 15.02.2013, 10:44   #4
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Камера как в Dead space

вот там в примере
transform.RotateAround (Vector3.zeroVector3.up20 Time.deltaTime); 
надо заменить на
transform.RotateAround (rotationPivot.positionVector3.up20 Time.deltaTime); 
где rotationPivot - это пивот (Transform), вокруг которого должно быть вращение. Вероятнее всего вращение надо делать в LateUpdate

UPD
На самом деле есть способ проще:
1. создать "точку"
2. поместить камеру в "точку"
3. вращать точку, а не камеру
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 15.02.2013, 23:05   #5
SGREED
ПроЭктировщик
 
Аватар для SGREED
 
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
Ответ: Камера как в Dead space

Спасибо! Помогло))))
(Offline)
 
Ответить с цитированием
Старый 16.02.2013, 00:20   #6
WISHMASTER35
Бывалый
 
Аватар для WISHMASTER35
 
Регистрация: 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
Randomize
[object Object]
 
Аватар для Randomize
 
Регистрация: 01.08.2008
Адрес: В России
Сообщений: 4,355
Написано 2,471 полезных сообщений
(для 6,853 пользователей)
Ответ: Камера как в 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 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
SGREED
ПроЭктировщик
 
Аватар для SGREED
 
Регистрация: 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
SGREED
ПроЭктировщик
 
Аватар для SGREED
 
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
Ответ: Камера как в Dead space

Или так нужно назвать камеру? 0_О
хотя вроде нет
(Offline)
 
Ответить с цитированием
Старый 16.02.2013, 00:40   #10
SGREED
ПроЭктировщик
 
Аватар для SGREED
 
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
Ответ: Камера как в Dead space

Ну то ладно, камера у меня и так за плечом и все хорошо работает, хороший обзорчик игрока,
вот ище интересно
Вот камера всегда на одном расстоянии, когда касаеться камера collider обьектов она ззади, как баг получаеться, можна смотреть так через стены
можна сделать так что бы камера когда в упор к стене не за ней была ,а как то отталкивалась типо, ну что бы не пролазила через стену ,
незнаю как правильно обьяснить.
(Offline)
 
Ответить с цитированием
Старый 16.02.2013, 11:07   #11
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Камера как в Dead space

Можно сделать рейкаст или spherecast в сторону камеры от игрока, определить расстояние, на котором можно поместить камеру и поместить ее на это расстояние.
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 16.02.2013, 12:25   #12
SGREED
ПроЭктировщик
 
Аватар для SGREED
 
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
Ответ: Камера как в Dead space

А как это сделать?
(Offline)
 
Ответить с цитированием
Старый 16.02.2013, 12:40   #13
seaman
Знающий
 
Регистрация: 08.01.2013
Адрес: Самара
Сообщений: 284
Написано 104 полезных сообщений
(для 180 пользователей)
Ответ: Камера как в Dead space

ТАК
(Offline)
 
Ответить с цитированием
Старый 16.02.2013, 13:37   #14
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Камера как в Dead space

Вот например пример http://wiki.unity3d.com/index.php?ti...eOrbitImproved
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 16.02.2013, 14:25   #15
SGREED
ПроЭктировщик
 
Аватар для SGREED
 
Регистрация: 05.02.2013
Сообщений: 149
Написано одно полезное сообщение
Ответ: Камера как в Dead space

Я посмотрю, спасибо
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 20:35.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com