Intro : Итак, я хочу сделать 2D Topdown Shooter. Игрок должен быть в состоянии двигаться, и у него есть «BullerShoter», который может быть продуман до оружия, который стреляет пулями из своего положения в направлении мыши
Моя цель : Возможность стрелять в сторону MousePosition при перемещении
Настройка : 1x GameObject -> Player (родитель, может перемещаться через WASD)
1x GameObject -> BulletShooter (Child of Игрок, отслеживает mousePos, это RigidBody2D.rotation установлен на вычисленный угол к MousePos)
Logi c: получить положение мыши и преобразовать его в World Space Coords, вычислить Угол от BullertShooter до этих Координат, установите значение BulbShooter's'sbsBody.rotation = angle
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
public class BulletShooter : MonoBehaviour
{
PlayerInputAction inputAction;
public GameObject bulletPrefab;
private Rigidbody2D rb;
private Vector2 mousePos;
private Vector2 mousePosInWorld;
private void Awake()
{
inputAction = new PlayerInputAction();
inputAction.PlayerControls.Look.performed += ctx => mousePos = ctx.ReadValue<Vector2>();
inputAction.PlayerControls.Shoot.performed += ctx => shoot();
rb = gameObject.GetComponent<Rigidbody2D>();
}
private void shoot()
{
GameObject projectile = (GameObject) Instantiate(bulletPrefab, gameObject.transform.position, gameObject.transform.rotation);
}
void Update()
{
mousePosInWorld = Camera.main.ScreenToWorldPoint(mousePos);
}
void FixedUpdate()
{
Vector2 lookDir = mousePosInWorld - rb.position;
float angle = Mathf.Atan2(lookDir.y, lookDir.x) * Mathf.Rad2Deg - 90f;
Debug.Log("Rotation before:" + rb.rotation);
Debug.Log("Angle: " + angle); // Assuming the gameObject (BulletShooter)
rb.rotation = angle;
Debug.Log("Rotation after:" + rb.rotation); //
}
private void OnEnable()
{
inputAction.Enable();
}
private void OnDisable()
{
inputAction.Disable();
}
}
Проблема : BulletShooter будет вращаться только тогда, когда игрок не двигается.
Мой тезис: Существует корреляция между вращением игрока и вращением BulletShooter.
Мой обходной путь : Если я позволю BulletShooter БЫТЬ игрой er -> только 1 GameObject, который обрабатывает все, он работает как шарм. Но я хочу 2 GameObjects, 1 для движения, другой для прицеливания и стрельбы
Вопрос : Как можно При вращении Родителя я поворачиваю Ребёнка, не устанавливая его вращение на вращение Родителя.