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(); } }
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); } } }
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); }
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(); }
// 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); } }
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(); }
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(); }
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(); } } }
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 }; } }