Difference between revisions of "MoveTo - ObjectReference"

From the CreationKit Wiki
Jump to navigation Jump to search
imported>Catwheezle
(Added "see also" section.)
 
(24 intermediate revisions by 8 users not shown)
Line 35: Line 35:
; Move Bob to his house, but don't match the rotation of the marker
; Move Bob to his house, but don't match the rotation of the marker
Bob.MoveTo(BobsHouseMarker, abMatchRotation = false)
Bob.MoveTo(BobsHouseMarker, abMatchRotation = false)
</source>
<br/>
<source lang="papyrus">
; Moves a portal 120 units in front of the player, 35 units under their height
Actor PlayerRef = Game.GetPlayer()
Portal.MoveTo(PlayerRef, 120.0 * Math.Sin(PlayerRef.GetAngleZ()), 120.0 * Math.Cos(PlayerRef.GetAngleZ()), PlayerRef.GetHeight() - 35.0)
</source>
</source>


== Notes ==
== Notes ==
* MoveTo() should be avoided for placing other actors in sight of the player, as they will suddenly appear in an unrealistic way. Instead, consider placing them nearby but out of sight, and making them approach the player using [[PathToReference]].
* MoveTo() should be avoided for placing other actors in sight of the player, as they will suddenly appear in an unrealistic way. Instead, consider placing them nearby but out of sight, and making them approach the player themselves, using [[PathToReference - Actor|PathToReference]] or [[ForceGreet (Procedure)|ForceGreet]].
 
* Flora objects cannot be moved using MoveTo.
 
* Making an actor MoveTo() a furniture reference will make the actor immediately assume the position of "using" that furniture, without playing the furniture entrance animation. Example: PlayerRef.MoveTo(BedReference) will make the player lie down on the bed reference (without playing the bed entrance animation).
 
* MoveTo can cause undesirable results when moving an object to another actor, whose X and Y rotation angles are relative to that actor's looking angle, not their rotation relative to the world. Furthermore, as with [[SetPosition - ObjectReference|SetPosition]], MoveTo doesn't take uneven terrain into account.
**In order to "straighten" or flatten an object's rotation, set the abMatchRotation parameter to False, or call [[SetAngle - ObjectReference|SetAngle]] similar to the following:
<source lang="papyrus">
myObject.MoveTo(Game.GetPlayer()) ;Or, whatever the target of the MoveTo() is
myObject.SetAngle(0.0, 0.0, 0.0)
</source>
* Actors moved with this function are always rotated correctly relative to the world.
 
== Bugs ==
* If an actor is already in the cell, and the player is also in the cell, leaving the cell, or arriving in the cell, MoveTo() does not function. As cells can be quite large in cities and multi-level buildings, ensuing dialogue can occur with the actor out-of-sight and/or out-of-hearing. Try [[DisableNoWait - ObjectReference|DisableNoWait]](), MoveTo(), [[EnableNoWait - ObjectReference|EnableNoWait]](), [[EvaluatePackage - Actor|EvaluatePackage]]() sequence. Take care that the sequence happens out-of-sight of the player, such as during passage through a loading [[Door|door]].
 
* As of 1.9, calling Game.GetPlayer().MoveTo(AnyBedReference) will cause the Player's eyes to become stuck shut. They can only be opened again by using the showracemenu console command, or by reloading the game.
 
