Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 关于ui按钮与条件的统一_C#_Unity3d - Fatal编程技术网

C# 关于ui按钮与条件的统一

C# 关于ui按钮与条件的统一,c#,unity3d,C#,Unity3d,unity UI按钮有条件时出现问题 尝试用按钮替换按键 void SlashAttack() { //我们通过查看动画师的信息来查找当前状态 AnimatorStateInfo stateInfo=anim.GetCurrentAnimatorStateInfo(0); bool load=stateInfo.IsName(“Player_斜杠”); //距离 if(Input.GetKeyDown(“p”)| Input.GetKeyDown(KeyCode.Z)) { 动画设置触发器(“

unity UI按钮有条件时出现问题

尝试用按钮替换按键

void SlashAttack()
{
//我们通过查看动画师的信息来查找当前状态
AnimatorStateInfo stateInfo=anim.GetCurrentAnimatorStateInfo(0);
bool load=stateInfo.IsName(“Player_斜杠”);
//距离
if(Input.GetKeyDown(“p”)| Input.GetKeyDown(KeyCode.Z))
{ 
动画设置触发器(“加载”);
aura.AuraStart();
} 
else if(Input.GetKeyUp(“p”)| Input.GetKeyUp(KeyCode.Z))
{ 
动画设置触发(“攻击”);
if(aura.IsLoaded())
{
//这是联合国最重要的原则
//从一个地方到另一个地方
浮动角度=Mathf.Atan2(anim.GetFloat(“movY”)、anim.GetFloat(“movX”))*Mathf.Rad2Deg;
GameObject slashObj=实例化(slashPrefab,transform.position,Quaternion.AngleAxis(angle,Vector3.forward));
Slash Slash=slashObj.GetComponent();
slash.mov.x=anim.GetFloat(“movX”);
slash.mov.y=anim.GetFloat(“movY”);
}
aura.AuraStop();
启动例行程序(启用(0.4f)之后的移动);
} 
//米恩特拉斯·卡加莫斯运动酒店
如果(装载)
{ 
movePrevent=true;
}
}

首先将功能分离为不同的方法,例如:

public void OnKeyDown()
{
动画设置触发器(“加载”);
aura.AuraStart();
}
public void OnKeyUp()
{
动画设置触发(“攻击”);
if(aura.IsLoaded())
{
//这是联合国最重要的原则
//从一个地方到另一个地方
浮动角度=Mathf.Atan2(anim.GetFloat(“movY”)、anim.GetFloat(“movX”))*Mathf.Rad2Deg;
GameObject slashObj=实例化(slashPrefab,transform.position,Quaternion.AngleAxis(angle,Vector3.forward));
Slash Slash=slashObj.GetComponent();
slash.mov.x=anim.GetFloat(“movX”);
slash.mov.y=anim.GetFloat(“movY”);
}
aura.AuraStop();
启动例行程序(启用(0.4f)之后的移动);
}
void SlashAttack()
{
//我们通过查看动画师的信息来查找当前状态
AnimatorStateInfo stateInfo=anim.GetCurrentAnimatorStateInfo(0);
bool load=stateInfo.IsName(“Player_斜杠”);
//距离
if(Input.GetKeyDown(“p”)| Input.GetKeyDown(KeyCode.Z))
{ 
OnKeyDown();
} 
else if(Input.GetKeyUp(“p”)| Input.GetKeyUp(KeyCode.Z))
{ 
OnKeyUp();
} 
//米恩特拉斯·卡加莫斯运动酒店
如果(装载)
{ 
movePrevent=true;
}
}
当我们公开这些方法时,您现在可以将它们链接到UI。因为标准的unity按钮只支持单击,并且您的代码取决于按钮的释放,所以您可以使用EventTrigger组件来显示要链接到的事件


快速响应:您不能这样做,因为
UI.Button
没有任何回调,例如
按钮关闭
按钮打开


如果您确实不想更改当前的代码结构,您可以使用和编写自己的组件,例如

使用UnityEngine;
使用UnityEngine.EventSystems;
公共类示例:MonoBehavior、IPointerDownHandler、IPointerUpHandler
{
公共厕所;
公众利益上升;
//检测当前对游戏对象(附加脚本的对象)的点击
POINTERDOWN上的公共无效(PointerEventData PointerEventData)
{
isDown=真;
}
//检测单击是否不再注册
POINTERUP上的公共无效(PointerEventData PointerEventData)
{
isUp=true;
}
//在最新更新中重置两者
私有更新()
{
isDown=假;
isUp=false;
}
}
把这个系在你的钮扣上

而不是根据组件在代码引用中

公共示例按钮;
void SlashAttack()
{
// ...
//距离
if(Input.GetKeyDown(“p”)| Input.GetKeyDown(KeyCode.Z)| PButton.isDown)
{ 
// ...
} 
else if(Input.GetKeyUp(“p”)| Input.GetKeyUp(KeyCode.Z)| PButton.isUp)
{ 
// ...
} 
// ...
}
注意

确保场景中存在
事件系统
,以允许指针检测。对于非UI游戏对象上的指针检测,请确保相机上连接了
PhysicRayCaster


问题是什么?我如何用按钮替换“p”键?在不影响我的条件的情况下禁用将功能移动到单独的方法,一旦执行了NullReferenceException:Object reference未设置为Object Player的实例。SlashAttack()(位于Assets/Scripts/Player.cs:126)Player.Update()(位于Assets/Scripts/Player.cs:56)您是否引用了
PButton
中的某个内容?好的,您应该尝试这样做;)只需将相应的组件拖放到Inspector中的字段中,您是否介意告诉发生这种情况的确切行(代码而不是数字)好的,我有您的类示例,我的ui按钮和此通道中的实现存在问题“if(Input.GetKeyDown(“p”)| Input.GetKeyDown(KeyCode.Z)| PButton.isDown)”