Library(库):shader,内置脚本,缓存文件
setting(工程设定):声音等各种设定
Library(库):shader,内置脚本,缓存文件
setting(工程设定):声音等各种设定
场景是由游戏物体组成的,游戏物体是由组件组成的,
破解下载链接:http://www.ceeger.com/forum/read.php?tid=23396
左上角componet里有各种组件
折叠inspector面板里的各component可能导致显示上有影响
component方框打勾(类似CAD
Gizmos 缩放相机图标
左上角那5个按键对应QWERT
control s 保存场景
control n 新建场景 或左上角file
场景(scene)位于assets文件夹,可以新建一个scenes文件夹方便管理。新建场景后可以在project面板找到。
父类动子类动
子类动父类不动
1.创建墙:先创建cube Ctrl+d 复制一份副本
修改坐标轴x=1 按住Ctrl键移动
2.物理引擎 添加:在cube的AddComponent 添加Rigidbody
3.制作预制体 Create Folder (Prefabs),把上面制作的cube拖到文件夹就可以制作
控制相机移动:
代码:float h = Input.GetAxis("Horizontal");
测试: Debug.Log(h);
transform.Translate(new Vector(h,0,0)*Time.deltaTime); // 时间间隔
方向键右键:h=1;
方向键键:h=1;
start开始 初始化
Update更新 帧数越高越频繁
在实例化子弹时(未添加相机的坐标跟旋转),没在游戏视野内观察到球体。后面添加后,能够看到将相机实例化成了子弹球体。
预制体实例化
1.创建Main场景
2.创建地面
2.1 GameObject -3D- Plane
2.2 使用cube
游戏物体
1.物体间父子关系
2.物体由组件组成
2.1信息组件
2.2功能组件
local 局部坐标
global 世界坐标
常用
双击-聚焦
右键-旋转视野
中键-平移视野
透视-正交视野,含义、切换
Box Collider 碰撞组件
Mesh Renderer 显示组件
Scene - GameObject游戏物体 - 组件Component(Transform组件,位置旋转缩放属性)
控制相机的运动较合适的是通过键盘的上下左右来控制相机的上下左右。
依次点击“Edit”-“Project Settings”-“Input”,Inspector窗口会显示“InputManager”组件,它管理着输入的相关属性,其中:
Horizontal的Negative Button(负向按钮)是“left”,Alt Negative Button(备选的负向按钮)是“a”;
Horizontal的Positive Button(正向按钮)是“right”,ALT Positive Button(备选的正向按钮)是“d”;
Vertical的Negative Button(负向按钮)是“down”,ALT Negative Button(备选的负向按钮)是“s”;
Vertical的Positive Button(正向按钮)是“up”,ALT Positive Button(备选的正向按钮)是“w”。
利用这些预设好的按键绑定,可以方便控制相机的移动:
先得到键盘的输入信息
Input.GetAxis("Horizontal");
Input.GetAxis("Vertical");
再控制相机移动
transform.Translate(new Vector3(h,v,0));
SIKI老师说“Input.GetAxis("Horizontal");”返回一个Float类型的值,所以可以在这段代码面前定义一个float类型的“h”,这是一种简化方式。
所以:
void Update ()
{
float h =Input.GetAxis("Horizontal");
float v =Input.GetAxis("Vertical");
transform.Translate(new Vector3(h,v,0));
}
现在有个问题,就是相机移动得太快了。为什么呢?Input.GetAxis("Horizontal")的返回值不是-1到1吗?
的确,Input.GetAxis("Horizontal")的返回值(赋值给了h和v)是-1到1,但是这些代码是在Update里面执行的,Update的作用是使代码每帧执行一次,那么在60帧的游戏中,1秒里代码就被执行了约60次,也就是相机的速度是每秒约60米。
解决办法:
最简单的,就是乘上1/60,也就是约0.017:
transform.Translate(new Vector3(h,v,0):0.017);
但是,游戏帧数是不稳定的,与计算机性能有关,这个解决办法不完美。
另外的办法是使用Time.deltaTime(当前帧的时间间隔):
假设当前帧的时间间隔是t,游戏中的帧数是f,那么t=1/f秒。
无论帧数是多少,在Update方法中,h和v乘上t,还会是-1到1的值,这样相机移动速度更符合现实世界,操作更有手感。
这其实是一种游戏优化。