How do I replicate Real Arm movements to Fake Arms (ViewModel)?

Which is what I’m using right now and I do not find it efficient.

1 Like

Weld the fake arms to their respective arms?

2 Likes

But it’s already CFrame’d to the Camera though?

Using WeldConstraint, yes. (I don’t know if it works with other types of Joints)

You could also simply set LocalTransparencyModifier = 0 to the character’s arms when entering first person.

EDIT: I read your thread again, so you want the arms to point to the camera?

You can modify the CFrame of the shoulders of the arms with the camera.Changed event, using the Mouse position.

I tried, and that’s the reason I don’t use TransparencyModifier:

How exactly?

You can create a WeldConstraint to attach the fake arm with the real arm, but that won’t help you if you want to follow the camera.

I could easily be missing something, but if you are still looking for other options, have your tried AlignOrientation with Responsiveness = 200?

Otherwise replicate arm CFrame plus a position offset would still seem to be the most straightforward and responsive approach. It’s not clear to me that you have in fact tried combining multiple CFrame operations together. Again, it’s likely I’m missing something.

If you just want the visual representation to appear on the client camera, another method could be the Viewport Portal approach in a ScreenGui where you see all or just specified parts of the avatar in the Viewport.

Never heard of AlignOrientation, is it necessary to include Attachments? I use Motor6D though.
Also will the CFrame overlays it?

You mean RealArmCFrame * Offset and make it position to the right place?

I don’t want to use ViewportFrames for ViewModel Arms, it just feel weird and awkward, judging by the lighting and efficiency. :thinking:

From what I understand your trying to make the arms visible in first person.

Use this local script to do it:

local character = (game.Players.LocalPlayer.Character or             
game.Players.LocalPlayer.CharacterAdded:wait())

game:GetService("RunService").RenderStepped:connect(function()
if (character:FindFirstChild("Right Arm") and character:FindFirstChild("Left Arm")) then
		character:FindFirstChild("Right Arm").LocalTransparencyModifier = 0
		character:FindFirstChild("Left Arm").LocalTransparencyModifier = 0
end
end)
1 Like

This makes the arms visible but their position may (likely) not be in view of the first person camera. It looks to me like OP wants to project a view of duplicate arms offset in front of the camera no matter where the camera is looking.

I want to create ViewModel Arms, not by using TransparencyModifier.

Its not worth it to make a viewmodel. it will take increase the lag, and decrease the performance, since it will capture EVERY SINGLE MOVEMENT

Just a note: OP has mentioned that they don’t want to use LocalTransparencyModifier several times now. Please remain on-topic and focus on trying to help OP. Repeating previous suggestions and telling them not to pursue their use case is counterproductive. :sweat_smile:

View models are inexpensive and many first person games currently up make use of view models. A few CFrame sets will not cause performance issues. If a view model causes lag, you aren’t doing it properly.

Please focus on trying to resolve the issue in the OP instead. :slightly_smiling_face:

1 Like

https://developer.roblox.com/en-us/api-reference/class/AlignOrientation

AlignOrientation does use attachments, one on the real arm, one on the ViewModel arm, for each arm. It’s my understanding these can be used in addition to the Motor6D you already have on the real arms. Not an expert, but if you haven’t looked into this option maybe it can work for you.

You mean RealArmCFrame * Offset and make it position to the right place?

As a starting point for the idea of how to do this, yes. Though you may want more or other combinations of CFrame operation strung together.

I imagine that each Renderstep frame, you want to copy the RealArmCFrame (rotation and orientation), but you want the position component of the ViewModel Cframe to be Offset from the camera … or something.

And then I’m just adding that you can continue adding or multiplying CFrame operations as needed to arrive at whatever position and orientation you need, if you need more. See the Understanding CFrames article and the graphic just above CFrame + or - Vector3.

What is not efficient about it? If you want the same animations, this is the most efficient way to do it.

Well, there are couple reasons. Mainly because of the arm doesn’t follow on where you look at.
Plus, fake arms are not long enough, even though you can resize it.

but you want it to, because you want them to use the same cframe, correct?

Not exactly the same CFrame, because fake arm’s CFrame are set to the Camera’s offset on every RenderStepped, I’m just wondering how do I replicate real arm’s movement to fake arms.