private void DoScan() { KillHolograms (); //Delete old ones //Do a fresh scan, and create new ones GameObject[] found = FindGameObjectsInsideRange(sensorTarget.transform.position,scanRange); foreach(GameObject detectedObj in found) { if(detectedObj != this && detectedObj.tag == "robot") //&& detectedObj.tag != "hologram") { GameObject clone; //if(detectedObj.tag != "robot" ) // clone = Instantiate (detectedObj) as GameObject; //if(detectedObj.tag == "robot" ) //{ //clone = Instantiate (Resources.Load("RobotProject")) as GameObject; clone = CompoundObjectFactory.Create("Robot",CompoundObjectFactory.COType.Avatar); clone.name = "Avatar"; //} clone.tag = "hologram"; foreach(MonoBehaviourThink com in clone.GetComponents<MonoBehaviourThink>()) com.enabled = false; clone.GetComponent<Collider>().enabled = false; clone.transform.parent = this.transform; // link the hologram to the display SensorHologram holo = new SensorHologram(detectedObj,clone); Vector3 scaleVec = detectedObj.transform.localScale; scaleVec = new Vector3(scaleVec.x * scale,scaleVec.y*scale,scaleVec.z*scale); clone.transform.localScale = scaleVec; holograms.Add(holo); AdjustHologram(holo,true); } } //sensorTarget = null; }
private void AdjustHologram(SensorHologram holo,bool force) { //clone.transform.position = new Vector3(0f,0f,0f); //clone.transform.position = this.gameObject.transform.position + displayOffset; //Find minimized velocites and scale GameObject detectedObj = holo.reading; if (detectedObj == null) //Whatever it died return; GameObject clone = holo.hologram; Vector3 objv = new Vector3 (0, 0, 0); Vector3 shpv = new Vector3 (0, 0, 0); if(detectedObj.GetComponent<Rigidbody>() != null) { objv = detectedObj.GetComponent<Rigidbody>().velocity; shpv = this.transform.parent.parent.parent.gameObject.GetComponent<Rigidbody>().velocity; } Vector3 shpr = this.gameObject.transform.rotation.eulerAngles; Vector3 relVel; Vector3 newPos; Vector3 newVec; //Find hologram pos newPos = (detectedObj.transform.position - this.gameObject.transform.position) * scale; //Find new velocity objv = new Vector3(objv.x * scale,objv.y*scale,objv.z*scale); shpv = new Vector3(shpv.x * scale,shpv.y*scale,shpv.z*scale); relVel = Quaternion.Euler(shpr.x, shpr.y, shpr.z) * (objv - shpv); newVec = this.transform.parent.parent.parent.gameObject.GetComponent<Rigidbody>().velocity+relVel; Quaternion ea = this.gameObject.transform.rotation; Quaternion cEa = detectedObj.transform.rotation; //clone.transform.rotation = Quaternion.Euler( cEa.x - ea.x, cEa.y- ea.y, cEa.z - ea.z); //relVel = Quaternion.Euler(shpr.x, shpr.y, shpr.z) * relVel; clone.transform.localPosition = newPos; clone.transform.rotation = ea*cEa ; //clone.rigidbody.velocity = newVec; //clone.rigidbody.angularVelocity = detectedObj.rigidbody.angularVelocity; }