One of the transition mechanisms involves Network Address Translation. A translator is a box that you put one protocol (e.g. IPv6) into, and the same information in another protocol (e.g. IPv4) comes out the other side. This is very different from tunneling.
A number of attempts have been made to do bidirectional translation between IPv6 and IPv4, but it appears that this is not possible. There are too many problems. The protocols are just too different. By defining down the problem to a simpler case, translation from an IPv6 client to an IPv4 server on the other side of the translation gateway, they have come up with a scheme that works fairly well. There are still issues with that, and the IPv6 clients must use a DNS server that implements a very strange version of DNS (DNS64) – when resolving to an IPv6 address, DNS64 works as usual. When resolving to an IPv4 address, it returns a special fabricated IPv6 address that has the IPv4 address embedded in it. An IPv6 node can forward that packet, with the fabricated address to a NAT64 gateway. That gateway will extract the IPv4 address and connect to the IPv4 server on the other side of the gateway.
This means you can deploy an IPv6-only network, and the nodes in it can access legacy IPv4-only external servers via the translation gateway. This allows getting rid of all IPv4 inside the network.