forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Камера как в Dead space (http://forum.boolean.name/showthread.php?t=17886)

SGREED 15.02.2013 02:02

Камера как в Dead space
 
Вложений: 3
Привет,
Вопрос о камере в игре
Сделал я камеру, вид такой как на моем скриншоте,
Но сейчас камера не поворачиваеться, а поворачиваеться только когда я игрока поварачиваю клавишами,
А хотелось бы сделать обзор игрока с камеры,
Как можна создать точку рядом с игроком(как создавать я знаю) что бы получался обзор вокруг этой точки
тот кто играл Dead Space поймет как это =)
я немного о своем вопросе сделал рисунки :)
Мне просто интересно как можна сделать прывязку камеры к точке?
Сам скрипт текущей камеры
PHP код:

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;
    }


возможно этот скрипт и не очень и нужен будет, ну я незнаю)
Подскажите мне что сделать надо так как я россказал?
:)

pax 15.02.2013 09:19

Ответ: Камера как в Dead space
 
Не играл в дед спейс, но есть функция http://docs.unity3d.com/Documentatio...ateAround.html
Еще может камера из этого примера тебе подойдет http://u3d.as/content/unity-technologies/bootcamp/28W

SGREED 15.02.2013 10:32

Ответ: Камера как в Dead space
 
Неа, это не то не работает, камера улетает
Сейчас уточню
Камера получаеться должна быть не ззади него, а что бы можно было вращать её её вокруг игрока

pax 15.02.2013 10:44

Ответ: Камера как в Dead space
 
вот там в примере
PHP код:

transform.RotateAround (Vector3.zeroVector3.up20 Time.deltaTime); 

надо заменить на
PHP код:

transform.RotateAround (rotationPivot.positionVector3.up20 Time.deltaTime); 

где rotationPivot - это пивот (Transform), вокруг которого должно быть вращение. Вероятнее всего вращение надо делать в LateUpdate

UPD
На самом деле есть способ проще:
1. создать "точку"
2. поместить камеру в "точку"
3. вращать точку, а не камеру

SGREED 15.02.2013 23:05

Ответ: Камера как в Dead space
 
Спасибо! Помогло))))

WISHMASTER35 16.02.2013 00:20

Ответ: Камера как в 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
        }
       
}


Randomize 16.02.2013 00:28

Ответ: Камера как в Dead space
 
PHP код:

float dx Input.GetAxis"Mouse X" )*4;
float dy Input.GetAxis"Mouse Y" )*4

Это всерьёз?

SGREED 16.02.2013 00:32

Ответ: Камера как в Dead space
 
Я попробывал твой скрипт и у меня выдает ошибку
Цитата:

Assets/NewBehaviourScript.cs(51,37): error CS0103: The name `CameraCollider' does not exist in the current context

SGREED 16.02.2013 00:35

Ответ: Камера как в Dead space
 
Или так нужно назвать камеру? 0_О
хотя вроде нет

SGREED 16.02.2013 00:40

Ответ: Камера как в Dead space
 
Ну то ладно, камера у меня и так за плечом и все хорошо работает, хороший обзорчик игрока,
вот ище интересно
Вот камера всегда на одном расстоянии, когда касаеться камера collider обьектов она ззади, как баг получаеться, можна смотреть так через стены
можна сделать так что бы камера когда в упор к стене не за ней была ,а как то отталкивалась типо, ну что бы не пролазила через стену ,
незнаю как правильно обьяснить.

pax 16.02.2013 11:07

Ответ: Камера как в Dead space
 
Можно сделать рейкаст или spherecast в сторону камеры от игрока, определить расстояние, на котором можно поместить камеру и поместить ее на это расстояние.

SGREED 16.02.2013 12:25

Ответ: Камера как в Dead space
 
А как это сделать?

seaman 16.02.2013 12:40

Ответ: Камера как в Dead space
 
ТАК

pax 16.02.2013 13:37

Ответ: Камера как в Dead space
 
Вот например пример http://wiki.unity3d.com/index.php?ti...eOrbitImproved

SGREED 16.02.2013 14:25

Ответ: Камера как в Dead space
 
Я посмотрю, спасибо :)


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Перевод: zCarot