25995人加入学习
(149人评价)
Unity2D 初级案例 - 坦克大战(Unity2017.1)

制作于2017年12月23日

价格 免费

2D游戏旋转方向与3D游戏方向制作相反,

2D制作我们看到的视野是从屏幕中向外看的视角

2D按旋转按逆时针方向,3D

[展开全文]

欧拉角转四元数的api

Quaternion.EulerAngles()旧版本

Quaternion.EulerAngles()新版本

子弹产生的角度:当前坦克的角度+子弹应该旋转的角度

[展开全文]
  • 图片与图集的区别
  • 图集:
  • 单张图片:
  • 切割图集:
  • 第二个选项,以固定大小的格切割 

 

[展开全文]

发生碰撞检测的两个必要条件:

两方都要有刚体

其中一方要有刚体,最好是运动的一方(因为刚体如果经常不运动就会发生休眠,这就不会发生碰撞检测了)

 

2D和3D游戏请使用对应不同的碰撞器(刚体也是)

 

update方法每一帧占用的时间是不同的,因为会受到系统、电脑性能的影响,所以方法调用的时机间隔就会不均匀.

但是fixedUpdate则是每隔一定周期执行一次

 

产生抖动的原因:

因为坦克加上了刚体,所以有了受力,再加上在update方法调用的时机不均匀,所以这样受力也就不均匀,从而产生了抖动。

 

 

首先说结论:物理模拟放在FixedUpdate中。

   原因首先得说FixedUpdate和Update的区别,FixedUpdate是每隔一定的周期执行一次,比如每隔1秒执行30次;Update是每帧之前执行一次,比如一般的FPS为30,也就是1秒有30帧,那么也是1秒执行30次。但是每隔一定的周期执行与系统性能无关,无论系统怎么样,都会1秒执行30次。而帧与系统性能有关,通常受到渲染的影响。比如同样一款游戏,性能好的电脑的FPS是30,差一点的可能只有10。这样Update就不是固定的1秒30次了。

  那么为什么物理模拟要放在FixedUpdate中呢?举个例子,A和B相距30米,一个人从A移动到B,在Unity中可能是这样实现的,在Update/FixedUpdate中写个位移函数,每次移动1米。那么对于在FixedUpdate中写,不论电脑怎么样,1秒内执行了30次,这个人从A移动到了B。但是对于写在Update中的情况,如果电脑好,FPS为30,1秒内执行了30次,这个人同样从A移动到了B,但是电脑性能差,FPS为10,1秒执行了10次,这个人只移动了10米。

   当然上面只是个例子,说的专业一点就是Update会因为系统性能产生抖动的现象

[展开全文]

子弟产生的角度:当前坦克的角度+子弹应该旋转的角度

这里当前坦克的角度就是0吧,所以直接Euler子弹的旋转角度也是可以的吧?

[展开全文]

坦克朝着两个物体之间仍会发生抖动,可以解决吗

[展开全文]

移动,沿X轴,依世界坐标系移动

transform.translate(transform.right*speed*time.delteTime,Space.World)

参数2坐标系:如果第一个参数是自身参数的话,必须用世界坐标系,否则会移动出错。

[展开全文]

子弹角度,转成4元数变量

  • Quaternion.Euler(transform.eulerAngles+子弹的欧拉角度)
[展开全文]

设置,渲染层级

2个设置,

  • Sorting Layer
  • ORder in Layer,值大上层
[展开全文]

2d图片导入 ================

  • Texture Type ,调成 Sprite 2d and UI
  • 如果是多张小图汇成大图,调Sprite Mode,Mutilupt
  • 切割图片,Sprite Editor,Slice切方式
  •  
[展开全文]

简易人工智能编写

攻击:删除键盘输入,让其在有限时间内自动重复。

移动:

[展开全文]

Quaternion.Eulerangles()欧拉角转四元数的API (UNITY旋转栏是欧拉角的度数) 

eulerangles属于vector3类别

 

[展开全文]

GetkeyDown是(KeyCode.     )是键盘输入 

 

[展开全文]

新建 2D Tank 项目

导入package文件(zhi'jie't

 

[展开全文]

 

定义坦克的攻击方法

按下空格生成子弹

[展开全文]

给hv设置一个优先级

封装方法

sortinglayer 大层级层级越大越后渲染。覆盖掉别的物体

orderlayer同一层级的渲染顺序

 

[展开全文]