コード例 #1
0
    public void InstantiatePlayers()
    {
        GameObject[] spawnPoints = GameObject.FindGameObjectsWithTag("SpawnPoint");

        for (int i = 0; i < GameManager.numPlayers; i++)
        {
            InputManager.playerCount = i + 1;
            //Debug.Log(InputManager.playerCount);
            var obj = Instantiate(_player, spawnPoints[i].transform.position, spawnPoints[i].transform.rotation);
            obj.GetComponent <InputManager>().playerID = i + 1;

            GameManager.players[i] = obj;
            Debug.Log("yes");

            var targetGroup = GameObject.FindObjectOfType <Cinemachine.CinemachineTargetGroup>();

            var targets = targetGroup.m_Targets;
            List <Cinemachine.CinemachineTargetGroup.Target> list = new List <Cinemachine.CinemachineTargetGroup.Target>(targets);

            var newTarget = new Cinemachine.CinemachineTargetGroup.Target();
            newTarget.target = obj.transform;
            newTarget.weight = _NewCameraWeight;
            newTarget.radius = 40;
            list.Add(newTarget);
            targetGroup.m_Targets = list.ToArray();
        }
    }
コード例 #2
0
    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player") && bossHealth)
        {
            Destroy(GetComponent <Collider>());
            bossHealth.GetComponent <Brain>().enabled = true;

            bossHealthbar.health = bossHealth;
            winScreen.target     = bossHealth.gameObject;

            Array.Resize(ref group.m_Targets, group.m_Targets.Length + 1);

            var t = new Cinemachine.CinemachineTargetGroup.Target();
            t.target = bossHealth.transform;
            t.weight = 1;
            t.radius = 3;

            group.m_Targets[group.m_Targets.Length - 1] = t;

            if (bossTrack)
            {
                MusicPlayer.inst.ChangeTrack(bossTrack);
            }

            if (wall)
            {
                wall.SetActive(true);
            }
        }
    }
コード例 #3
0
    public void AddTarget(Transform transform, float radius)
    {
        Cinemachine.CinemachineTargetGroup.Target target = new Cinemachine.CinemachineTargetGroup.Target();
        target.target = transform;
        target.weight = 1f;
        target.radius = radius;

        targetGroup.m_Targets.Add(target);
    }
コード例 #4
0
ファイル: EnemyLockOn.cs プロジェクト: StephDi/Kusarigama
    void FindClosestEnemy()
    {
        enemies = GameObject.FindGameObjectsWithTag("Enemy");
        var position = player.transform.position;
        var dot      = Mathf.Infinity;

        lockOnCamera.transform.position = mainCamera.transform.position;
        playerCamera.transform.rotation = mainCamera.transform.rotation;

        for (int i = 0; i < enemies.Length; i++)
        {
            //distance between Player and Enemy;
            var diff        = (enemies[i].transform.position - position);
            var curDistance = diff.magnitude;

            // check if an Enemy is close enough
            if (curDistance < 100f)
            {
                //if an Enemy is close enough, check if its in sight of the cam
                enemyPos = mainCamera.WorldToViewportPoint(enemies[i].transform.position);
                if (enemyPos.x >= 0 && enemyPos.y >= 0 && enemyPos.z >= 0 && enemyPos.x <= 1 && enemyPos.y <= 1 && !TargetObstructed(enemies[i]))
                {
                    //check how far the Enemy is away from the center of the screen
                    enemyPos  -= new Vector3(0.5f, 0.5f, 0);
                    enemyPos.z = 0;
                    var curEnemyPos = enemyPos.magnitude;
                    if (curEnemyPos < dot)
                    {
                        dot          = curEnemyPos;
                        closestEnemy = enemies[i];
                    }
                    else if (curEnemyPos > dot)
                    {
                        continue;
                    }
                    enemyPos = new Vector3(0, 0, 0);
                }

                //Enemy is not in CamSight  ---- turn Cam behind PLayer -----
                else
                {
                    continue;
                }
            }
        }

        targets[0] = new Cinemachine.CinemachineTargetGroup.Target {
            target = player, radius = 4.0f, weight = playerWeight
        };
        targets[1] = new Cinemachine.CinemachineTargetGroup.Target {
            target = closestEnemy.transform, radius = 4.0f, weight = 1.0f
        };
        ActivateLockOncam();
    }
