public void ChangeHand(GameObject newTransform) { Vector3 handPosOffsetToUse; // vector -0.00205, 0, 0.0331 is the coordinate of the front of the controller realHand.transform.SetParent(newTransform.transform); m_controller = experimentController.GetController(); handPosOffsetToUse = HandForNextTrial == "r" ? handPosOffset : Vector3.Scale(handPosOffset, new Vector3(-1, 1, 1)); realHand.transform.localPosition = handPosOffsetToUse; }
public void SpawnTarget(Trial trial) { float targetAngle = trial.settings.GetFloat("targetAngle"); float vertPos = trial.settings.GetFloat("target_vertPos"); SetTargetAngle(targetAngle, vertPos); //set the target angle for this trial targetDistance = trial.settings.GetFloat("target_distance"); //set target distance for this trial targetDistance = targetDistance / 100.0f; //the distance to instantiate the target is in the z position if (IsGrabTrial) { // Reset the angle to 90 degrees (forward) SetTargetAngle(90f, vertPos); // Offset the entire target container transform.localPosition = new Vector3(0.0f, 0.0f, grabObjSpawnDist); //targetDistance = 0.3f; var grabObject = Instantiate( receptaclePrefab.name == boxPrefab.name ? PhysicsCubePrefab : PhysicsSpherePrefab, transform); Vector3 receptacleLocation = new Vector3(0f, 0f, targetDistance - grabObjSpawnDist); grabObject.transform.localPosition = new Vector3(0f, 0.1f, 0.0f); grabObject.GetComponent <GrabableObject>().m_controller = experimentController.GetController(); grabObject.transform.SetParent(null); // 50/50 chance for either 25 degrees left or right of the target angle System.Random rand = new System.Random(); float deviation = (rand.Next(2) == 0 ? -45f : 45f) / 2.0f; experimentController.distractorLoc = -deviation; // Set up receptacle SetTargetAngle(targetAngle + deviation, vertPos); var receptacle = Instantiate(receptaclePrefab, transform); receptacle.transform.localPosition = receptacleLocation; receptacle.transform.SetParent(null); // Set up incorrect receptacle SetTargetAngle(targetAngle - deviation, vertPos); var wrongReceptacle = Instantiate( receptaclePrefab.name == boxPrefab.name ? cylinderPrefab : boxPrefab, transform); wrongReceptacle.transform.localPosition = receptacleLocation; wrongReceptacle.transform.SetParent(null); // Reset the position of the target container back to its original position SetTargetAngle(targetAngle, vertPos); transform.localPosition = Vector3.zero; grabObject.transform.SetParent(transform); wrongReceptacle.transform.SetParent(transform); receptacle.transform.SetParent(transform); //log some things experimentController.objSpawnX = grabObject.transform.position.x; experimentController.objSpawnZ = grabObject.transform.position.z; // log receptacle too experimentController.recepticleX = receptacle.transform.position.x; experimentController.recepticleY = receptacle.transform.position.y; experimentController.recepticleZ = receptacle.transform.position.z; } else { // Set target angle to forwards SetTargetAngle(90f, vertPos); transform.localPosition = new Vector3(0, 0, secondHomeDist); //sets target container to parent 0 // Spawn the second home var secondHome = Instantiate(secondaryHomePrefab, transform); secondHome.transform.SetParent(null); // Set up the real target SetTargetAngle(targetAngle, vertPos); // Set up the real target var target = Instantiate( trial.settings.GetString("type") == "localization" ? arcPrefab : targetPrefab, transform ); if (trial.settings.GetString("type") == "localization") { target.GetComponent <ArcController>().GenerateArc(trial); target.GetComponent <ArcController>().SecondaryHomePos = secondHome.transform.position; } else { target.transform.localPosition = new Vector3(0, 0, targetDistance); target.GetComponent <TargetController>().SecondaryHomePos = secondHome.transform.position; } target.transform.SetParent(null); // Assign reference of the real target to the second home secondHome.GetComponent <TargetController>().IsSecondaryHome = true; secondHome.GetComponent <TargetController>().RealTarget = target; // Reset all positions and re-parent everything transform.localPosition = Vector3.zero; secondHome.transform.SetParent(transform); target.transform.SetParent(transform); particleSystem.transform.localPosition = target.transform.localPosition; target.SetActive(false); } }