@Hicher

Unity 3d mobile. Как Реализовать удержание цели в прицеле, одновременно с контролем камеры, при использовании Touch Controll для вращении камеры?

Пытаюсь реализовать управление камерой как в Dino Squad или War Robots.

интересует понимание как можно выстроить систему, чтобы можно было объяснить через код,
что при наведенном прицеле на цель, при нажатии кнопки "Огонь" , камера и прицел следовали за целью, но если начинается поворот камеры при помощью пальца слежение отключись, и камера спокойно подконтрольно поворачивалась, даже при зажатой кнопки выстрела, и соответственно в обратную сторону, чтобы при зажатой кнопки огонь, если поворот камеры не осуществляется и цель находится в прицеле, то включалось бы следование поворота за целью.

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

вот мой скрипт
void FixedUpdate()
{

Looker();

// camera controll rotation, вращением объект с помощью тачскрина
_angle.x -= Field.TouchDist.y * CamSpeed * Time.deltaTime;
_angle.y += Field.TouchDist.x * CamSpeed * Time.deltaTime;

//camera angle controll, ограничители угла поворота, чтобы не было слишком вниз и слишком вверх
_angle.x = Mathf.Clamp(_angle.x, -minClamp.x, minClamp.y);

//camera rotation вращение объекта
Quaternion rot = Quaternion.Euler(_angle.x, _angle.y, 0);
transform.rotation = Quaternion.Slerp(transform.rotation, rot, CamSpeed * Time.deltaTime);

//camera follow player это чтобы объект повторял движение Игрока (Игроком мы двигаемся)
Vector3 PlayerPos = new Vector3(Player.position.x, Player.position.y, Player.position.z);
Vector3 CameraPos = Vector3.Lerp(transform.position, PlayerPos, Time.deltaTime * CamSpeed);
transform.position = CameraPos;
}

void Looker()
{
Ray ray = camera.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2, 0));
Debug.DrawRay(ray.origin, ray.direction * 100, Color.yellow);

RaycastHit hitt;

if (Physics.Raycast(ray, out hitt, distance, mask))
{
if (hitt.collider.gameObject.CompareTag("Enemy"))
{
GameObject Enemy = hitt.collider.gameObject;
Vector3 direction = Enemy.transform.position - transform.GetChild(0).position;

  targetRotation = Quaternion.LookRotation(direction);

  targetRotation = Quaternion.Euler(targetRotation.eulerAngles - transform.GetChild(0).localEulerAngles);

 lookAt = Quaternion.Slerp(lookAt, targetRotation, lookspeed * Time.deltaTime);

 transform.rotation = lookAt;

Но получается очень жестко, нацеливание резкое при наведении прицела соответственно резкое, а слезть с цели еще тяжелее

https://imgur.com/a/NVKVWqu - вот примерно то что есть
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы