Pickup Respawn Zone
When a pickup enters a trigger zone, it returns to its original location.
Category: Interaction Systems
UdonSharp Script
using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;
public class PickupRespawnZone : UdonSharpBehaviour
{
public VRC_Pickup pickup;
private Vector3 startPos;
private Quaternion startRot;
private void Start()
{
if (pickup == null) return;
startPos = pickup.transform.position;
startRot = pickup.transform.rotation;
}
public override void OnPlayerTriggerEnter(VRCPlayerApi player)
{
// Not used for pickup collision logic.
}
private void OnTriggerEnter(Collider other)
{
if (pickup == null) return;
if (other.gameObject != pickup.gameObject) return;
VRCPlayerApi localPlayer = Networking.LocalPlayer;
if (localPlayer != null)
{
Networking.SetOwner(localPlayer, pickup.gameObject);
}
pickup.Drop();
pickup.transform.SetPositionAndRotation(startPos, startRot);
}
}
Setup
- Add script to a trigger volume object.
- Set collider to
Is Trigger. - Assign your
VRC_Pickupcomponent.
Extra Tips and Troubleshooting
Tips and Tricks
- Keep reset zone visible or signposted to help users recover lost items.
- Size trigger generously for easier pickup recovery.
Troubleshooting
- If no reset occurs, verify trigger collider settings and reference to pickup component.
Related Content
Prefab Setup Notes
Import the prefab or script into a throwaway test scene before adding it to a live world. Confirm inspector references, ownership behavior, sync, triggers, UI hooks, and audio or object links before moving it into the production scene.
Testing Checklist
- Test once as a local player and again with a second client or late joiner if the behavior can affect more than one player.
- Confirm ownership, sync, trigger zones, UI references, and audio or object references are assigned intentionally.
- Check desktop and VR interaction distance so players can actually use the feature in context.
- Keep a backup of the scene before changing prefabs, UdonBehaviours, or serialized references.
