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

制作于2017年12月23日

价格 免费

设置一个优先级解决上节课留下来的问题

[展开全文]

场景搭建(就是调整一下相机、size可随意、比例可随意、相机颜色)

  2D模式下Texture Type应该调为2DandUI

 

[展开全文]

老师讲的生成敌人的思路和以前玩的坦克大战敌人生成的方法不一样。

首先一关最多生成20个敌人,场景中最多有5个敌人。

[展开全文]

按下wasd键时,改变坦克旋转角度,不要改变坦克图片;让实例化出的子弹旋转角度等于坦克的旋转角度,这方法比老师教的简单一些。

[展开全文]

考试重点

碰撞检测:发生碰撞的两方都要有碰撞体,其中一方要有刚体,还有最好是运动的一方(因为刚体长期不用就会休眠)

碰撞检测有2D和3D的区别 应该对应起来

没有加Boxcllide2D就可以让玩家穿过

 

遇到的问题是

1玩家会斜着走,玩家体验不理想(改进的方法是player的rigid body上的constriaints的z 轴选上)

2还有碰到别的物体时会有抖动(是因为加上刚体之后在Update中每一帧的受力不同,但是在fixUpdate中就可以每一帧都相同)(改进方法是Player脚本用一个生命周期函数改进FixUpdate也叫固定物理针,然后将所有的方法放到固定物理针中就可以了,就不会发生都懂的情况了,但是也只是解决了大部分问题而已,有些小的问题还要用其他方法解决

玩家按键盘的时候可能会同时按下几个键导致游戏人物斜着z

[展开全文]

Quaternion.Euler(); Euler转换为四元数的方法。

transform.EulerAngles,可以获得当前角色的Euler角度。

EulerAngles是Vector3

[展开全文]

Sorting Layer 大层级,决定了游戏物体的渲染层级。

Order in Layer 层级的顺序,决定了每个大层级下的层级顺序,数值越大,越后渲染,就是不会被

[展开全文]

Input.GetAxisRaw(); 比 Input.GetAxis():

具体的区别不清楚,但是在测试时无意间发现,前者比后者接收的按键的速度更快的样子,在按键时图片的切换功能,使用了后者的话,明显感觉到了延迟感。

原来前者是返回的只有0或1,-1,而后者是包含之间的小数点。

[展开全文]

面板上的角度为欧拉角度:应该转为四元角度

[展开全文]

碰撞:

1.两个物体都加碰撞器

2.动的物体加上刚体

Order in Layer越大越后渲染

[展开全文]

碰撞添加,两个关键组件

boxcollider2d 碰撞检测

rigidbody2d  二维刚体

 

 

固定物理桢(防抖,按照每帧运行,)

 private void FixedUpdate()

 

[展开全文]

定义一个精灵类型的数组:

private SpriteRenderer sr;
 public Sprite[] tankSprites;

 

精灵

 

if (h<0)
        {
            sr.sprite = tankSprites[3];
        }else if(h>0 )
        {
            sr.sprite = tankSprites[1];
        }  
 if (v < 0)
        {
            sr.sprite = tankSprites[2];
        }else if (v>0)
        {
            sr.sprite = tankSprites[0];
        }

 

[展开全文]

引用游戏组件的时候有一定要在star方法里面获取它,不然会导致空zhejia

[展开全文]

使用自身方向 第二个参数要使用space.world

[展开全文]

关于护盾特效,要想启用一段时间后取消,需要先将其关联与一个游戏物体形成父子关系,再将关联后的护盾特效拉进特效引用之中,而非单独的护盾预制体,否则其特效会一直显示。

[展开全文]

Destroy(collisio.gameObject);为销毁掉接触的物体,Destroy(gameObject);为销毁掉物体自身。

[展开全文]

x轴:vector3.right

y轴:vector3.up

float h = Input.GetAxis("Horizontal");
transform.Translate(Vector3.right * h * moveSpeed * Time.deltaTime, Space.World);
//三维向量,方向×按键输入×移动速度×按时间运动(每秒10米而不是每桢10米),空间为整个空间。


float v = Input.GetAxis("Vertical");
transform.Translate(Vector3.up * v * moveSpeed * Time.deltaTime, Space.World);
//三维向量,方向×按键输入×移动速度×按时间运动,空间为整个空间。

 

[展开全文]