C# 如何在unity C中从ui按钮调用键代码#

C# 如何在unity C中从ui按钮调用键代码#,c#,unity3d,user-interface,uibutton,keycode,C#,Unity3d,User Interface,Uibutton,Keycode,这是剧本。。在起始行中,您可以看到keycodes的用法。我想为android添加UI按钮。当用户点击该按钮时,它将充当Keycode.A或我想要但不想更改脚本的任何Keycode。有解决办法吗?我完全是初学者,我不太懂这段代码,所以不想修改它。我是用免费的2D游戏套件买的,里面的角色艾伦用电脑控制移动。我所要做的就是将角色控件从pc更改为ui按钮。请帮助,如果我必须改变脚本,我会得到很多我不能处理的错误,所以请帮助 using UnityEngine; using UnityEngine.UI

这是剧本。。在起始行中,您可以看到keycodes的用法。我想为android添加UI按钮。当用户点击该按钮时,它将充当Keycode.A或我想要但不想更改脚本的任何Keycode。有解决办法吗?我完全是初学者,我不太懂这段代码,所以不想修改它。我是用免费的2D游戏套件买的,里面的角色艾伦用电脑控制移动。我所要做的就是将角色控件从pc更改为ui按钮。请帮助,如果我必须改变脚本,我会得到很多我不能处理的错误,所以请帮助

using UnityEngine;
using UnityEngine.UIElements;

namespace Gamekit2D
{
    public class PlayerInput : InputComponent, IDataPersister
    {
        public static PlayerInput Instance
        {
            get { return s_Instance; }
        }

        protected static PlayerInput s_Instance;


        public bool HaveControl { get { return m_HaveControl; } }

        public InputButton Pause = new InputButton(KeyCode.Escape, XboxControllerButtons.Menu);
        public InputButton Interact = new InputButton(KeyCode.E, XboxControllerButtons.Y);
        public InputButton MeleeAttack = new InputButton(KeyCode.K, XboxControllerButtons.X);
        public InputButton RangedAttack = new InputButton(KeyCode.O, XboxControllerButtons.B);
        public InputButton Jump = new InputButton(KeyCode.Space, XboxControllerButtons.A);
        public InputAxis Horizontal = new InputAxis(KeyCode.D, KeyCode.A, XboxControllerAxes.LeftstickHorizontal);
        public InputAxis Vertical = new InputAxis(KeyCode.W, KeyCode.S, XboxControllerAxes.LeftstickVertical);
        [HideInInspector]
        public DataSettings dataSettings;

        protected bool m_HaveControl = true;

        protected bool m_DebugMenuIsOpen = false;

        void Awake ()
        {
            if (s_Instance == null)
                s_Instance = this;
            else
                throw new UnityException("There cannot be more than one PlayerInput script.  The instances are " + s_Instance.name + " and " + name + ".");
        }
        void OnEnable()
        {
            if (s_Instance == null)
                s_Instance = this;
            else if(s_Instance != this)
                throw new UnityException("There cannot be more than one PlayerInput script.  The instances are " + s_Instance.name + " and " + name + ".");

            PersistentDataManager.RegisterPersister(this);
        }

        void OnDisable()
        {
            PersistentDataManager.UnregisterPersister(this);

            s_Instance = null;
        }

        protected override void GetInputs(bool fixedUpdateHappened)
        {
            Pause.Get(fixedUpdateHappened, inputType);
            Interact.Get(fixedUpdateHappened, inputType);
            MeleeAttack.Get(fixedUpdateHappened, inputType);
            RangedAttack.Get(fixedUpdateHappened, inputType);
            Jump.Get(fixedUpdateHappened, inputType);
            Horizontal.Get(inputType);
            Vertical.Get(inputType);

            if (Input.GetKeyDown(KeyCode.F12))
            {
                m_DebugMenuIsOpen = !m_DebugMenuIsOpen;
            }
        }

        public override void GainControl()
        {
            m_HaveControl = true;

            GainControl(Pause);
            GainControl(Interact);
            GainControl(MeleeAttack);
            GainControl(RangedAttack);
            GainControl(Jump);
            GainControl(Horizontal);
            GainControl(Vertical);
        }

        public override void ReleaseControl(bool resetValues = true)
        {
            m_HaveControl = false;

            ReleaseControl(Pause, resetValues);
            ReleaseControl(Interact, resetValues);
            ReleaseControl(MeleeAttack, resetValues);
            ReleaseControl(RangedAttack, resetValues);
            ReleaseControl(Jump, resetValues);
            ReleaseControl(Horizontal, resetValues);
            ReleaseControl(Vertical, resetValues);
        }

        public void DisableMeleeAttacking()
        {
            MeleeAttack.Disable();
        }

        public void EnableMeleeAttacking()
        {
            MeleeAttack.Enable();
        }

        public void DisableRangedAttacking()
        {
            RangedAttack.Disable();
        }

        public void EnableRangedAttacking()
        {
            RangedAttack.Enable();
        }

        public DataSettings GetDataSettings()
        {
            return dataSettings;
        }

        public void SetDataSettings(string dataTag, DataSettings.PersistenceType persistenceType)
        {
            dataSettings.dataTag = dataTag;
            dataSettings.persistenceType = persistenceType;
        }

        public Data SaveData()
        {
            return new Data<bool, bool>(MeleeAttack.Enabled, RangedAttack.Enabled);
        }

        public void LoadData(Data data)
        {
            Data<bool, bool> playerInputData = (Data<bool, bool>)data;

            if (playerInputData.value0)
                MeleeAttack.Enable();
            else
                MeleeAttack.Disable();

            if (playerInputData.value1)
                RangedAttack.Enable();
            else
                RangedAttack.Disable();
        }

