Движение по локальной оси.

Общие вопросы о Unity3D

Движение по локальной оси.

Сообщение MakarGrom 24 сен 2020, 08:18

Здравствуйте!
У меня наверно немного глупый вопрос, но я поискал и ничего не нашёл. В общем у меня есть камера которую надо двигать по оси Z локальной системы координат. Эта камера присоедина к пушке которая в свою очередь тоже вращается. Я нашёл способ как получить эти координаты но эта функция ( Vector3 cameraRelative = cam.InverseTransformPoint(transform.position); ) даёт мне только читать изменять эти координаты она не даёт. Подскажите пожалуйста как это можно сделать.

Нерабочий код:
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;

public class ZoomCamera : MonoBehaviour
{
    public Transform cam;
    private Vector3 cameraRelative;
        public float speed;

    void Start()
    {
        Vector3 cameraRelative = cam.InverseTransformPoint(transform.position);      
    }

        void Update()
        {
                Vector3 relativePoint = transform.InverseTransformPoint(transform.position.x, transform.position.y, transform.position.z);
                relativePoint.z += Input.GetAxis("Mouse ScrollWheel");
                Debug.Log(Input.GetAxis("Mouse ScrollWheel"));
        }
}
MakarGrom
UNец
 
Сообщения: 20
Зарегистрирован: 08 апр 2020, 09:12

Re: Движение по локальной оси.

Сообщение samana 24 сен 2020, 09:48

Вы можете напрямую менять локальные координаты любого объекта.
Этот скрипт висит на камере (или любом другом объекте). Он мгновенно перемещает объект по локальной оси z с помощью колёсика мыши:
Синтаксис:
Используется csharp
using UnityEngine;

public class ZoomCamera : MonoBehaviour
{
    public float zoomStepScale = 5f; // величина изменения "шага" зума.

    void Update()
    {
        float inputZoom = Input.GetAxis("Mouse ScrollWheel") * zoomStepScale;
        transform.Translate(Vector3.forward * inputZoom, Space.Self);
    }
}



А можно сделать и плавное перемещение:
Синтаксис:
Используется csharp
using UnityEngine;

public class ZoomCamera : MonoBehaviour
{
    public float zoomStepScale = 5f;    // величина изменения "шага" зума.
    public float zoomSpeed = 5f;        // скорость/плавность изменения зума

    private float _currentZoomValue;
    private float _targetZoomValue;
    private  Vector3 _initLocalPosition;

   
    private void Start()
    {
        _targetZoomValue = _initLocalPosition.z;
        _currentZoomValue = _targetZoomValue;
        _initLocalPosition = transform.localPosition;
    }

    void Update()
    {
        _targetZoomValue += Input.GetAxis("Mouse ScrollWheel") * zoomStepScale;
        _currentZoomValue = Mathf.Lerp(_currentZoomValue, _targetZoomValue, zoomSpeed * Time.deltaTime);

        Vector3 nextPosition = _initLocalPosition + (Vector3.forward * _currentZoomValue);
        transform.localPosition = nextPosition;
    }
}
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Движение по локальной оси.

Сообщение MakarGrom 24 сен 2020, 18:38

Спасибо! ^:)^
MakarGrom
UNец
 
Сообщения: 20
Зарегистрирован: 08 апр 2020, 09:12


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19