Вопросы и ответы по «Unity 3D»

Как в unity3d для android сделать повороты камеры на сенсорном управлении?

вот тут у меня ест скрипт на управление и повороты, но он работает не корректно. Когда поворачиваю камеру, игрок к которому прикреплена камера, поворачивается вместе с камерой, и даже когда вниз смотрю игрок переворачивается и меняет местоположение гравитации.
Вот сам скрипт:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Joystic_controller : MonoBehaviour
{
public float speedMove; // Скорость персонажа
public float jumpPower; // Сила прыжка
public Button jump;

public float gravityForse; // Гравитация
private Vector3 moveVector; // Направление движения персонажа


private CharacterController ch_controller; // Ссылка на компонент CharacterController

public Joystick joy; // Ссылка на джойстик

public Transform cameraTransform; // Ссылка на камеру

public float cameraSensitivity; // Чувствительность поворота камеры
public float moveInputDeadZone; //

int rightFingerId; // Переменная для пальца
float halfScreenWidth; // Переменная для того что бы узнать размер экранна, что бы разделить его попалам

private Vector2 lookInput; // направление перемещения камеры
private float cameraPitch; // Переменная для камеры

public Transform player; // Ссылка на персонажа


void Start()
{
ch_controller = GetComponent<CharacterController>(); // Подключаем ссылку в старте с помощью GetComponent
rightFingerId = -1; // при старте, наша переменная отвечающая за палец будет равна -1
halfScreenWidth = Screen.width / 2; // Делим наш экран на пополам
moveInputDeadZone = Mathf.Pow(Screen.height / moveInputDeadZone, 2);
}

private void FixedUpdate()
{

MovePlayer();
GamingGravity();

if (rightFingerId != -1)
{
LookAround();
}
}


void Update()
{
GetJump();
GetTouchInput();
}

private void GetTouchInput() // Метод для отслеживания пальца
{
int i = 0;
for (i = 0; i < Input.touchCount; i++)
{
Touch t = Input.GetTouch(i);

switch (t.phase) // Для проверки фазы каждого кассания
{
case TouchPhase.Began: // Этот метод будет срабатывать каждый раз когда мы каснёмся экрана
if (t.position.x > halfScreenWidth && rightFingerId == -1) // Если наш палец находится на половине и rightFingerId == -1 то..
{
rightFingerId = t.fingerId; // Начинаем отслеживать наш палец
}
break;
case TouchPhase.Ended:
case TouchPhase.Canceled:
if (t.fingerId == rightFingerId)
{
rightFingerId = -1; // Тут мы прекратили отслеживать наш палец
}
break;
case TouchPhase.Moved: // Метод когда палец перемещается по экрану
if (t.fingerId == rightFingerId)
{
lookInput = t.deltaPosition * cameraSensitivity * Time.deltaTime; // Тут мы получаем информацию для lookInput
}
break;
case TouchPhase.Stationary: // Метод касания экрана без движения
if (t.fingerId == rightFingerId)
{
lookInput = Vector2.zero; // Вектор обнуляем
}
break;
}
}

}
private void LookAround() // Создаём метод для вращения камеры
{
cameraPitch = Mathf.Clamp(cameraPitch - lookInput.y, -90f, 90f); // Вращаем камеру по вертекали с указаным диапозоном -90f, 90f для того что бы не перекручивать камеру
cameraTransform.localRotation = Quaternion.Euler(cameraPitch,0,0);

transform.Rotate(cameraTransform.up, lookInput.x); // Вращаем камеру по горизонтали
}
private void MovePlayer() // Метод в котором будем перемещать персонажа
{
moveVector = Vector3.zero; // Обнуляем вектор направления движения (это нужно что бы не было случайных ошибок)
moveVector.x = joy.Horizontal; // Передвигаем персонажа по оси X и Перехватываем хначение по горизонтали
moveVector.z = joy.Vertical; // Перехватываем хначение по вертикали
gravityForse = -1f;
moveVector.y = gravityForse; // для того что бы на ось Y действовала гравитация
moveVector = transform.right * moveVector.x + transform.forward * moveVector.z + transform.up * moveVector.y; // Делаем так что бы наш персонаж поворачивался зп камерой

ch_controller.Move(moveVector * speedMove * Time.deltaTime); // Для того что бы наш персонаж перемещался
}
private void GamingGravity() // Метод для гравитации
{
if (!ch_controller.isGrounded) // Если мы не на земле
{
gravityForse -= 10f * Time.deltaTime; // Переменная отвечающая за гравитацию уменьшается
}
else
gravityForse -= gravityForse ; // Иначе, если мы на земле, возвращаем гравитацию в исходное положение
}

public Button GetJump()
{
return jump;
}

public void onClickJump(Button jump) // Метод для кнопки прыжка
{
if (ch_controller.isGrounded) // Если мы находимся на земле то...
gravityForse = jumpPower; // Переменная отвечающая за прыжок будет равна силе прыжка

}

}
09.05.2022 03:30
Пожаловаться
Подписаться
+
0
-
0

Ответы на вопрос (0)

Сортировать по
голосам
Пока нет ни одного ответа. Оставьте первый.
Попробуйте также:

Похожие вопросы :

Добавить ответ

Ваше имя:

Регистрация? Это возможность подписаться на новые ответы, получать за ответы очки и призы
В ответ на сообщение Нет
+ Фото
Captcha
Текст с картинки:
Отправить
Маты, сообщения БОЛЬШИМИ БУКВАМИ, с грубыми ошибками, просто неуважительные или совершенно не по теме будут удаляться.