void Update() { if (IsGrabbed()) { _reconfiguredPhysicsDrop = false; if (!_reconfiguredPhysicsGrab) { _reconfiguredPhysicsGrab = true; Rigidbody body = Grabbable.GetComponent <Rigidbody>(); body.isKinematic = true; body.useGravity = false; } } else { _reconfiguredPhysicsGrab = false; if (!_reconfiguredPhysicsDrop) { _reconfiguredPhysicsDrop = true; Rigidbody body = Grabbable.GetComponent <Rigidbody>(); if (StaysOnDrop) { body.isKinematic = true; body.useGravity = false; if (_dynamicAnchor != null) { _offset = _dynamicAnchor.transform.position - transform.position; } else { Grabbable.transform.position = _anchorPosition = transform.position; } Grabbable.transform.rotation = _anchorRotation = transform.rotation; } else { Grabbable.transform.position = transform.position; Grabbable.transform.rotation = transform.rotation; body.isKinematic = false; body.useGravity = true; } } if (StaysOnDrop) { if (_dynamicAnchor != null) { Grabbable.transform.position = _dynamicAnchor.position - _offset; } else { Grabbable.transform.position = _anchorPosition; } Grabbable.transform.rotation = _anchorRotation; } } }
protected void GrabbableRelease(Vector3 linearVelocity, Vector3 angularVelocity) { m_grabbedObj.GrabEnd(linearVelocity, angularVelocity); if (m_parentHeldObject) { m_grabbedObj.transform.parent = null; } if (m_grabbedObj.tag == Constants.TAG_BOW) { var boxCollider = m_grabbedObj.GetComponent <BoxCollider>(); boxCollider.isTrigger = false; var bowController = m_grabbedObj.GetComponent <BowController>(); bowController.ComeBackPositionOrigin(); } m_grabbedObj = null; }
void Start() { durability = 1000; // 내구도 설정 rigid = thisObject.GetComponent <Rigidbody>(); //position = new Vector3((float)-0.12, (float)0.233, 0); position = thisObject.transform.localPosition; audio = parent.GetComponent <AudioSource>(); }
public void OnGrabEnd() { if (grabbedObjectInTrigger != null) { if (_game.player.inventory.Count < 10) { _game.player.addToInventory(grabbedObjectInTrigger.GetComponent <ItemBody>().item); DebugUtils.message2 = "Is K : " + grabbedObjectInTrigger.GetComponent <Rigidbody>().isKinematic.ToString(); StartCoroutine(PlayerUtils.MessageCoroutine("Vous avez lâché l'objet dans le sac !", 3, _game)); GameObject toDestroy = grabbedObjectInTrigger.gameObject; StartCoroutine(DestroyObject(grabbedObjectInTrigger)); //Destroy(grabbedObjectInTrigger.gameObject); //Destroy(toDestroy); } else { StartCoroutine(PlayerUtils.MessageCoroutine("Vous n'avez plus de place !", 3, _game)); } } grabbedObjectInTrigger = null; }
override protected void OffhandGrabbed(OVRGrabbable grabbable) { //両手持ち可能なGrabbableだった場合、 //1,もう片方の手の情報を渡す //2,拡大縮小モードをONにする if (m_grabbedObj == grabbable) { if (grabbable.GetComponent <OffhandGrabbable>()) { var cast = grabbable.GetComponent <OffhandGrabbable>(); cast.InitializeDistance(conRight, conLeft); cast.ScaleEnable(true); cast.reservedHand = (EscapegameGrabber)grabbable.grabbedBy; GrabbableRelease(Vector3.zero, Vector3.zero); } else { GrabbableRelease(Vector3.zero, Vector3.zero); } } }
private IEnumerator grabbs() { OVRGrabbable ovr_grabble = null; switch (hand) { case Hand.Left: ovr_grabble = grabberLeft.grabbedObject; break; case Hand.Right: ovr_grabble = grabberRight.grabbedObject; break; } //para la mano if (!grabItem) { if (ovr_grabble) { var ANBUSVR_item = ovr_grabble.GetComponent <ANBUSVR_Item>(); if (ANBUSVR_item) { grabItem = ovr_grabble; grab.item_id = ANBUSVR_item.item.id; grab.sequence = sequence++; grab.timeStart = timeStart; grab.timeEnd = timeStart; var ANBUSVR_participant = GameObject.Find("ANBUSVR").GetComponent <ANBUSVR_Participant>(); grab.participant_id = ANBUSVR_participant.participant.id; } } } else { if (grabItem != ovr_grabble) { Debug.Log("Se termina el agarre del objeto"); grab.timeEnd = timeStart; //guardamos el grab var ANBUSVR = GameObject.Find("ANBUSVR"); var ANBUSVR_api = ANBUSVR.GetComponent <ANBUSVR_API>(); StartCoroutine(ANBUSVR_api.PostGrab(this)); grabItem = null; } } yield return(null); }
// Update is called once per frame void Update() { if (grabbedObj.grabbedObject != null) { heldObj = grabbedObj.grabbedObject; inventory = heldObj.GetComponent <Rigidbody>(); heldObj.transform.parent = null; inventory.constraints = RigidbodyConstraints.None; } else { heldObj = null; } }
protected void GrabbableRelease(Vector3 linearVelocity, Vector3 angularVelocity) { // fudge physics const float SENSITIVITY = 2.5f; m_grabbedObj.GrabEnd(linearVelocity * SENSITIVITY, angularVelocity * SENSITIVITY); m_grabbedObj.GetComponent <BasketballBehavior> ().setWasThrown(true); GameObject.Find("Floor").GetComponent <MainBehavior> ().respawnBasketball(m_grabbedObj.gameObject); if (m_parentHeldObject) { m_grabbedObj.transform.parent = null; } m_grabbedObj = null; }
protected void GrabbableRelease(Vector3 linearVelocity, Vector3 angularVelocity) { m_grabbedObj.GrabEnd(linearVelocity, angularVelocity); if (m_parentHeldObject) { m_grabbedObj.transform.parent = null; } SetPlayerIgnoreCollision(m_grabbedObj.gameObject, false); Rigidbody rigidbody = m_grabbedObj.GetComponent <Rigidbody>(); rigidbody.useGravity = true; rigidbody.isKinematic = false; m_grabbedObj = null; }
void Start() { audio = door.GetComponent <AudioSource>(); rigid = thisHandle.GetComponent <Rigidbody>(); handles[0] = thisHandle; handles[1] = otherHandle; for (int i = 0; i < 2; i++) { handles_position[i] = handles[i].transform.localPosition; handles_scale[i] = handles[i].transform.localScale; } door_position = door.transform.localPosition; }
public void BuildSphere() { GameObject Molecule = new GameObject(); Molecule.name = "Molecule"; for (int i = 0; i < 5; i++) { GameObject atom = new GameObject(); atom.name = "Atom"; atom = GameObject.CreatePrimitive(PrimitiveType.Sphere); atom.transform.localScale = new Vector3(1f, 1f, 1f); atom.transform.position += new Vector3(i - 1.5f, i - 1.5f, i - 1.5f); atom.transform.SetParent(Molecule.transform); } GameObject.Find("Molecule").transform.position = GameObject.Find("OVRPlayerController").transform.position - new Vector3(0f, 0f, -5f); Mesh mesh = new Mesh(); mesh.RecalculateNormals(); mesh.RecalculateBounds(); Molecule.AddComponent <MeshFilter>(); Molecule.AddComponent <MeshCollider>(); MeshCollider molCollider = Molecule.GetComponent <MeshCollider>(); molCollider.convex = true; molCollider.inflateMesh = true; //Molecule.GetComponent<MeshCollider>().sharedMesh = mesh; Molecule.transform.GetComponent <MeshCollider>().sharedMesh = mesh; Molecule.AddComponent <OVRGrabbable>(); OVRGrabbable g = Molecule.GetComponent <OVRGrabbable>(); Collider col = Molecule.GetComponent <MeshCollider>(); g.GetComponent <OVRGrabbable>().setGrabPoint(col); Molecule.AddComponent <Rigidbody>(); Rigidbody r = Molecule.GetComponent <Rigidbody>(); r.isKinematic = true; r.useGravity = false; Molecule.GetComponent <MeshFilter>().sharedMesh = mesh; }
new public void EndManipulation() { if (vertex0 != null && vertex1 != null && vertex0 == vertex1) { endpoint0.transform.position = vertex0.transform.position; endpoint1.transform.position = vertex1.transform.position; isPlaced = false; return; } endpointGrabbable.enabled = false; endpoint1.GetComponent <Collider>().enabled = false; endpoint1.GetComponent <EndpointController>().enabled = false; base.EndManipulation(); SetCylinderPosition(); cylinderGrabbable.GetComponent <OVRGrabbable>().enabled = true; snapPosition = cylinder.transform.position; snapRotation = cylinder.transform.rotation; }
protected void GrabEnd() { if (m_grabbedObj != null) { OVRPose localPose = new OVRPose { position = OVRInput.GetLocalControllerPosition(m_controller), orientation = OVRInput.GetLocalControllerRotation(m_controller) }; OVRPose offsetPose = new OVRPose { position = m_anchorOffsetPosition, orientation = m_anchorOffsetRotation }; localPose = localPose * offsetPose; OVRPose trackingSpace = transform.ToOVRPose() * localPose.Inverse(); Vector3 linearVelocity = trackingSpace.orientation * OVRInput.GetLocalControllerVelocity(m_controller); Vector3 angularVelocity = trackingSpace.orientation * OVRInput.GetLocalControllerAngularVelocity(m_controller); if (m_grabbedObj.isFixed) { OVRCameraRig rig = transform.parent.parent.GetComponent <OVRCameraRig>(); rig.UpdatedAnchors -= updateWheel; OvrAvatar.lockedHand = null; OvrAvatar.lockedController = null; m_hand.parent = localAvatar; m_controllerPoint.parent = localAvatar; rig.UpdatedAnchors += updateAnchor; //enable recovering m_grabbedObj.GetComponent <wheelAuto>().setRecovering = true; GrabbableRelease(Vector3.zero, Vector3.zero); } else { GrabbableRelease(linearVelocity, angularVelocity); } } // Re-enable grab volumes to allow overlap events GrabVolumeEnable(true); }
/// <summary> /// Player grab an object /// </summary> /// <param name="grabbableObject">Object grabbed</param> public void OnGrabBegin(object grabbableObject) { DebugUtils.message2 = "GRAB BEGIN"; OVRGrabbable grabbable = grabbableObject as OVRGrabbable; //If player get an inventory object if (grabbable != null && !grabbable.GetComponent <Rigidbody>().useGravity) { //Become a classic object Destroy(grabbable.transform.Find("3DText").gameObject); grabbable.gameObject.GetComponent <Rigidbody>().isKinematic = false; grabbable.gameObject.GetComponent <Rigidbody>().useGravity = true; grabbable.gameObject.GetComponent <ItemBody>().ActivateColliders(); grabbable.transform.parent = null; //Item is in hand and now no longer in the inventory player.removeFromInventory(grabbable.gameObject.GetComponent <ItemBody>().item); //Refresh inventory this.GetComponentInChildren <Watch>().DestroyCircleMenu(); this.GetComponentInChildren <Watch>().InitializeCircleMenu(); } }
public void StopIgnore(OVRGrabbable m_grabbedObj) // Heikki added for test, Stop ignoring collision with player { Physics.IgnoreCollision(m_grabbedObj.GetComponent <Collider>(), Controller, false); }
public void IgnoreGrapperObj(OVRGrabbable m_grabbedObj) // Heikki added for test, When object grabbed ignore collision with player { Physics.IgnoreCollision(m_grabbedObj.GetComponent <Collider>(), Controller); }
/*デスクトップデバッグ用記述 * [SerializeField] * private readonly float MOVING_PLACE_TIME = (float)0.5;//棒を上に上げる時間 * * * private float movingPlaceTimer;//棒を移動させる場所の変数 * [SerializeField] * private float moveX = (float)0.01; * [SerializeField] * private float moveY = (float)0.01; * [SerializeField] * private float moveZ = (float)0.01; * * // Start is called before the first frame update * * void Start() { * movingPlaceTimer = 99;//初期値 * }//Start * * // Update is called once per frame * void Update() { * //VR操作用に変更してください * if (Input.GetKeyDown(KeyCode.Space)&& movingPlaceTimer>MOVING_PLACE_TIME*2) { * movingPlaceTimer = 0; * this.GetComponent<BoxCollider>().isTrigger = false; * }//if * * if(movingPlaceTimer < MOVING_PLACE_TIME) {//棒を上に上げる処理 * this.transform.localPosition = new Vector3( * this.transform.localPosition.x - moveX, * this.transform.localPosition.y + moveY, * this.transform.localPosition.z + moveZ); * }else if(movingPlaceTimer < MOVING_PLACE_TIME * 2) {//棒を下に下げる処理 * this.transform.localPosition = new Vector3( * this.transform.localPosition.x + moveX, * this.transform.localPosition.y - moveY, * this.transform.localPosition.z - moveZ); * } else { * this.GetComponent<BoxCollider>().isTrigger = true; * }//if * movingPlaceTimer += Time.deltaTime; * }//Update */ //デスクトップデバッグ用記述 void Start() { grabbable = this.GetComponent <OVRGrabbable>(); grabbable.enabled = false; grabbable.GetComponent <Collider>().enabled = false; }
public static GameObject readEfvet(string name, float scale, string type) { Debug.Log(string.Format("Debug: Type = ") + type); Material newMat = Resources.Load("AAA", typeof(Material)) as Material; molMat = newMat; GameObject atomModel_14 = GameObject.Find("AtomModel_14"); GameObject atomModel_15 = GameObject.Find("AtomModel_15"); GameObject atomModel_185 = GameObject.Find("AtomModel_185"); GameObject atomModel_2 = GameObject.Find("AtomModel_2"); if (type == "spacefill") { Molecule = new GameObject("Spacefill: " + input); Molecule.AddComponent <MeshFilter>(); Regex sepReg = new Regex(@"\s+"); // Regex numReg = new Regex(@"[^0-9]"); string[] lines = _getEfvet(name); if (!lines.Any()) { Destroy(Molecule); Molecule = null; return(Molecule); } string line = lines[0].TrimStart(' '); string[] stArrayData = sepReg.Split(line); int verticesCount = int.Parse(stArrayData[0]); int edgesCount = int.Parse(stArrayData[1]); int triangleArrayCount = int.Parse(stArrayData[2]); if (verticesCount > 50000) { Debug.Log(string.Format("This molecule is too large(more than 50,000 vertices), we are going to destroy it!")); Destroy(Molecule); Molecule = null; return(Molecule); } var vertices = new List <Vector3>(); var insiders = new List <int>(); var insCollection = new List <GameObject>(); for (int i = 0; i < verticesCount; i++) { line = lines[i + 1].TrimStart(' '); stArrayData = sepReg.Split(line); float x = float.Parse(stArrayData[18]); float y = float.Parse(stArrayData[19]); float z = float.Parse(stArrayData[20]); string atomName = stArrayData[14]; string residueName = stArrayData[15]; vertices.Add(new Vector3(-1 * x, y, z)); float atomSize = CheckSizeOfElenemts(atomName, residueName); GameObject instantiateObj = null; Renderer rend = null; Color atomColor = GetColor(atomName); if (atomName != "OXT") { if (atomSize == 1.4f) { instantiateObj = Instantiate(atomModel_14, new Vector3(-1 * x, y, z), Quaternion.identity); rend = instantiateObj.GetComponent <Renderer>(); rend.material.color = atomColor; } else if (atomSize == 1.5f) { instantiateObj = Instantiate(atomModel_15, new Vector3(-1 * x, y, z), Quaternion.identity); rend = instantiateObj.GetComponent <Renderer>(); rend.material.color = atomColor; } else if (atomSize == 1.85f) { instantiateObj = Instantiate(atomModel_185, new Vector3(-1 * x, y, z), Quaternion.identity); rend = instantiateObj.GetComponent <Renderer>(); rend.material.color = atomColor; } else if (atomSize == 2f) { instantiateObj = Instantiate(atomModel_2, new Vector3(-1 * x, y, z), Quaternion.identity); rend = instantiateObj.GetComponent <Renderer>(); rend.material.color = atomColor; } //modify here - grabbable atom. instantiateObj.transform.SetParent(Molecule.transform); instantiateObj.isStatic = true; insCollection.Add(instantiateObj); } } Molecule.transform.localScale = new Vector3(.015f, .015f, .015f); StaticBatchingUtility.Combine(insCollection.ToArray(), Molecule); var triangles = new List <int>(); for (int i = 0; i < triangleArrayCount; i++) { line = lines[verticesCount + edgesCount + i + 1].TrimStart(' '); stArrayData = sepReg.Split(line); int a = int.Parse(stArrayData[3]); int b = int.Parse(stArrayData[4]); int c = int.Parse(stArrayData[5]); if (!insiders.Contains(a - 1) && !insiders.Contains(b - 1) && !insiders.Contains(c - 1)) { triangles.Add(c - 1); triangles.Add(b - 1); triangles.Add(a - 1); } } Mesh mesh = new Mesh(); mesh.vertices = vertices.ToArray(); mesh.triangles = triangles.ToArray(); mesh.RecalculateNormals(); mesh.RecalculateBounds(); Molecule.GetComponent <MeshFilter>().sharedMesh = mesh; Molecule.AddComponent <MeshCollider>(); MeshCollider molCollider = Molecule.GetComponent <MeshCollider>(); molCollider.inflateMesh = true; Molecule.GetComponent <MeshCollider>().sharedMesh = mesh; Molecule.AddComponent <OVRGrabbable>(); OVRGrabbable g = Molecule.GetComponent <OVRGrabbable>(); Collider col = Molecule.GetComponent <MeshCollider>(); g.GetComponent <OVRGrabbable>().setGrabPoint(col); Molecule.AddComponent <Rigidbody>(); Rigidbody r = Molecule.GetComponent <Rigidbody>(); r.isKinematic = true; r.useGravity = false; return(Molecule); } //*********************************************************************************** else if (type == "surface") { GameObject surface = new GameObject("Surface: " + input); GameObject mol = new GameObject(name); mol.transform.localScale = new Vector3(scale, scale, scale); mol.transform.SetParent(surface.transform); mol.AddComponent <MeshFilter>(); mol.AddComponent <SkinnedMeshRenderer>(); mol.AddComponent <Cloth>(); Regex sepReg = new Regex(@"\s+"); string[] lines = _getEfvet(name); if (!lines.Any()) { Destroy(mol); mol = null; return(mol); } string line = lines[0].TrimStart(' '); string[] stArrayData = sepReg.Split(line); int verticesCount = int.Parse(stArrayData[0]); int edgesCount = int.Parse(stArrayData[1]); int triangleArrayCount = int.Parse(stArrayData[2]); if (verticesCount > 65000) { Debug.Log(string.Format("This molecule is too large(more than 65,000 vertices), we are going to destroy it!")); Destroy(mol); mol = null; return(mol); } var vertices = new List <Vector3>(); var colors = new List <Color>(); var temperatures = new List <float>(); var insiders = new List <int>(); for (int i = 0; i < verticesCount; i++) { line = lines[i + 1].TrimStart(' '); stArrayData = sepReg.Split(line); float x = float.Parse(stArrayData[0]); float y = float.Parse(stArrayData[1]); float z = float.Parse(stArrayData[2]); float temperatureFactor = float.Parse(stArrayData[8]); int isInside = int.Parse(stArrayData[11]); int colorIndex = int.Parse(stArrayData[13]); string atomName = stArrayData[14]; string residueName = stArrayData[15]; vertices.Add(new Vector3(-1 * x, y, z)); temperatures.Add(temperatureFactor); colors.Add(GetColor(atomName)); if (isInside != 1) { insiders.Add(i); } } var triangles = new List <int>(); for (int i = 0; i < triangleArrayCount; i++) { line = lines[verticesCount + edgesCount + i + 1].TrimStart(' '); stArrayData = sepReg.Split(line); int a = int.Parse(stArrayData[3]); int b = int.Parse(stArrayData[4]); int c = int.Parse(stArrayData[5]); if (!insiders.Contains(a - 1) && !insiders.Contains(b - 1) && !insiders.Contains(c - 1)) { triangles.Add(c - 1); triangles.Add(b - 1); triangles.Add(a - 1); } } Mesh mesh = new Mesh(); mesh.vertices = vertices.ToArray(); mesh.triangles = triangles.ToArray(); mesh.colors = colors.ToArray(); Debug.Log(string.Format("DEBUG: MESH " + mesh.isReadable)); mesh.RecalculateNormals(); mesh.RecalculateBounds(); mol.GetComponent <MeshFilter>().sharedMesh = mesh; mol.GetComponent <SkinnedMeshRenderer>().sharedMesh = mesh; mol.GetComponent <SkinnedMeshRenderer>().sharedMaterial = molMat; mol.AddComponent <MeshCollider>(); MeshCollider molCollider = mol.GetComponent <MeshCollider>(); molCollider.inflateMesh = true; mol.GetComponent <MeshCollider>().sharedMesh = mesh; mol.AddComponent <OVRGrabbable>(); OVRGrabbable g = mol.GetComponent <OVRGrabbable>(); Collider col = mol.GetComponent <MeshCollider>(); g.GetComponent <OVRGrabbable>().setGrabPoint(col); mol.AddComponent <Rigidbody>(); Rigidbody r = mol.GetComponent <Rigidbody>(); r.isKinematic = true; r.useGravity = false; mol.GetComponent <Cloth>().useGravity = false; float maxTemparature = temperatures.Max(); ClothSkinningCoefficient[] constrants; constrants = mol.GetComponent <Cloth>().coefficients; for (int i = 0; i < constrants.Length; i++) { constrants[i].maxDistance = softness * temperatures[i] / maxTemparature; } mol.GetComponent <Cloth>().coefficients = constrants; //Debug.Log(string.Format("DEBUG: Position (z , y , z) = (") + mol.transform.position.x + ", " + mol.transform.position.y + ", " + mol.transform.position.z + ")"); ///************************************************************** ///To Generate the HETATM (Small Molecule) in surface molecule. Regex sepReg1 = new Regex(@"\s+"); string[] h = _getMoleculeData(); print("Array Length " + h.Length); GameObject HETATM = new GameObject("HETATM"); HETATM.transform.tag = "Surface"; for (int i = 0; i < h.Length; i++) { string line1 = h[i].TrimStart(' '); string[] stArrayData1 = sepReg1.Split(line1); if (stArrayData1[0] == "HETATM") { float Hx = float.Parse(stArrayData1[6]); float Hy = float.Parse(stArrayData1[7]); float Hz = float.Parse(stArrayData1[8]); char[] chain = stArrayData1[4].ToCharArray(); //Debug.Log(string.Format("Chain: " + chain[0])); // Debugging - To see the chain of protein molecule. if (chain[0] == GetChain()) { //print("This is: " + stArrayData1[0] + " of " + GetChain() + " chain."); string atom = stArrayData1[2]; string residue = stArrayData1[3]; float atomSize = CheckSizeOfElenemts(atom, residue); GameObject instantiateObj = null; Renderer rend = null; Color atomColor = GetColor(atom); //Debug.Log(string.Format("DEBUG: HETATM Atom size: ") + atomSize); if (atom != "OXT") { if (atomSize == 1.4f) { instantiateObj = Instantiate(atomModel_14, new Vector3(-1 * Hx, Hy, Hz), Quaternion.identity); rend = instantiateObj.GetComponent <Renderer>(); rend.material.color = atomColor; } else if (atomSize == 1.5f) { instantiateObj = Instantiate(atomModel_15, new Vector3(-1 * Hx, Hy, Hz), Quaternion.identity); rend = instantiateObj.GetComponent <Renderer>(); rend.material.color = atomColor; } else if (atomSize == 1.85f) { instantiateObj = Instantiate(atomModel_185, new Vector3(-1 * Hx, Hy, Hz), Quaternion.identity); rend = instantiateObj.GetComponent <Renderer>(); rend.material.color = atomColor; } else if (atomSize == 2f) { instantiateObj = Instantiate(atomModel_2, new Vector3(-1 * Hx, Hy, Hz), Quaternion.identity); rend = instantiateObj.GetComponent <Renderer>(); rend.material.color = atomColor; } instantiateObj.transform.SetParent(HETATM.transform); } } } } HETATM.GetComponent <Transform>().transform.position = GameObject.Find("OVRPlayerController").transform.position - new Vector3(0f, 1f, -3f); HETATM.transform.localScale = new Vector3(.015f, .015f, .015f); HETATM.transform.SetParent(surface.transform); HETATM.AddComponent <MeshFilter>(); HETATM.GetComponent <MeshFilter>().sharedMesh = mesh; HETATM.AddComponent <MeshCollider>(); MeshCollider HETATMCollider = HETATM.GetComponent <MeshCollider>(); HETATMCollider.inflateMesh = true; HETATM.GetComponent <MeshCollider>().sharedMesh = mesh; HETATM.AddComponent <OVRGrabbable>(); OVRGrabbable hetatm = HETATM.GetComponent <OVRGrabbable>(); Collider collider = HETATM.GetComponent <MeshCollider>(); hetatm.GetComponent <OVRGrabbable>().setGrabPoint(collider); HETATM.AddComponent <Rigidbody>(); Rigidbody rigid = HETATM.GetComponent <Rigidbody>(); rigid.isKinematic = true; rigid.useGravity = false; ///End of generating HETATM (Small Molecule) in surface molecule. ///************************************************************** string[] data = GetAllChain(); print("DEBUG == There are: " + data.Length + " chain of this molecule."); for (int i = 0; i < data.Length; i++) { print("DEBUG == Consist of: " + data[i]); } return(mol); } return(null); }
GameObject readEfvet(string name, float scale) { GameObject mol = new GameObject(name); mol.transform.localScale = new Vector3(scale, scale, scale); mol.AddComponent <MeshFilter>(); mol.AddComponent <SkinnedMeshRenderer>(); mol.AddComponent <Cloth>(); Regex sepReg = new Regex(@"\s+"); // Regex numReg = new Regex(@"[^0-9]"); string[] lines = _getEfvet(name); if (!lines.Any()) { Destroy(mol); mol = null; return(mol); } string line = lines[0].TrimStart(' '); string[] stArrayData = sepReg.Split(line); int verticesCount = int.Parse(stArrayData[0]); int edgesCount = int.Parse(stArrayData[1]); int triangleArrayCount = int.Parse(stArrayData[2]); if (verticesCount > 65000) { Debug.Log(string.Format("This molecule is too large(more than 65,000 vertices), we are going to destroy it!")); //error.text = "Very large molecule(" + verticesCount.ToString() + " vertices)"; Destroy(mol); mol = null; return(mol); } //Implement the spacefill model. //using the coordinate that provided by protein data bank. //Making the interface that user can use to change the model of molecule. var vertices = new List <Vector3>(); var colors = new List <Color>(); var temperatures = new List <float>(); var insiders = new List <int>(); for (int i = 0; i < verticesCount; i++) { line = lines[i + 1].TrimStart(' '); stArrayData = sepReg.Split(line); float x = float.Parse(stArrayData[0]); float y = float.Parse(stArrayData[1]); float z = float.Parse(stArrayData[2]); float temperatureFactor = float.Parse(stArrayData[8]); int isInside = int.Parse(stArrayData[11]); int colorIndex = int.Parse(stArrayData[13]); string atomName = stArrayData[14]; string residueName = stArrayData[15]; vertices.Add(new Vector3(-1 * x, y, z)); temperatures.Add(temperatureFactor); if (!flaggedAtoms.Contains(atomName) && flaggedAminos.Contains(residueName)) { colors.Add(vertexColor[colorIndex + 10]); } else { colors.Add(vertexColor[colorIndex]); //Debug.Log(string.Format("Color Index: " + colors.Count()); } if (isInside != 1) { insiders.Add(i); } } //Debug.Log(string.Format("Vertice Index: " + vertices.Count()); var triangles = new List <int>(); for (int i = 0; i < triangleArrayCount; i++) { line = lines[verticesCount + edgesCount + i + 1].TrimStart(' '); stArrayData = sepReg.Split(line); int a = int.Parse(stArrayData[3]); int b = int.Parse(stArrayData[4]); int c = int.Parse(stArrayData[5]); if (!insiders.Contains(a - 1) && !insiders.Contains(b - 1) && !insiders.Contains(c - 1)) { triangles.Add(c - 1); triangles.Add(b - 1); triangles.Add(a - 1); } } //Debug.Log(string.Format("triangles Index: " + triangles.Count()); Mesh mesh = new Mesh(); mesh.vertices = vertices.ToArray(); mesh.triangles = triangles.ToArray(); mesh.colors = colors.ToArray(); Debug.Log(string.Format("DEBUG: MESH " + mesh.isReadable)); mesh.RecalculateNormals(); mesh.RecalculateBounds(); mol.GetComponent <MeshFilter>().sharedMesh = mesh; mol.GetComponent <SkinnedMeshRenderer>().sharedMesh = mesh; mol.GetComponent <SkinnedMeshRenderer>().sharedMaterial = molMat; mol.AddComponent <MeshCollider>(); MeshCollider molCollider = mol.GetComponent <MeshCollider>(); molCollider.convex = true; molCollider.inflateMesh = true; mol.GetComponent <MeshCollider>().sharedMesh = mesh; mol.AddComponent <OVRGrabbable>(); OVRGrabbable g = mol.GetComponent <OVRGrabbable>(); Collider col = mol.GetComponent <MeshCollider>(); g.GetComponent <OVRGrabbable>().setGrabPoint(col); mol.AddComponent <Rigidbody>(); Rigidbody r = mol.GetComponent <Rigidbody>(); r.isKinematic = true; r.useGravity = false; mol.GetComponent <Cloth>().useGravity = false; float maxTemparature = temperatures.Max(); ClothSkinningCoefficient[] constrants; constrants = mol.GetComponent <Cloth>().coefficients; for (int i = 0; i < constrants.Length; i++) { constrants[i].maxDistance = softness * temperatures[i] / maxTemparature; } mol.GetComponent <Cloth>().coefficients = constrants; return(mol); }
public static GameObject readEfvet(string name, float scale, string type) { Debug.Log(string.Format("Debug: Type = ") + type); Material newMat = Resources.Load("AAA", typeof(Material)) as Material; molMat = newMat; atomModel = GameObject.Find("AtomModel"); if (type == "spacefill") { Molecule = new GameObject(); Molecule.name = "Spacefill Molecule"; Molecule.AddComponent <MeshFilter>(); Regex sepReg = new Regex(@"\s+"); // Regex numReg = new Regex(@"[^0-9]"); string[] lines = _getEfvet(name); if (!lines.Any()) { Destroy(Molecule); Molecule = null; return(Molecule); } string line = lines[0].TrimStart(' '); string[] stArrayData = sepReg.Split(line); int verticesCount = int.Parse(stArrayData[0]); int edgesCount = int.Parse(stArrayData[1]); int triangleArrayCount = int.Parse(stArrayData[2]); if (verticesCount > 65000) { Debug.Log(string.Format("This molecule is too large(more than 65,000 vertices), we are going to destroy it!")); Destroy(Molecule); Molecule = null; return(Molecule); } var vertices = new List <Vector3>(); var insiders = new List <int>(); for (int i = 0; i < verticesCount; i++) { line = lines[i + 1].TrimStart(' '); stArrayData = sepReg.Split(line); float x = float.Parse(stArrayData[18]); float y = float.Parse(stArrayData[19]); float z = float.Parse(stArrayData[20]); vertices.Add(new Vector3(-1 * x, y, z)); //Generate each sphere for the protein molecule. GameObject ins = Instantiate(atomModel, new Vector3(-1 * x, y, z), Quaternion.identity); ins.transform.SetParent(Molecule.transform); } var triangles = new List <int>(); for (int i = 0; i < triangleArrayCount; i++) { line = lines[verticesCount + edgesCount + i + 1].TrimStart(' '); stArrayData = sepReg.Split(line); int a = int.Parse(stArrayData[3]); int b = int.Parse(stArrayData[4]); int c = int.Parse(stArrayData[5]); if (!insiders.Contains(a - 1) && !insiders.Contains(b - 1) && !insiders.Contains(c - 1)) { triangles.Add(c - 1); triangles.Add(b - 1); triangles.Add(a - 1); } } Molecule.transform.localScale = new Vector3(.01f, .01f, .01f); Mesh mesh = new Mesh(); mesh.vertices = vertices.ToArray(); mesh.triangles = triangles.ToArray(); //Debug.Log(string.Format("Triangle: " + mesh.triangles.Count())); mesh.RecalculateNormals(); mesh.RecalculateBounds(); Molecule.GetComponent <MeshFilter>().sharedMesh = mesh; Molecule.AddComponent <MeshCollider>(); MeshCollider molCollider = Molecule.GetComponent <MeshCollider>(); molCollider.convex = true; molCollider.inflateMesh = true; Molecule.GetComponent <MeshCollider>().sharedMesh = mesh; Molecule.AddComponent <OVRGrabbable>(); OVRGrabbable g = Molecule.GetComponent <OVRGrabbable>(); Collider col = Molecule.GetComponent <MeshCollider>(); g.GetComponent <OVRGrabbable>().setGrabPoint(col); Molecule.AddComponent <Rigidbody>(); Rigidbody r = Molecule.GetComponent <Rigidbody>(); r.isKinematic = true; r.useGravity = false; //Debug.Log(string.Format("Position in readvet(Spacefill): " + Molecule.transform.position.x + "," + Molecule.transform.position.y + ", " + Molecule.transform.position.z)); return(Molecule); } //*********************************************************************************** else if (type == "surface") { GameObject mol = new GameObject(name); mol.transform.localScale = new Vector3(scale, scale, scale); mol.AddComponent <MeshFilter>(); mol.AddComponent <SkinnedMeshRenderer>(); mol.AddComponent <Cloth>(); Regex sepReg = new Regex(@"\s+"); // Regex numReg = new Regex(@"[^0-9]"); string[] lines = _getEfvet(name); if (!lines.Any()) { Destroy(mol); mol = null; return(mol); } string line = lines[0].TrimStart(' '); string[] stArrayData = sepReg.Split(line); int verticesCount = int.Parse(stArrayData[0]); int edgesCount = int.Parse(stArrayData[1]); int triangleArrayCount = int.Parse(stArrayData[2]); if (verticesCount > 65000) { Debug.Log(string.Format("This molecule is too large(more than 65,000 vertices), we are going to destroy it!")); Destroy(mol); mol = null; return(mol); } var vertices = new List <Vector3>(); var colors = new List <Color>(); var temperatures = new List <float>(); var insiders = new List <int>(); for (int i = 0; i < verticesCount; i++) { line = lines[i + 1].TrimStart(' '); stArrayData = sepReg.Split(line); float x = float.Parse(stArrayData[0]); float y = float.Parse(stArrayData[1]); float z = float.Parse(stArrayData[2]); float temperatureFactor = float.Parse(stArrayData[8]); int isInside = int.Parse(stArrayData[11]); int colorIndex = int.Parse(stArrayData[13]); string atomName = stArrayData[14]; string residueName = stArrayData[15]; vertices.Add(new Vector3(-1 * x, y, z)); temperatures.Add(temperatureFactor); if (!flaggedAtoms.Contains(atomName) && flaggedAminos.Contains(residueName)) { colors.Add(vertexColor[colorIndex + 10]); } else { colors.Add(vertexColor[colorIndex]); } if (isInside != 1) { insiders.Add(i); } } var triangles = new List <int>(); for (int i = 0; i < triangleArrayCount; i++) { line = lines[verticesCount + edgesCount + i + 1].TrimStart(' '); stArrayData = sepReg.Split(line); int a = int.Parse(stArrayData[3]); int b = int.Parse(stArrayData[4]); int c = int.Parse(stArrayData[5]); if (!insiders.Contains(a - 1) && !insiders.Contains(b - 1) && !insiders.Contains(c - 1)) { triangles.Add(c - 1); triangles.Add(b - 1); triangles.Add(a - 1); } } Mesh mesh = new Mesh(); mesh.vertices = vertices.ToArray(); mesh.triangles = triangles.ToArray(); mesh.colors = colors.ToArray(); Debug.Log(string.Format("DEBUG: MESH " + mesh.isReadable)); mesh.RecalculateNormals(); mesh.RecalculateBounds(); mol.GetComponent <MeshFilter>().sharedMesh = mesh; mol.GetComponent <SkinnedMeshRenderer>().sharedMesh = mesh; mol.GetComponent <SkinnedMeshRenderer>().sharedMaterial = molMat; mol.AddComponent <MeshCollider>(); MeshCollider molCollider = mol.GetComponent <MeshCollider>(); molCollider.convex = true; molCollider.inflateMesh = true; mol.GetComponent <MeshCollider>().sharedMesh = mesh; mol.AddComponent <OVRGrabbable>(); OVRGrabbable g = mol.GetComponent <OVRGrabbable>(); Collider col = mol.GetComponent <MeshCollider>(); g.GetComponent <OVRGrabbable>().setGrabPoint(col); mol.AddComponent <Rigidbody>(); Rigidbody r = mol.GetComponent <Rigidbody>(); r.isKinematic = true; r.useGravity = false; mol.GetComponent <Cloth>().useGravity = false; float maxTemparature = temperatures.Max(); ClothSkinningCoefficient[] constrants; constrants = mol.GetComponent <Cloth>().coefficients; for (int i = 0; i < constrants.Length; i++) { constrants[i].maxDistance = softness * temperatures[i] / maxTemparature; } mol.GetComponent <Cloth>().coefficients = constrants; //Debug.Log(string.Format("Position in readvet(Surface): " + mol.transform.position.x + "," + mol.transform.position.y + ", " + mol.transform.position.z)); return(mol); } return(null); }
protected virtual void GrabBegin() { float closestMagSq = float.MaxValue; OVRGrabbable closestGrabbable = null; Collider closestGrabbableCollider = null; // Iterate grab candidates and find the closest grabbable candidate foreach (OVRGrabbable grabbable in m_grabCandidates.Keys) { //bool canGrab = !(grabbable.isGrabbed && !grabbable.allowOffhandGrab); //if (!canGrab) //{ // continue; //} for (int j = 0; j < grabbable.grabPoints.Length; ++j) { Collider grabbableCollider = grabbable.grabPoints[j]; // Store the closest grabbable Vector3 closestPointOnBounds = grabbableCollider.ClosestPointOnBounds(m_gripTransform.position); float grabbableMagSq = (m_gripTransform.position - closestPointOnBounds).sqrMagnitude; if (grabbableMagSq < closestMagSq) { closestMagSq = grabbableMagSq; closestGrabbable = grabbable; closestGrabbableCollider = grabbableCollider; } } } // Disable grab volumes to prevent overlaps GrabVolumeEnable(false); if (closestGrabbable != null) { if (closestGrabbable.isGrabbed) { if (closestGrabbable.isFixed) { closestGrabbable.grabbedBy.GrabEnd(); } else { closestGrabbable.grabbedBy.OffhandGrabbed(closestGrabbable); } } m_grabbedObj = closestGrabbable; //disable recovering m_grabbedObj.GetComponent <wheelAuto>().setRecovering = false; m_grabbedObj.GrabBegin(this, closestGrabbableCollider); //NEW: Add Haptic Sound OVRHapticsClip hapticsClip = new OVRHapticsClip(hapticAudioClip); if (m_controller == OVRInput.Controller.LTouch) { OVRHaptics.LeftChannel.Preempt(hapticsClip); } else { OVRHaptics.RightChannel.Preempt(hapticsClip); } m_lastPos = transform.position; m_lastRot = transform.rotation; // Set up offsets for grabbed object desired position relative to hand. if (m_grabbedObj.snapPosition) { m_grabbedObjectPosOff = m_gripTransform.localPosition; if (m_grabbedObj.snapOffset) { Vector3 snapOffset = m_grabbedObj.snapOffset.position; if (m_controller == OVRInput.Controller.LTouch) { snapOffset.x = -snapOffset.x; } m_grabbedObjectPosOff += snapOffset; } } else { Vector3 relPos = m_grabbedObj.transform.position - transform.position; relPos = Quaternion.Inverse(transform.rotation) * relPos; m_grabbedObjectPosOff = relPos; } if (m_grabbedObj.snapOrientation) { m_grabbedObjectRotOff = m_gripTransform.localRotation; if (m_grabbedObj.snapOffset) { m_grabbedObjectRotOff = m_grabbedObj.snapOffset.rotation * m_grabbedObjectRotOff; } } else { Quaternion relOri = Quaternion.Inverse(transform.rotation) * m_grabbedObj.transform.rotation; m_grabbedObjectRotOff = relOri; } if (m_grabbedObj.isFixed) { OVRCameraRig rig = transform.parent.parent.GetComponent <OVRCameraRig>(); rig.UpdatedAnchors -= updateAnchor; localAvatar = m_hand.parent; OvrAvatar.lockedHand = m_hand.gameObject; OvrAvatar.lockedController = m_controllerPoint.gameObject; m_hand.parent = m_grabbedObj.transform; m_controllerPoint.parent = m_grabbedObj.transform; rig.UpdatedAnchors += updateWheel; } else { // Note: force teleport on grab, to avoid high-speed travel to dest which hits a lot of other objects at high // speed and sends them flying. The grabbed object may still teleport inside of other objects, but fixing that // is beyond the scope of this demo. MoveGrabbedObject(m_lastPos, m_lastRot, true); if (m_parentHeldObject) { m_grabbedObj.transform.parent = transform; } } } }