I'm parenting the standard assets FPS controller during play with a simple script. The controller get's parented but also instantly inherits the rotation of the parent. This doesn't happen in Editor mode. This incorrect behavior happens regardless if I move the player with a script or by parenting him with my mouse cursor.
I suspect the error comes from the way the character controller script is set up.
In the FPS controller script the player rotates via mouse movement in the Update function in the following way:
private void Update()
{
RotateView();
}
private void RotateView()
{
m_MouseLook.LookRotation (transform, m_Camera.transform);
}
m_MouseLook get's its rotation from m_Camera.transform. It in turn uses transform.localPosition.
I think it's the use of localposition that causes the strange behavior.
How do I fix it?
I added the script that I used to re-parent the fps controller below:
public Transform ParentTarget;
public GameObject player;
void OnTriggerEnter(Collider other)
{
player.transform.SetParent(ParentTarget, true);
}
void OnTriggerExit(Collider other)
{
player.transform.parent = null;
}
As I said the script is fairly simple and the same error happens when I re-parent the controller by dragging it with my mouse during play.
If I set worldPositionStays to false then the player is offset and doesn't inherit the parent rotations at all. This isn't what I want.
Here is my scene before the player steps unto the trigger. The red box is the trigger. The blue box is the new parent (the parent is rotated 45 degrees)
Here is the original incorrect behavior. The player is instantly rotated 45 degrees as he steps unto the trigger. This is wrong
Here is the behavior when worldPositionStays is set to false. Rotating the parent has no effect. This is wrong.
The desired behavior is to keep the player rotation, and then change it as the parent is rotating after the re-parenting event. This is what would happen if I re-parented any ordinary GameObject.
It is the character controller mouse look part that is most likely causing all the trouble.
I suspect I have to abandon the re-parenting solution and simply add the transforms to the camera mouse look part of the character controller script.
I would be very grateful is someone more knowledgeable would help me out with achieving this. Hopefully by getting re-parenting to work, since it is simpler, and simplicity is always king. I would settle for help with writing a script to add rotations and positions correctly to the controller.
localPosition
cauces the strange behavior". Can we see how that's being used if you thing it's the problem. \$\endgroup\$GetComponet<Transform>()
since it's a public property ofGameObject
(player.transform
). Also, when changing a parent, useSetParent()
because it has the optionalworldPositionStays
argument:player.transform.SetParent(ParentTarget, true);
\$\endgroup\$