public void ClearObstacles() { BehaviorPlugin.ClearObstacles(); foreach (GameObject obstacle in m_obstacleList) { Destroy(obstacle); } m_obstacleList.Clear(); }
private void FixedUpdate() { //1. send position of target/goal to Plugin Vector3 targetPos = m_target.transform.position; BehaviorPlugin.SetTarget(new float[] { targetPos[0], targetPos[1], targetPos[2] }); //2. transfer all agent data necessary for force and torque calculations from Unity to Plugin //3. update agent position and orientation //4. transfer all data necessary for Unity agent update from Plugin WriteActorDataArray(); BehaviorPlugin.UpdateActorData(Time.fixedDeltaTime, m_actorDataArray, m_actorNum); WriteActorTransform(); }
public void ResetPlugin() { m_actorNum = m_actorList.Count; BehaviorPlugin.InitializeBehaviorPlugin(m_actorNum, m_obstacleNum, (int)m_behaviorType); int gainNum = BehaviorPlugin.GetGainNum(); BehaviorPlugin.SetControllerGains(m_gain.GetGainFloatArray(gainNum), gainNum); m_actorDataArray = new BehaviorPlugin.ActorData[m_actorNum]; for (int i = 0; i < m_actorNum; ++i) { m_actorDataArray[i] = new BehaviorPlugin.ActorData(i); m_actorDataArray[i].globalPosition = PluginHelpFunction.Vector3ToFloatArray(m_actorList[i].transform.position); m_actorDataArray[i].globalRotation = PluginHelpFunction.QuaternionToFloatArray(m_actorList[i].transform.rotation); } SetLeader(m_leader); ClearObstacles(); if (m_behaviorType == BehaviorType.AVOID) { GenerateObstacles(); } }
public void GenerateObstacles() { Vector3[] positions = new Vector3[] { new Vector3(500, 0, 500), new Vector3(500, 0, -500), new Vector3(-500, 0, -500), new Vector3(-500, 0, 500) }; ClearObstacles(); m_obstacleDataArray = new BehaviorPlugin.ObstacleData[m_obstacleNum]; for (int i = 0; i < m_obstacleNum; ++i) { // Generates random obstacles GameObject obstacle = GameObject.Instantiate(m_obstaclePrefab); Vector3 position; if (i <= 3) { position = positions[i]; } else { position = new Vector3(Random.Range(m_obstaclePosMinMax[0], m_obstaclePosMinMax[1]), 0, Random.Range(m_obstaclePosMinMax[0], m_obstaclePosMinMax[1])); } Physics.Raycast(position + new Vector3(0, 1000, 0), Vector3.down, out RaycastHit hit, Mathf.Infinity, m_environmentLayer); position.y = hit.point.y; float randomRadius = Random.Range(m_obstacleRadiusMinMax[0], m_obstacleRadiusMinMax[1]); Vector3 scale = new Vector3(randomRadius, randomRadius, randomRadius); obstacle.transform.position = position; obstacle.transform.localScale = scale; obstacle.transform.rotation = Random.rotation; m_obstacleList.Add(obstacle); // Set obstacle data m_obstacleDataArray[i].globalPosition = PluginHelpFunction.Vector3ToFloatArray(position); m_obstacleDataArray[i].radius = randomRadius; } BehaviorPlugin.SetObstacleData(m_obstacleDataArray, m_obstacleNum); }