コード例 #1
0
ファイル: TankAcademy.cs プロジェクト: zeroblitz36/ml-agents
    private GameObject CreateTankAgent(GameObject tankAgentPrefab, Brain brain, Vector3 position, Quaternion orientation)
    {
        GameObject agentObj = Instantiate(tankAgentPrefab, position, orientation);
        Agent      agent    = agentObj.GetComponent <Agent>();

        agent.GiveBrain(brain);
        TankAgentScript tankAgentScript = agentObj.GetComponent <TankAgentScript>();

        tankAgentScript.m_SpawnPoint = position;
        agent.AgentReset();
        return(agentObj);
    }
コード例 #2
0
ファイル: TankAcademy.cs プロジェクト: zeroblitz36/ml-agents
    internal void EventGoalSphereHitByBullet(int bulletTankId)
    {
        ResetGoalSphere();

        for (int i = 0; i < m_Agents.Length; i++)
        {
            TankAgentScript t = m_Agents[i].GetComponent <TankAgentScript>();
            if (bulletTankId == t.m_TankId)
            {
                t.HitPoint();
            }
        }
    }
コード例 #3
0
ファイル: TankAcademy.cs プロジェクト: zeroblitz36/ml-agents
    private void ResetGoalSphere()
    {
        int     d      = 30;
        Vector3 newPos = new Vector3(Random.Range(-d, d), 1.5f, Random.Range(-d, d));

        m_goalSphere.transform.position = newPos;
        Vector2 v      = Random.insideUnitCircle.normalized * 10;
        Vector3 newVel = new Vector3(0, 0, 0);

        m_goalSphere.GetComponent <Rigidbody>().velocity = newVel;

        TankAgentScript t = m_Agents[0].GetComponent <TankAgentScript>();
        Vector3         relativeVector = m_goalSphere.transform.position - t.transform.position;
        float           signedAngle    = GetSignedAngleBetweenTankAndGoalSphere(t.transform);
        Rigidbody       rBody          = t.GetComponent <Rigidbody>();

        rBody.rotation *= Quaternion.Euler(0, -signedAngle, 0);
    }
コード例 #4
0
ファイル: TankAcademy.cs プロジェクト: zeroblitz36/ml-agents
    public override void AcademyReset()
    {
        if (m_NumberOfAgents > m_SpawnPoints.Length)
        {
            Debug.LogError("There are not enough spawn points for all the agents");
        }
        if (m_NumberOfAgents <= 0)
        {
            Debug.LogError("The number of agents must be a positive number");
        }

        for (int i = 0; i < m_Agents.Length; i++)
        {
            if (m_Agents[i] != null)
            {
                TankAgentScript currentTankAgent = m_Agents[i].GetComponent <TankAgentScript>();
                currentTankAgent.Done();
                Destroy(m_Agents[i]);
            }
        }

        if (m_isPlayerPresent)
        {
            m_Agents[0] = CreateTankAgent(m_TankAgentPrefab, m_PlayerBrain, m_SpawnPoints[0].position, Quaternion.identity);
        }
        else
        {
            m_Agents[0] = CreateTankAgent(m_TankAgentPrefab, m_LearningBrain, m_SpawnPoints[0].position, Quaternion.identity);
        }

        for (int i = 1; i < m_NumberOfAgents; i++)
        {
            m_Agents[i] = CreateTankAgent(m_TankAgentPrefab, m_LearningBrain, m_SpawnPoints[i].position, Quaternion.identity);
        }

        for (int i = 0; i < m_NumberOfAgents; i++)
        {
            m_CameraControl.m_Targets[i] = m_Agents[i].transform;
            TankAgentScript currentTankAgent = m_Agents[i].GetComponent <TankAgentScript>();
            currentTankAgent.m_TankId        = i;
            currentTankAgent.cam             = m_mainCamera;
            currentTankAgent.tankAcademy     = this;
            currentTankAgent.enemyTankAgents = new TankAgentScript[m_NumberOfAgents - 1];

            int k = 0;
            for (int j = 0; j < m_NumberOfAgents; j++)
            {
                if (i == j)
                {
                    continue;
                }
                TankAgentScript otherTankAgent = m_Agents[j].GetComponent <TankAgentScript>();
                currentTankAgent.enemyTankAgents[k] = otherTankAgent;
                ++k;
            }
        }

        m_CameraControl.m_Targets[m_NumberOfAgents] = m_goalSphere.transform;

        TankShell.DisableAllShells();

        ResetGoalSphere();
    }