У меня есть пушка, которая должна вращаться горизонтально, вокруг своей оси. Это я как-то смог реализовать, но когда транспорт, на котором она стоит, заезжает на неровность, она сохраняет свое горизонтально положение, а должна повторять положение транспорта.
Вот код:
public class TowerControll : MonoBehaviour
{
public LayerMask maskObstacles;
[SerializeField]
private Transform tower, gun;
[Range(0, 5)]
public float rotSpeed = 1.5f;
[Range(0, 5)]
public float rotSpeedGun = 1.5f;
public int angleDown, angleUp;
private float _rotY, _rotX;
private Vector3 _offset;
private void Start()
{
_rotY = transform.eulerAngles.y;
_rotX = transform.eulerAngles.x;
_offset = tower.position - transform.position;
}
private void LateUpdate()
{
_rotY += Input.GetAxis("Mouse X") * rotSpeed * 3;
_rotX += Input.GetAxis("Mouse Y") * rotSpeedGun * 3;
_rotX = Mathf.Clamp(_rotX, -angleDown, angleUp);
Quaternion rotation = Quaternion.Euler(0f, _rotY, 0f);
Quaternion rotationGun = Quaternion.Euler(-_rotX, _rotY, 0f);
gun.rotation = rotationGun;
tower.rotation = rotation;
transform.position = tower.position - (rotationGun * _offset);
transform.LookAt(tower);
RaycastHit hit;
if (Physics.Raycast(tower.position, transform.position - tower.position, out hit, Vector3.Distance(transform.position, tower.position), maskObstacles))
{
transform.position = hit.point;
transform.LookAt(tower);
}
}
}