void OnGrab(uint sender, IValue[] args) { // Calculate coordinate of this object relative to sender Vec relPos; Quat relRot; if (!obj.CalcRelativeCoord(node.Objects[sender], out relPos, out relRot)) { // When calculation failed relPos = new Vec(); relRot = new Quat(); } // Become a child of sender obj.SetField("parent", node.Objects[sender].GetObjectRef()); // Set relative coordinate // Keep relative position/rotation at the time of grabbing obj.SetField("position", relPos); obj.SetField("rotation", relRot); obj.WriteDebugLog("grabbable", $"Grabbed by object {sender}"); }