Unityメモ 移動する床とプレイヤー 親子関係


プレイヤーのスクリプト
レイでの判定分け レイヤー使用

void OnCollisionStay(Collision col)
{

    if (Physics.Linecast(m_charaRay.position, m_charaRay.position + Vector3.down, LayerMask.GetMask("Ground")))
    {
        m_isGroundCollider = true;
    }
    else if(Physics.Linecast(m_charaRay.position, m_charaRay.position + Vector3.down,LayerMask.GetMask("MoveGround")))
    {
        m_isGroundCollider = true;
        gameObject.transform.SetParent(col.transform);//親子関係を設定
    }
    else
    {
        m_isGroundCollider = false;
        gameObject.transform.SetParent(null);//親子関係を外す
    }


}

注意点
プレイヤーでの移動方法で挙動が変わってくるので現在は
transform.positionを操作している

    Vector3 moveDir = Vector3.zero;

    if (Input.GetKey(KeyCode.W))
    {
        moveDir += forwardDir;
    }
    if (Input.GetKey(KeyCode.S))
    {
        moveDir -= forwardDir;
    }
    if (Input.GetKey(KeyCode.D))
    {
        moveDir.z += m_moveSpeed;
    }
    if (Input.GetKey(KeyCode.A))
    {
        moveDir.z -= m_moveSpeed;
    }

    //トランスフォームで移動させたら移動する床でも子オブジェクト状態でも移動できる
    if (moveDir.sqrMagnitude > Mathf.Epsilon)
    {

        transform.position += moveDir;
    }