* All movement functions can cause [[SetMotionType - ObjectReference#Bugs|major issues]] when used on a reference that has had a [[SetMotionType - ObjectReference|motion type override]] applied.
 
* If you are moving a reference to an unloaded cell, its rotation will not be changed. This is an issue that is expected to affect all movement functions, and it was discovered via disassembly of Skyrim's 2011 release. (SKSE DLL authors will want to know that the problem occurs within the ''MoveRefrToPosition'' subroutine.)


== See Also ==
== See Also ==
*[[ForceGreet (Procedure)]]
*[[MoveToInteractionLocation - ObjectReference]]
*[[MoveToMyEditorLocation - ObjectReference]]
*[[ObjectReference Script]]
*[[ObjectReference Script]]
*[[MoveToMyEditorLocation - ObjectReference]]
*[[PathToReference - Actor]]
*[[MoveToInteractionLocation - ObjectReference]]
*[[SetPosition - ObjectReference]]
*[[PathToReference]]
*[[Unit]]
*[[SetPosition]]
 
{{Languages}}

Latest revision as of 08:38, 9 November 2024

Member of: ObjectReference Script

Moves this reference to the location of the target reference, with the specified offset.

Syntax[edit | edit source]

Function MoveTo(ObjectReference akTarget, float afXOffset = 0.0,
  float afYOffset = 0.0, float afZOffset = 0.0, bool abMatchRotation = true) native

Parameters[edit | edit source]

  • akTarget: The target reference to move this one to.
  • afXOffset: How much to offset the move in the X direction.
    • Default: 0.0
  • afYOffset: How much to offset the move in the Y direction.
    • Default: 0.0
  • afZOffset: How much to offset the move in the Z direction.
    • Default: 0.0
  • abMatchRotation: Whether the moved object should match the rotation of the target object or not
    • Default: True

Return Value[edit | edit source]

None.

Examples[edit | edit source]

; Move Bob to his house, designated by a marker
Bob.MoveTo(BobsHouseMarker)


; Move Bob to his house, but don't match the rotation of the marker
Bob.MoveTo(BobsHouseMarker, abMatchRotation = false)


; Moves a portal 120 units in front of the player, 35 units under their height
Actor PlayerRef = Game.GetPlayer()
Portal.MoveTo(PlayerRef, 120.0 * Math.Sin(PlayerRef.GetAngleZ()), 120.0 * Math.Cos(PlayerRef.GetAngleZ()), PlayerRef.GetHeight() - 35.0)

Notes[edit | edit source]

  • MoveTo() should be avoided for placing other actors in sight of the player, as they will suddenly appear in an unrealistic way. Instead, consider placing them nearby but out of sight, and making them approach the player themselves, using PathToReference or ForceGreet.
  • Flora objects cannot be moved using MoveTo.
  • Making an actor MoveTo() a furniture reference will make the actor immediately assume the position of "using" that furniture, without playing the furniture entrance animation. Example: PlayerRef.MoveTo(BedReference) will make the player lie down on the bed reference (without playing the bed entrance animation).
  • MoveTo can cause undesirable results when moving an object to another actor, whose X and Y rotation angles are relative to that actor's looking angle, not their rotation relative to the world. Furthermore, as with SetPosition, MoveTo doesn't take uneven terrain into account.
    • In order to "straighten" or flatten an object's rotation, set the abMatchRotation parameter to False, or call SetAngle similar to the following:
myObject.MoveTo(Game.GetPlayer()) ;Or, whatever the target of the MoveTo() is
myObject.SetAngle(0.0, 0.0, 0.0)
  • Actors moved with this function are always rotated correctly relative to the world.

Bugs[edit | edit source]

  • If an actor is already in the cell, and the player is also in the cell, leaving the cell, or arriving in the cell, MoveTo() does not function. As cells can be quite large in cities and multi-level buildings, ensuing dialogue can occur with the actor out-of-sight and/or out-of-hearing. Try DisableNoWait(), MoveTo(), EnableNoWait(), EvaluatePackage() sequence. Take care that the sequence happens out-of-sight of the player, such as during passage through a loading door.
  • As of 1.9, calling Game.GetPlayer().MoveTo(AnyBedReference) will cause the Player's eyes to become stuck shut. They can only be opened again by using the showracemenu console command, or by reloading the game.
  • If you are moving a reference to an unloaded cell, its rotation will not be changed. This is an issue that is expected to affect all movement functions, and it was discovered via disassembly of Skyrim's 2011 release. (SKSE DLL authors will want to know that the problem occurs within the MoveRefrToPosition subroutine.)

See Also[edit | edit source]


Language: English  • українська