コード例 #5
0
    // Update is called once per frame
    void Update()
    {
        for (int i = 0; i < targetGroup.GetComponent <CinemachineTargetGroup>().m_Targets.Length; i++)
        {
            Cinemachine.CinemachineTargetGroup.Target t = targetGroup.GetComponent <CinemachineTargetGroup>().m_Targets[i];
            Debug.Log(t.target.transform.position.y);
            if (t.target.transform.position.z < -5 || t.target.transform.position.z > 15 || t.target.transform.position.y < -5 || t.target.transform.position.y > 10)
            {
                targetGroup.GetComponent <CinemachineTargetGroup>().RemoveMember(t.target.transform);
            }
            else
            {
                t.weight = 1f;
            }
        }

        foreach (Cinemachine.CinemachineTargetGroup.Target t in targets)
        {
            if (t.target.transform.position.z > -5 && t.target.transform.position.z < 15 && t.target.transform.position.y > -5 && t.target.transform.position.y < 10)
            {
                if (targetGroup.GetComponent <CinemachineTargetGroup>().m_Targets.Length == 1)
                {
                    if (targetGroup.GetComponent <CinemachineTargetGroup>().m_Targets[0].target.transform == GameObject.Find("Stage").transform)
                    {
                        targetGroup.GetComponent <CinemachineTargetGroup>().AddMember(t.target.transform, 1, 0);
                    }

                    else if (targetGroup.GetComponent <CinemachineTargetGroup>().m_Targets[0].target.transform != t.target.transform)
                    {
                        targetGroup.GetComponent <CinemachineTargetGroup>().AddMember(t.target.transform, 1, 0);
                    }
                }

                if (targetGroup.GetComponent <CinemachineTargetGroup>().m_Targets.Length == 2)
                {
                    if (targetGroup.GetComponent <CinemachineTargetGroup>().m_Targets[0].target.transform == GameObject.Find("Stage").transform)
                    {
                        targetGroup.GetComponent <CinemachineTargetGroup>().RemoveMember(GameObject.Find("Stage").transform);
                    }
                }
            }
        }

        if (targetGroup.GetComponent <CinemachineTargetGroup>().m_Targets.Length == 0)
        {
            targetGroup.GetComponent <CinemachineTargetGroup>().AddMember(GameObject.Find("Stage").transform, 1, 0);
        }
    }
コード例 #6
0
    private void OtherReviveStuff()        // TODO: Need to refactor eventually
    {
        ReviveEvent.Invoke();

        var targetGroup = GameObject.FindObjectOfType <Cinemachine.CinemachineTargetGroup>();

        var targets = targetGroup.m_Targets;
        List <Cinemachine.CinemachineTargetGroup.Target> list = new List <Cinemachine.CinemachineTargetGroup.Target>(targets);

        var newTarget = new Cinemachine.CinemachineTargetGroup.Target();

        newTarget.target = this.gameObject.transform;
        newTarget.weight = 40;
        newTarget.radius = 40;
        list.Remove(newTarget);
        targetGroup.m_Targets = list.ToArray();
    }
コード例 #7
0
    IEnumerator StayInCamera()
    {
        var targetGroup = GameObject.FindObjectOfType <Cinemachine.CinemachineTargetGroup>();

        var targets = targetGroup.m_Targets;
        List <Cinemachine.CinemachineTargetGroup.Target> list = new List <Cinemachine.CinemachineTargetGroup.Target>(targets);

        var newTarget = new Cinemachine.CinemachineTargetGroup.Target();

        newTarget.target = this.transform;
        newTarget.weight = _NewCameraWeight;
        newTarget.radius = _NewCameraRadius;
        list.Add(newTarget);
        targetGroup.m_Targets = list.ToArray();

        yield return(new WaitForSeconds(_TimeInCameraView));

        list.Remove(newTarget);
        targetGroup.m_Targets = list.ToArray();
    }
