Esempio n. 1
0
 public void ClearObstacles()
 {
     BehaviorPlugin.ClearObstacles();
     foreach (GameObject obstacle in m_obstacleList)
     {
         Destroy(obstacle);
     }
     m_obstacleList.Clear();
 }
Esempio n. 2
0
    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();
    }
Esempio n. 3
0
    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();
        }
    }
Esempio n. 4
0
    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);
    }