public override void CollectObservations() { foreach (var ap in allPosition) { AddVectorObs(ap); } AddVectorObs(_target.transform.localPosition); AddVectorObs(intelPointNb.GetComponent <Rigidbody>().velocity); AddVectorObs(ip); }
// Update is called once per frame void Update() { tp = _target.GetComponent <Rigidbody>().position; ip = intelPoint.position; //print("ip is" + ip); //youwenti for (int i = 0; i < allPosition.Count; i++) { deltaPosition.Add(ip - allPosition[i]); // print(deltaPosition[i]); } dir = tp - ip; // add force for intelligent part intelPointNb.GetComponent <Rigidbody>().AddForce(dir * moveSpeed, ForceMode.Force); if (intelPointNb.GetComponent <Rigidbody>().velocity.sqrMagnitude > 25f) // slow it down { intelPointNb.GetComponent <Rigidbody>().velocity = intelPointNb.GetComponent <Rigidbody>().velocity *0.6f; } //add linked force for non - intelligent part //for (int i = 0; i < allPosition.Count; i++) //{ // if (deltaPosition[i].magnitude > originaldeltaPosition[i].magnitude) //p1-p0>0 // { // var dirr = deltaPosition[i].normalized; // var deltap = deltaPosition[i] - originaldeltaPosition[i]; //deltap = p1-p0 // nointelPointNb[i].GetComponent<Rigidbody>().AddForce((noin_moveSpeed * deltap.magnitude) * dirr, ForceMode.Force); // } // else // { // nointelPointNb[i].GetComponent<Rigidbody>().velocity = 0.1f * nointelPointNb[i].GetComponent<Rigidbody>().velocity; // print("stay"); //速度减慢趋于静止 // } //} //store previousposition information previousip = ip; }
// Start is called before the first frame update void Start() { nointelPointNb = allPointObj.GetComponentsInChildren <NodePoint>(); foreach (var n in nointelPointNb) { n.position = n.transform.localPosition; allPosition.Add(n.position); //print(n.position); } ip = intelPoint.transform.localPosition; tp = _target.GetComponent <Rigidbody>().position; dir = tp - ip; intelPointNb = intelPoint.GetComponent <NodePoint>(); originaldeltaPosition = deltaPosition; }
public override void InitializeAgent() { nointelPointNb = allPointObj.GetComponentsInChildren <NodePoint>(); foreach (var n in nointelPointNb) { n.position = n.transform.localPosition; allPosition.Add(n.position); //print(n.position); } ip = intelPoint.position; tp = _target.GetComponent <Rigidbody>().position; dir = tp - ip; intelPointNb = intelPoint.GetComponent <NodePoint>(); originaldeltaPosition = deltaPosition; SetReward(0.005f); }
// Update is called once per frame void Update() { if (controls.TrackCreating.Start.triggered) { inMenu = !inMenu; if (inMenu) { FindObjectOfType <TrackUIManager>().ShowMenu(); } else { FindObjectOfType <TrackUIManager>().HideMenu(); } } if (!inMenu) { Cursor.lockState = CursorLockMode.Locked; Cursor.visible = false; //adds a new road segment if (controls.TrackCreating.PlaceNode.triggered && !MovingObject) { AddPoint(); //addNode = false; AS.PlayOneShot(placeNode); } //zooms in and out if (controls.TrackCreating.Zoom.triggered) { int value = (int)controls.TrackCreating.Zoom.ReadValue <float>(); if ((int)ZoomLevel + value <= 4 && (int)ZoomLevel + value >= 1) { ZoomLevel = ZoomLevel + value; Zoom(); } } //finds out if we're hovering over a node Ray ray = Camera.main.ScreenPointToRay(cursorPosition); ray.origin = new Vector3(RoundTo(ray.origin.x, (15f / 4) * (int)gridSize), RoundTo(ray.origin.y, 1), RoundTo(ray.origin.z, (15f / 4) * (int)gridSize)); RaycastHit hit; if (Physics.Raycast(ray, out hit, 100f, nodeLayer)) { NodePoint p = hit.collider.gameObject.GetComponent <NodePoint>(); if (!p.LockedNode) { //if we select the node to move it if (controls.TrackCreating.Drag.triggered && !p.isSelected) { p.Select(true); MovingObject = p.gameObject; } //when we deselect a node else if (controls.TrackCreating.Drag.triggered && p.isSelected) { p.Select(false); MovingObject = null; } } //rotating the nodes around if (controls.TrackCreating.RotateRight.triggered) { NodeManager.instance.Rotate(p.GetComponent <NodePoint>(), true); } if (controls.TrackCreating.RotateLeft.triggered) { NodeManager.instance.Rotate(p.GetComponent <NodePoint>(), false); } if (controls.TrackCreating.Delete.triggered) { NodeManager.instance.RemoveNode(p.GetComponent <NodePoint>()); AS.PlayOneShot(deleteNode); } } //moving a nodes position if (MovingObject) { Vector3 newPos = Camera.main.ScreenToWorldPoint((Vector3)cursorPosition + new Vector3(0, 0, Camera.main.transform.position.y - 1)); newPos = new Vector3(RoundTo(newPos.x, (15f / 4) * (int)gridSize), RoundTo(newPos.y, 1), RoundTo(newPos.z, (15f / 4) * (int)gridSize)); //MovingObject.transform.position = newPos; NodeManager.instance.UpdateNode(MovingObject.GetComponent <NodePoint>(), newPos); } if (controls.TrackCreating.TempReorder.triggered) { if (MovingObject) { NodeManager.instance.ReOrder(MovingObject.GetComponent <NodePoint>(), (int)controls.TrackCreating.TempReorder.ReadValue <float>()); } } if (controls.TrackCreating.ToogleLoop.triggered) { TG.ToggleLoop(); } } else { //we're in the menu Cursor.lockState = CursorLockMode.None; Cursor.visible = true; } }