private void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.tag == "Enemy" && !hassleIsBlocked) { hassleIsBlocked = true; inHassle = true; // Запрет на стычки enemy = collision.gameObject; // Получаем оппонента enemyRB = enemy.GetComponent <Rigidbody2D>(); // Получаем RigidBody enemyRB.constraints = RigidbodyConstraints2D.FreezeAll; // Замораживаем врага enemyCollider = enemy.GetComponent <Collider2D>(); // Получаем Collider enemyCollider.enabled = false; // Отключаем Collider playerRB.constraints = RigidbodyConstraints2D.FreezeAll; // Замораживаем игрока playerCollider.enabled = false; // Отключаем Collider playerPosition = player.transform.position; // Записываем координаты игрока enemyPosition = enemy.transform.position; // Записываем координаты врага centerOfHassle = enemyPosition / 2 + playerPosition / 2; // Находим центр стычки if (playerPosition.x > enemyPosition.x) // Расставляем объекты для стычки { player.transform.position = new Vector2(centerOfHassle.x + 0.5f, centerOfHassle.y); enemy.transform.position = new Vector2(centerOfHassle.x - 0.5f, centerOfHassle.y); } else { player.transform.position = new Vector2(centerOfHassle.x - 0.5f, centerOfHassle.y); enemy.transform.position = new Vector2(centerOfHassle.x + 0.5f, centerOfHassle.y); } hassleBar = Instantiate(hassleBarLink, new Vector2(centerOfHassle.x, centerOfHassle.y + 1), Quaternion.identity); // Создание полосы стычки hassleStatus = hassleBar.GetComponent <HassleStatus>(); // Получение скрипта полосы playerForce = 10; // Задаются базовые парамметры для стычки enemyForce = 10; hassleStatus.SetBalance(playerForce, enemyForce); // Отрисовывается ползунок camera.transform.position = new Vector3(centerOfHassle.x, centerOfHassle.y, camera.transform.position.z); // Камера занимает позицию центра стычки cameraOriginalSize = cameraSize.orthographicSize; // Запись предыдущего положения камеры cameraSize.orthographicSize = 3; // Приближает изображение InvokeRepeating("EnemyHit", 1, 0.2f); // Включается автоклик у врага InvokeRepeating("Timer", 1, 1f); // Включается таймер на стычку } }
void Update() { if (inHassle) { if (Input.GetMouseButtonDown(0)) // Клик игрока { PlayerHit(); } if (balanceIsChanged) // Отрисовка полосы { hassleStatus.SetBalance(playerForce, enemyForce); balanceIsChanged = false; } if (playerForce == 0 || enemyForce == 0 || time == 0) // Конец стычки { // Востановление параметров CancelInvoke("Timer"); CancelInvoke("EnemyHit"); playerRB.constraints = RigidbodyConstraints2D.None; playerCollider.enabled = true; enemyRB.constraints = RigidbodyConstraints2D.None; enemyCollider.enabled = true; if (playerForce == 0) // Победа врага { // ЗАМЕНИТЬ НА ПОБЕДУ ВРАГА if (playerPosition.x > enemyPosition.x) { playerRB.AddForce(transform.right * impulseForce, ForceMode2D.Impulse); enemyRB.AddForce(transform.right * -impulseForce, ForceMode2D.Impulse); } else { playerRB.AddForce(transform.right * -impulseForce, ForceMode2D.Impulse); enemyRB.AddForce(transform.right * impulseForce, ForceMode2D.Impulse); } Debug.Log("Red win"); } if (enemyForce == 0) // Победа игрока { // ЗАМЕНИТЬ НА ПОБЕДУ ИГРОКА if (playerPosition.x > enemyPosition.x) { playerRB.AddForce(transform.right * impulseForce, ForceMode2D.Impulse); enemyRB.AddForce(transform.right * -impulseForce, ForceMode2D.Impulse); } else { playerRB.AddForce(transform.right * -impulseForce, ForceMode2D.Impulse); enemyRB.AddForce(transform.right * impulseForce, ForceMode2D.Impulse); } Debug.Log("Blue win"); } if (time == 0) // Ничья { // ЗАМЕНИТЬ НА УРОН ОБЕИМ СТОРОНАМ if (playerPosition.x > enemyPosition.x) // Расставляем объекты для стычки { playerRB.AddForce(transform.right * impulseForce, ForceMode2D.Impulse); enemyRB.AddForce(transform.right * -impulseForce, ForceMode2D.Impulse); } else { playerRB.AddForce(transform.right * -impulseForce, ForceMode2D.Impulse); enemyRB.AddForce(transform.right * impulseForce, ForceMode2D.Impulse); } Debug.Log("Draft"); } // Востановление параметров Destroy(hassleBar); cameraSize.orthographicSize = cameraOriginalSize; balanceIsChanged = false; inHassle = false; time = 3; Invoke("UnblockHassle", 3); } } }
private void OnCollisionEnter2D(Collision2D collision) { // if (!playerManager.PV.IsMine) return; // if (collision.gameObject.tag == "Enemy" ) if (collision.gameObject.tag == "Player" && !hassleIsBlocked) { Debug.Log("Столкнулись"); if (collision.gameObject.GetComponent <PhotonView>().Owner.GetTeam() != PhotonNetwork.LocalPlayer.GetTeam()) { // if (playerManager.PV.IsMine) { Debug.Log("Враги"); hassleIsBlocked = true; inHassle = true; // Запрет на стычки // enemy = collision.gameObject; // Получаем оппонента // enemyRB = enemy.GetComponent<Rigidbody2D>(); // Получаем RigidBody // enemyRB.constraints = RigidbodyConstraints2D.FreezeAll; // Замораживаем врага // enemyCollider = enemy.GetComponent<Collider2D>(); // Получаем Collider // enemyCollider.enabled = false; // Отключаем Collider enemyPosition = collision.transform.position; Debug.Log(enemyPosition); playerManager.rb.constraints = RigidbodyConstraints2D.FreezeAll; // Замораживаем игрока playerManager.boxCollider.enabled = false; // Отключаем Collider // playerManager.moveJoystick.MoveJoystickPointerUp(); // playerManager.shootJoystick.ShootJoystickPointerUp(); // playerManager.PV.RPC("FreezePlayer", RpcTarget.AllBuffered, new object[] { RigidbodyConstraints2D.FreezeAll, false, true }); // playerManager.rb.isKinematic = true; playerPosition = transform.position; // Записываем координаты игрока // enemyPosition = enemy.transform.position; // Записываем координаты врага centerOfHassle = enemyPosition / 2 + playerPosition / 2; // Находим центр стычки if (playerPosition.x > enemyPosition.x) // Расставляем объекты для стычки { Debug.Log("Выше"); transform.position = new Vector2(centerOfHassle.x + 0.5f, centerOfHassle.y); // enemy.transform.position = new Vector2(centerOfHassle.x - 0.5f, centerOfHassle.y); } else { Debug.Log("Ниже"); transform.position = new Vector2(centerOfHassle.x - 0.5f, centerOfHassle.y); // enemy.transform.position = new Vector2(centerOfHassle.x + 0.5f, centerOfHassle.y); } hassleStatus = Instantiate(hassleBarLink, new Vector2(centerOfHassle.x, centerOfHassle.y + 1), Quaternion.identity).GetComponent <HassleStatus>(); // Создание полосы стычки,получаем скрипт бара //hassleStatus = hassleBar.GetComponent<HassleStatus>(); // Получение скрипта полосы playerTouchCount = 10; // Задаются базовые парамметры для стычки enemyTouchCount = 10; hassleStatus.SetBalance(playerTouchCount, enemyTouchCount); // Отрисовывается ползунок cameraObject.transform.position = new Vector3(centerOfHassle.x, centerOfHassle.y, cameraObject.transform.position.z); // Камера занимает позицию центра стычки cameraOriginalSize = cameraObject.orthographicSize; // Запись предыдущего положения камеры originalOffset = cameraFollow.offset; // Запись предыдущего положения отступов камеры cameraObject.orthographicSize = 3; // Приближает изображение cameraFollow.offset = offset; // Меняем отступы у камеры,варавниваем положение InvokeRepeating("EnemyHit", 1, 0.2f); // Включается автоклик у врага InvokeRepeating("Timer", 1, 1f); // Включается таймер на стычку } // } } }