繁体   English   中英

Unity 2D - 为什么按钮不起作用?

[英]Unity 2D - Why does button not work?

OP 想通了,缺少EventSystem对象

我用 Unity 制作了一个跑步游戏。 但是我遇到了一个大问题。 我做了一个按钮来跳转并添加onclick事件,但是,它不起作用。 我的 Runner 不会在地上跳跃。 请帮助我!

在此处输入图片说明

按钮和按钮检查器。

在此处输入图片说明

跑步检查员。

在此处输入图片说明

OnClick 检查器。

这是 Runner 的 C# 脚本:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

    public class CsRunner : MonoBehaviour
    {
        public Vector2 jumpVelocity;
        public Text _coin;
        int coinCount = 0, heartCount, healthCount = 0, grimReaperCount = 0, coupleCount = 0;
        bool isJump;
        public Button _jump;

        bool collision_box;

        // Use this for initialization
        void Start()
        {
            _jump.onClick.AddListener(Jump);
            heartCount = 3;
        }

        // Update is called once per frame
        void Update()
        {
            _coin.text = ""+coinCount;
        }

        void OnTriggerEnter2D(Collider2D coll)
        {
            if (coll.transform.tag == "Enemy")
            {
                if (heartCount > 1)
                    Destroy(GameObject.Find("heart ("+(heartCount-1)+")"));

                else if (heartCount == 1)
                    Destroy(GameObject.Find("heart"));

                heartCount--;
            }

            if (coll.transform.tag == "HealthBuff")
            {
                Destroy(coll.gameObject);
                healthCount++;
            }

            if (coll.transform.tag == "GrimReaperBuff")
            {
                Destroy(coll.gameObject);
                grimReaperCount++;
            }

            if (coll.transform.tag == "CoupleBuff")
            {
                Destroy(coll.gameObject);
                coupleCount++;
            }

            if (coll.transform.tag == "FieldCoin")
            {
                Destroy(coll.gameObject);
                coinCount++;
            }
        }


        void OnCollisionEnter2D(Collision2D coll)
        {
            if (coll.transform.tag == "Ground")
            {
                GetComponent<Animator>().enabled = true;
                collision_box = true;
                isJump = false;
            }
        }

        void OnCollisionStay2D(Collision2D coll)
        {
            if (coll.transform.tag == "Ground")
            {
                GetComponent<Animator>().enabled = true;
                collision_box = true;
                isJump = false;
            }
        }

        void OnCollisionExit2D(Collision2D coll)
        {
            if (coll.transform.tag == "Ground")
            {
                GetComponent<Animator>().enabled = false;
                collision_box = false;
                isJump = true;
            }
        }

        public void Jump()
        {
            Debug.Log("JUMP!!");

            if (isJump)
            {
                isJump = false;
                transform.GetComponent<Rigidbody2D>().AddForce(jumpVelocity / 2, ForceMode2D.Impulse);
            }

            if (collision_box)
            {
                isJump = true;
                transform.GetComponent<Rigidbody2D>().AddForce(jumpVelocity, ForceMode2D.Impulse);
            }

            else
            {
                GetComponent<Animator>().SetTrigger("Run");
            }
        }
    }

谢谢!

我解决问题!! Canvas 对象没有 EventSystem!! 谢谢大家:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM