持续更新中,最近更新:2022-4-14
1.获取其他类的公共变量比如我在GameObject A上挂载了脚本scriptA,编写scriptB时想要调用scriptA中的变量(此处举例为 public int num)。
那么我在B中可以先定义一个public GameObject objA;
然后在方法中通过 int dataA =objA.getComponent
public static float GetAxis(string axisName);
例如:
float moveX=Input.GetAxisRaw(“Horizontal”);//水平方向A:-1,D:1,无输入为0
axisName可在引擎的Edit-Project Settings-Input Manager中查看
framework部署地址
选择开发人员工具包,下面的中文(简体)那些都是拓展语言包,没有开发人员工具包无法发挥作用
vscode也会在这里提示你(此为正常运行),如果缺失会显示Attempted to update project that is not loaded,也就是说加载framework失败,不会出现unity的相关代码补全
网上一般是选择timescale设置为0,但是update内的方法依然会做出响应。比如角色移动时贴图状态会发生变化,仅是timescale=0的话,输入移动键虽然不会使玩家位移,但仍会使其贴图进行相应变化。这里谈谈我自己的思路。
timescale=0,同时断开玩家的输入。玩家影响游戏的方式均是通过输入,因此断开输入就保证了游戏不再受外界影响,timescale=0也使游戏自身的时间停止流动,实现了所谓的暂停。
那么我们就可以将所有的键盘输入事件放在一个类中,通过具体场景实现按键的不同功能,以此能进行更多拓展,比如我打开一个菜单,那么这时就可以断开地图场景的键盘事件,连接菜单场景的键盘事件,就像wasd选择选项而不再是移动
实现的方式有很多,我举个例子
public int mode = 0;//根据场景切换
void Update()
{
switch(mode)
{
case 1://键盘按下的键
{
if (Input.GetKeyDown(KeyCode.W))
Debug.Log("W");
if (Input.GetKeyDown(KeyCode.A))
Debug.Log("A");
if (Input.GetKeyDown(KeyCode.S))
Debug.Log("S");
if (Input.GetKeyDown(KeyCode.D))
Debug.Log("D");
break;
}
case 2://二维平面场景的方向
{
if (Input.GetKeyDown(KeyCode.W))
Debug.Log("+y");
if (Input.GetKeyDown(KeyCode.A))
Debug.Log("-x");
if (Input.GetKeyDown(KeyCode.S))
Debug.Log("-y");
if (Input.GetKeyDown(KeyCode.D))
Debug.Log("+x");
break;
}
}
}
如果所有键盘事件均在此类中,则case=0相当于断开玩家的键盘输入途径
5.按钮的键盘选中在菜单中通过wasd或上下左右(受项目设置的输入管理器影响)选择按钮(或是其他可选目标)
unity按钮自带导航
可视化之后能在场景中看到其关系
导航通过水平和垂直方向进行选择,explicit则是自定义上下左右的目标
一般得先进入选中状态才能通过键盘进行切换,这时我们可以给想要默认选中的游戏对象添上这句代码
你还可以通过给button挂上event trigger组件来添加选中事件



