So I have a User Interface panel that when I grab, I am able to move, and then when I release it, I want to parent it to a suit that is parented to my left controller. Right now, when I release, the panel goes way out of position and rotation, basically disappearing. When I look in the hierarchy, the UI is not even parented to the suit. When I debug it, it says the parent is the Suit. I have no idea what is going wrong.
{
public GameObject Suit;
public float resize;
public bool grabOn = false;
public GameObject grabObject;
public bool grabbedUI = false;
private void Start()
{
if (GetComponent() == null || GetComponent() == null)
{
VRTK_Logger.Error(VRTK_Logger.GetCommonMessage(VRTK_Logger.CommonMessageKeys.REQUIRED_COMPONENT_MISSING_FROM_GAMEOBJECT, "VRTK_ControllerInteract_ListenerExample", "VRTK_InteractTouch and VRTK_InteractGrab", "the Controller Alias"));
return;
}
//Setup controller event listeners
GetComponent().ControllerTouchInteractableObject += new ObjectInteractEventHandler(DoInteractTouch);
GetComponent().ControllerUntouchInteractableObject += new ObjectInteractEventHandler(DoInteractUntouch);
GetComponent().ControllerGrabInteractableObject += new ObjectInteractEventHandler(DoInteractGrab);
GetComponent ().ControllerStartUngrabInteractableObject += new ObjectInteractEventHandler (DoInteractUngrab);
}
private void DebugLogger(uint index, string action, GameObject target)
{
VRTK_Logger.Info("Controller on index '" + index + "' is " + action + " an object named " + target.name);
}
private void DoInteractTouch(object sender, ObjectInteractEventArgs e)
{
if (e.target)
{
// DebugLogger(VRTK_ControllerReference.GetRealIndex(e.controllerReference), "TOUCHING", e.target);
}
}
private void DoInteractUntouch(object sender, ObjectInteractEventArgs e)
{
if (e.target)
{
//DebugLogger(VRTK_ControllerReference.GetRealIndex(e.controllerReference), "NO LONGER TOUCHING", e.target);
}
}
private void DoInteractGrab(object sender, ObjectInteractEventArgs e)
{
if (e.target)
{
DebugLogger(VRTK_ControllerReference.GetRealIndex(e.controllerReference), "GRABBING", e.target);
//identifies the grabbed object as the gameobject grabObject
grabObject = e.target;
//must be grabbing UI to size
if (grabbedUI == true) {
//must remove anyparenting in order to allow resizing
grabObject.transform.parent = null;
//sets grab on condition to true
grabOn = true;
}
}
}
public void DoInteractUngrab(object sender, ObjectInteractEventArgs e)
{
if (e.target)
{
print (grabObject.transform);
DebugLogger(VRTK_ControllerReference.GetRealIndex(e.controllerReference), "NO LONGER GRABBING", e.target);
grabOn = false;
print (grabOn);
//parents grabObject to Suit transform
grabObject.transform.SetParent(Suit.transform);
}
}
//when touchpad plus is touched
public void onButtonUpPress(){
//object must be grabbed
if (grabOn == true) {
resize = 1.1f;
//resize based on public float resize based on thumb pad placement
grabObject.transform.localScale += new Vector3 (resize * 0.0001f, resize * 0.0001f, resize * 0.0001f);
}
}
//when touchpad minus is touched
public void onButtonDownPress(){
//object must be grabbed
if (grabOn == true) {
resize = -1.1f;
//resize based on public float resize based on thumb pad placement
grabObject.transform.localScale += new Vector3 (resize * 0.0001f, resize * 0.0001f, resize * 0.0001f);
}
}
//determine if grabbing UI
void OnTriggerEnter(Collider coll){
if (coll.gameObject.tag == "UI"){
grabbedUI = true;
}
}
}
}
↧