コード例 #8
0
    void Update()
    {
        changeTarget = Input.GetAxis("Mouse X");

        //Press the Button to Lock on
        if (Input.GetButtonDown("LockOn") && lockOnCam.Priority == 0)
        {
            FindClosestEnemy();
            targetIndicator.gameObject.SetActive(true);
            //set the Targetindicator every 0.005s - Invokes void TargetIndicator()
            InvokeRepeating("TargetIndicator", 0, 0.005f);
        }
        else if (Input.GetButtonDown("LockOn") && lockOnCam.Priority == 1 || closestEnemy == null)
        {
            obstructionTime = 0f;
            ActivatePlayerCam();
            targetIndicator.gameObject.SetActive(false);
            targets[0] = new Cinemachine.CinemachineTargetGroup.Target {
                target = player, radius = 4.0f, weight = playerWeight
            };
            targets[1] = new Cinemachine.CinemachineTargetGroup.Target {
                target = null, radius = 4.0f, weight = 1.0f
            };
        }

        //changeTarget reset
        if (changeTarget != 0 && lockOnCam.Priority == 1 && changedTarget == false)
        {
            changedTarget = true;
            ChangeTarget();
        }
        if (changeTarget == 0)
        {
            changedTarget = false;
        }

        //Look at Target
        if (lockOnCam.Priority == 1)
        {
            LookAtEnemy();
        }

        if (closestEnemy != null)
        {
            //TargetObstructionTimer
            if (TargetObstructed(closestEnemy))
            {
                obstructionTime += Time.deltaTime;
            }
            else if (!TargetObstructed(closestEnemy) && obstructionTime != 0f)
            {
                obstructionTime = 0f;
            }

            //PlayerObstructed -> activate lockoncamCollider
            if (PlayerObstructed())
            {
                lockOnCamCollider.enabled = false;
            }
            else if (!PlayerObstructed())
            {
                lockOnCamCollider.enabled = true;
            }

            //check if Distance to Targeted Enemy gets too big || if Tagret gets obstructed for too long
            if (Vector3.Distance(closestEnemy.transform.position, player.position) >= 35f || TargetObstructed(closestEnemy) && obstructionTime >= 1.5f)
            {
                closestEnemy = null;
                ActivatePlayerCam();
            }
        }
    }
コード例 #9
0
    void ChangeTarget()
    {
        var position = player.transform.position;
        var dot      = Mathf.Infinity;

        for (int i = 0; i < enemies.Length; i++)
        {
            //distance between Player and Enemy;
            var diff        = (enemies[i].transform.position - position);
            var curDistance = diff.magnitude;

            // check if an Enemy is close enough
            if (curDistance < 50f)
            {
                //if an Enemy is close enough, check if its in sight of the cam
                enemyPos = mainCamera.WorldToViewportPoint(enemies[i].transform.position);
                var closestEnemyPos = mainCamera.WorldToViewportPoint(closestEnemy.transform.position);

                if (enemyPos.x >= 0 && enemyPos.y >= 0 && enemyPos.z >= 0 && enemyPos.x <= 1 && enemyPos.y <= 1 && !TargetObstructed(closestEnemy))
                {
                    if (changeTarget < 0)
                    {
                        //change to left Target
                        if (enemyPos.x < closestEnemyPos.x)
                        {
                            //ignore depth values
                            enemyPos.z        = 0f;
                            closestEnemyPos.z = 0f;
                            //take the closest to the current trageted enemy
                            var enemyDiff   = (enemyPos - closestEnemyPos);
                            var curEnemyPos = enemyDiff.magnitude;

                            if (curEnemyPos < dot)
                            {
                                dot = curEnemyPos;
                                closestChangeEnemy = enemies[i];
                            }
                        }
                    }
                    else if (changeTarget > 0)
                    {
                        //change to right Target
                        if (enemyPos.x > closestEnemyPos.x)
                        {
                            //ignore depth values
                            enemyPos.z        = 0f;
                            closestEnemyPos.z = 0f;
                            //take the closest to the current trageted enemy
                            var enemyDiff   = (enemyPos - closestEnemyPos);
                            var curEnemyPos = enemyDiff.magnitude;

                            if (curEnemyPos < dot)
                            {
                                dot = curEnemyPos;
                                closestChangeEnemy = enemies[i];
                            }
                        }
                    }
                }
            }
        }
        closestEnemy = closestChangeEnemy;
        if (closestEnemy != null)
        {
            targets[0] = new Cinemachine.CinemachineTargetGroup.Target {
                target = player, radius = 4.0f, weight = playerWeight
            };
            targets[1] = new Cinemachine.CinemachineTargetGroup.Target {
                target = closestEnemy.transform, radius = 4.0f, weight = 1.0f
            };
        }
    }