rigidbody.moveposition moves weird on child when parent star rotating

Hello

I 'm making a 3D trap, two walls that close towards each other on regular intervals.

Used the rigid body on then to push any player inside, and was working greatly first until I duplicated and shifted its rotation

There is a parent witch the script, and 2 walls as child. I pick theirs rb and start moving with .MovePosition based on the fathers position + distance from the middle.

Tested if the positions are right with gizmos and seem ok, so I clearly didn’t get rbs right…

Edit: removed code file

Please, post your code using code tags; do not make us download a file.

Code tags:

oh, sorry xP

first time on a forum

code tags:

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

public class ParedeEsmaga : MonoBehaviour
{

    [HideInInspector] public float distanciaInicial;
    [HideInInspector] public float velocidadeFechamento;

    [SerializeField] private float distanciaFechamento;
    [SerializeField] private float distanciaMinima = 7.4f;
    [SerializeField] private bool fechando;

    [SerializeField] private GameObject paredeEsquerda;
    [SerializeField] private GameObject paredeDireita;
    private Rigidbody pErb;
    private Rigidbody pDrb;

    private BoxCollider colisaoTrigger;

    // Start is called before the first frame update
    void Start()
    {
        distanciaFechamento = distanciaInicial;

        pErb = paredeEsquerda.GetComponent<Rigidbody>();
        pDrb = paredeDireita.GetComponent<Rigidbody>();

        pDrb.isKinematic = true;
        pErb.isKinematic = true;

        colisaoTrigger = GetComponent<BoxCollider>();
    }

    // Update is called once per frame
    void FixedUpdate()
    {
        //abre e fecha a armadilha
        _Fechamento();
    }

    public void _DistanciaInicial(float distancia)
    {

        if (distanciaInicial != distancia)
        {
            Vector3 posicaoEsquerda = new Vector3(0, 0, -distancia);
            Vector3 posicaoDireita = new Vector3(0, 0, distancia);

            paredeEsquerda.transform.localPosition = (posicaoEsquerda);
            paredeDireita.transform.localPosition = (posicaoDireita);

            distanciaInicial = distancia;
        }


    }

    public void _Fechamento()
    {
        //se fechando, vai fechar a armadilha ate a diferença da distancia ser menor que a minima
        if (fechando)
        {
            distanciaFechamento -= velocidadeFechamento * Time.fixedDeltaTime;

            if (distanciaFechamento < distanciaMinima)
            {
                fechando = false;
                distanciaFechamento = distanciaMinima;
            }
        }
        else // do contrario vai abrir ate ser maior que a distancia inicial
        {
            distanciaFechamento += velocidadeFechamento * Time.fixedDeltaTime;

            if (distanciaFechamento >= distanciaInicial)
                fechando = true;
        }

        //cria o vertor para cada lado da armadilha
        Vector3 posicaoEsquerda = new Vector3(0, 0, -distanciaFechamento);
        Vector3 posicaoDireita = new Vector3(0, 0, distanciaFechamento);

        //move pelo rigidbody se baseando na posição central + o vetor de movimento conciderando a direção do prefab
        pErb.MovePosition(transform.position + transform.TransformDirection(posicaoEsquerda));
        pDrb.MovePosition(transform.position + transform.TransformDirection(posicaoDireita));

        gizmoPosicaoEsquerda = (transform.position + transform.TransformDirection(posicaoEsquerda));
        gizmoPosicaoDireita = (transform.position + transform.TransformDirection(posicaoDireita));

        //por algum motivo, o rigid body não se move para a posição correta, equanto os gizmo confirmam que esta certo

        Debug.Log(transform.position + " + " + transform.TransformDirection(posicaoEsquerda) + " = " + (transform.position + transform.TransformDirection(posicaoEsquerda)) + "    " + Time.frameCount);
    }

    private void OnTriggerStay(Collider other)
    {
        if(other.CompareTag("Player") && distanciaFechamento - distanciaMinima < colisaoTrigger.size.z)
        {
            RB_PlayerController player = other.GetComponent<RB_PlayerController>();

            player._Morre();
        }
    }

    private Vector3 gizmoPosicaoEsquerda;
    private Vector3 gizmoPosicaoDireita;

    private void OnDrawGizmos()
    {
        Gizmos.color = Color.red;

        Gizmos.DrawSphere(gizmoPosicaoEsquerda, 1);
        Gizmos.DrawSphere(gizmoPosicaoDireita, 1);
    }
}