|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
26.12.2019, 14:49 | #1 |
Новичок
Джуниор
Регистрация: 26.12.2019
Сообщений: 1
|
Не работает код (Unity, 2D игра, индикатор удара)
По задумке, когда мой игрок бьется об шипы, то он должен временно краснеть и возвращаться обратно в стандартные цвета. Также, при смерти он должен проваливаться, то бишь капсул-коллайдер должен попросту выключаться. Ни того, ни другого не происходит, то есть все, что у меня в войде RecountHp не работает. Также креплю несколько скриншотов настроек - игрока и врага. Помогите, пожалуйста
Код скрипта, который я креплю к плееру: using System.Collections; using System.Collections.Generic; using UnityEngine; public class Plsyer : MonoBehaviour { Rigidbody2D rb; public float speed; public float jumpHeight; public Transform groundCheck; bool isGrounded; Animator anim; int curHp; int maxHp = 3; bool isHit = false; // Start is called before the first frame update void Start() { rb = GetComponent<Rigidbody2D>(); anim = GetComponent<Animator>(); curHp = maxHp; } // Update is called once per frame void Update() { CheckGround(); if (Input.GetAxis("Horizontal") == 0 && (isGrounded)) { anim.SetInteger("State", 1); } else { Flip(); if (isGrounded) anim.SetInteger("State", 2); } } void FixedUpdate() { rb.velocity = new Vector2(Input.GetAxis("Horizontal") * speed, rb.velocity.y); if (Input.GetKeyDown(KeyCode.Space) && isGrounded) rb.AddForce(transform.up * jumpHeight, ForceMode2D.Impulse); } void Flip() { if (Input.GetAxis("Horizontal") > 0) transform.localRotation = Quaternion.Euler(0, 0, 0); if (Input.GetAxis("Horizontal") < 0) transform.localRotation = Quaternion.Euler(0, 180, 0); } void CheckGround() { Collider2D[] colliders = Physics2D.OverlapCircleAll(groundCh eck.position, 0.2f); isGrounded = colliders.Length > 1; if (!isGrounded) anim.SetInteger("State", 3); } public void RecountHp(int deltaHp) { curHp = curHp + deltaHp; if (deltaHp < 0) { StopCoroutine(OnHit()); isHit = true; StartCoroutine(OnHit()); } print(curHp); if (curHp <= 0) { GetComponent<CapsuleCollider2D>().e nabled = false; } } IEnumerator OnHit() { if (isHit) GetComponent<SpriteRenderer>().colo r = new Color(1f, GetComponent<SpriteRenderer>().colo r.g - 0.04f, GetComponent<SpriteRenderer>().colo r.b - 0.04f); else GetComponent<SpriteRenderer>().colo r = new Color(1f, GetComponent<SpriteRenderer>().colo r.g + 0.04f, GetComponent<SpriteRenderer>().colo r.b - 0.04f); if (GetComponent<SpriteRenderer>().col or.g <= 1) StopCoroutine(OnHit()); if (GetComponent<SpriteRenderer>().col or.g <= 0) isHit = false; yield return new WaitForSeconds(0.02f); StartCoroutine(OnHit()); } } Код, который я креплю к энэми: using System.Collections; using System.Collections.Generic; using UnityEngine; public class Enemy : MonoBehaviour { private void OnCollisionEnter2D(Collision2D collision) { if (collision.gameObject.tag == "Player") { collision.gameObject.GetComponent<P layer>().RecountHP(-1); collision.gameObject.GetComponent<R igidbody2D>().AddForce(transform.up * 9f, ForceMode2D.Impulse); } } } |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как вы думаете, сколько людей поведутся на приложение, "измеряющую силу удара"? | Вадим Мошев | Свободное общение | 19 | 24.10.2018 16:34 |
Игра Command & Conquer Generals не работает | Мирсаидов Некбахт | Windows | 1 | 23.03.2018 17:27 |
Игра на Unity | Nik_022 | Фриланс | 0 | 24.09.2017 14:11 |
Математическое моделирование (скорость падения парашютиста в момент удара о землю) | lexayn | Помощь студентам | 1 | 26.03.2011 00:22 |
Не работает игра на канве | New man | Общие вопросы Delphi | 7 | 17.02.2011 22:09 |