        void OnGUI()
        {
            if (m_DebugMenuIsOpen)
            {
                const float height = 100;

                GUILayout.BeginArea(new Rect(30, Screen.height - height, 200, height));

                GUILayout.BeginVertical("box");
                GUILayout.Label("Press F12 to close");

                bool meleeAttackEnabled = GUILayout.Toggle(MeleeAttack.Enabled, "Enable Melee Attack");
                bool rangeAttackEnabled = GUILayout.Toggle(RangedAttack.Enabled, "Enable Range Attack");

                if (meleeAttackEnabled != MeleeAttack.Enabled)
                {
                    if (meleeAttackEnabled)
                        MeleeAttack.Enable();
                    else
                        MeleeAttack.Disable();
                }

                if (rangeAttackEnabled != RangedAttack.Enabled)
                {
                    if (rangeAttackEnabled)
                        RangedAttack.Enable();
                    else
                        RangedAttack.Disable();
                }
                GUILayout.EndVertical();
                GUILayout.EndArea();
            }
        }
    }
}
使用UnityEngine;
使用UnityEngine.ui元素;
命名空间Gamekit2D
{
公共类PlayerInput:InputComponent,IDataperMaster
{
公共静态PlayerInput实例
{
获取{return s_Instance;}
}
受保护的静态PlayerInput s_实例;
公共bool HaveControl{get{return m_HaveControl;}}
公共InputButton暂停=新的InputButton(KeyCode.Escape,XboxControllerButtons.Menu);
public InputButton Interact=新的InputButton(KeyCode.E,XboxControllerButtons.Y);
public InputButton MeleeAttack=新的InputButton(KeyCode.K,XboxControllerButtons.X);
公共InputButton RangeAttack=新的InputButton(KeyCode.O,XboxControllerButtons.B);
公共InputButton跳转=新的InputButton(KeyCode.Space,XboxControllerButtons.A);
公共输入轴水平=新输入轴(KeyCode.D、KeyCode.A、XboxControllerAxes.LeftstickHorizontal);
公共输入轴垂直=新输入轴(KeyCode.W、KeyCode.S、XboxControllerAxes.LeftstickVertical);
[hideininstecpt]
公共数据设置数据设置;
受保护的bool m_HaveControl=true;
受保护的bool m_DebugMenuIsOpen=false;
无效唤醒()
{
如果(s_实例==null)
s_实例=此;
其他的
抛出新的UnityException(“不能有多个PlayerInput脚本。实例为“+s_Instance.name+”和“+name+”);
}
void OnEnable()
{
如果(s_实例==null)
s_实例=此;
否则如果(s_实例!=此)
抛出新的UnityException(“不能有多个PlayerInput脚本。实例为“+s_Instance.name+”和“+name+”);
RegisterPersister(这个);
}
无效可禁用()
{
PersistentDataManager.UnregisterPersister(此);
s_Instance=null;
}
受保护的覆盖无效GetInputs(布尔修复更新发生)
{
Pause.Get(FixedUpdateOccessed,inputType);
获取(FixedUpdateOccessed,inputType);
MeleeAttack.Get(FixedUpdateOccessed,inputType);
RangedAttack.Get(fixedUpdateOccessed,inputType);
Jump.Get(FixedUpdateOccessed,inputType);
水平。获取(输入类型);
垂直。获取(输入类型);
if(Input.GetKeyDown(KeyCode.F12))
{
m_DebugMenuIsOpen=!m_DebugMenuIsOpen;
}
}
公共覆盖无效增益控制()
{
m_HaveControl=真;
增益控制(暂停);
增益控制(交互);
增益控制(MeleeAttack);
增益控制(RangedAttack);
增益控制(跳跃);
增益控制(水平);
增益控制(垂直);
}
公共覆盖无效释放控制(bool resetValues=true)
{
m_HaveControl=假;
释放控制(暂停、重置值);
释放控制(交互、重置值);
释放控制(MeleeAttack,重置值);
释放控制(RangedAttack、resetValues);
释放控制(跳转、重置值);
释放控制(水平、重置值);
释放控制(垂直、重置值);
}
公共无效禁用处理()
{
MeleeAttack.Disable();
}
public void EnableMeleeAttacking()
{
MeleeAttack.Enable();
}
public void disableRangeAttacking()
{
RangedAttack.Disable();
}
public void enableRangeAttacking()
{
RangedAttack.Enable();
}
公共数据设置GetDataSettings()
{
返回数据设置;
}
public void SetDataSettings(字符串dataTag,DataSettings.PersistenceType PersistenceType)
{
dataSettings.dataTag=dataTag;
dataSettings.persistenceType=persistenceType;
}
公共数据保存数据()
{
返回新数据(MeleeAttack.Enabled、RangedAttack.Enabled);
}
公共void加载数据(数据)
{
数据playerInputData=(数据)数据;
如果(playerInputData.value0)
MeleeAttack.Enable();
其他的
MeleeAttack.Disable();
如果(playerInputData.value1)
RangedAttack.Enable();
其他的
RangedAttack.Disable();
}
void OnGUI()
{
如果(m_DebugMenuIsOpen)
{
常数浮动高度=100;
BeginArea(新Rect(30,Screen.height-height,200,height));
GUILayout.Beginterial(“盒子”);
GUILayout.Label(“按F12键关闭”);
bool meleeAttackEnabled=GUILayout.Toggle(MeleeAttack.Enabled,“启用近战攻击”);
bool rangeAttackEnabled=GUILayout.Toggle(RangedAttack.Enabled,“启用远程攻击”);
如果(meleeAttackEnabled!=MeleeAttack.Enabled)
{
如果(MeleeAttacked)
MeleeAttack.Enable();