Yes, there are built in methods for this. Here is direct
Documentation example for
"EdgeWeighted" -> True oprion.
Consider a random graph which due to its tree nature will produce a tree-like layout with automatic settings. The edges are randomly weighted with weights shown as edge labels.
SeedRandom[1];
edge = RandomInteger[#] \[UndirectedEdge] # + 1 & /@ Range[0, 30];
weight = RandomInteger[{1, 5}, 31];
g = Graph[edge, EdgeWeight -> weight, GraphStyle -> "ThickEdge", EdgeLabels -> "EdgeWeight"]

SpringElectricalEmbedding and SpringEmbedding can take an additional option for to specify whether edge weight should be taken in account or not. Here is a comparison table of weighted versus not weighted layouts. The edges are labeled by their weight. In the right column larger numbers correspond to longer edges.
Grid[{{"Not Weighted", "Weighted"}}~Join~Partition[
SetProperty[g, GraphLayout -> #] & /@
{"SpringElectricalEmbedding", {"SpringElectricalEmbedding", "EdgeWeighted" -> True},
"SpringEmbedding", {"SpringEmbedding", "EdgeWeighted" -> True}}
, 2], Spacings -> 0, Frame -> All, Background -> {None, {Orange}}]

Now to go to 3D we need to use the same embedding but specify dimensionality of space 3 to for the GraphEmbedding function:
g = Graph[edge, EdgeWeight -> weight, GraphLayout -> {"SpringEmbedding", "EdgeWeighted" -> True}];
coord = GraphEmbedding[g, Automatic, 3];
nedges = Thread[{EdgeRules[g], PropertyValue[g, EdgeWeight]}];
GraphPlot3D[nedges,
VertexCoordinateRules -> coord,
EdgeRenderingFunction -> ({{Opacity[.4], Lighter[Blue, .5], Cylinder[#1, .05]},
Text[#3, (#1[[1]] + #1[[2]])/2]} &),
VertexRenderingFunction -> ({Lighter[Red, .5], Sphere[#1, .1]} &),
PlotStyle -> Directive[Specularity[White, 20]],
Lighting -> "Neutral",
Boxed -> False]