Making a part face the same direction the player is facing

Hi, am currently in the process of creating a game. In the game, the player can click with a tool equipped, and a raycast finds the ground that they are standing on, then spawns a part on the ground below them.

this can be seen here:
The red ball is where the raycast hits (works great)
the part at the players feet is the part that spawns.

image

The pink face should be at the front of the player.
The blue face should be facing upwards,
like this:

Although, as you can see, in the first image, the direction that the part faces are facing, constantly changes.
I am also encountering an issue, where sometimes it doesn’t even spawn with the correct orientation:

Here is the part of the script that deals with the part position and orientation:

Bridge:WaitForChild("Edge1").Position = raycastResult.Position
Bridge.Edge1.CFrame = CFrame.lookAt(raycastResult.Position, player.Character:GetPivot().Position)

How would I make it so that when the part is spawned, it faces the SAME direction that the player is facing, and the BLUE face always looks up at the sky, and the PINK face is always at the front of the player (Image 2 shows this perfectly)?

local cframe = humanoidRootPart.CFrame + humanoidRootPart.CFrame.LookVector
part.CFrame = CFrame.new(part.CFrame, cframe)

Something like that should work?

To make the spawned part face the same direction that the player is facing with the blue face always looking up at the sky and the pink face always at the front of the player, you can calculate the orientation based on the player’s camera direction. Here’s how you can achieve this:

Lua

local player = game.Players.LocalPlayer -- Assuming you have access to the player
local Bridge = game.Workspace.Bridge -- Replace 'Bridge' with the name of your part
local tool = player.Backpack.YourToolName -- Replace 'YourToolName' with the actual name of your tool

local function createBridgePart()
    local raycastResult = tool:FindPartOnRayWithIgnoreList(tool.Handle.CFrame.p, Vector3.new(0, -100, 0), {player.Character, Bridge})

    if raycastResult then
        local bridgePart = Bridge:WaitForChild("Edge1")

        -- Set the position of the part
        bridgePart.Position = raycastResult.Position

        -- Calculate the orientation based on player's camera direction
        local playerCamera = game.Workspace.CurrentCamera
        local playerPosition = player.Character.HumanoidRootPart.Position

        local lookVector = (playerPosition - raycastResult.Position).unit
        local upVector = playerCamera.CFrame.UpVector
        local rightVector = upVector:Cross(lookVector)

        bridgePart.CFrame = CFrame.new(raycastResult.Position, raycastResult.Position + lookVector, rightVector, upVector)
    end
end

-- Example: Call the function when the player clicks with the tool
tool.Activated:Connect(function()
    createBridgePart()
end)

In this script, we calculate the orientation of the part based on the player’s camera direction. The lookVector points from the part to the player’s camera position, ensuring the blue face looks up at the sky. The rightVector is calculated as the cross product between the camera’s up vector and the lookVector, ensuring the pink face is at the front of the player.

Replace 'YourToolName' with the actual name of your tool, and make sure this script is placed in a location where it can access the player’s character and the Bridge part.