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

制作于2017年12月23日

价格 免费

Bullect

public float moveSpeed = 10;

transform.Translate(transform.right*moveSpeed*Time.deltaTime,Space.World);

transform.Translate(transform.right*moveeSpeed*Time,deltaTime,Space.World);

private float timeVal;

OnTriggerEnter 2D(Collider2D collision)

[展开全文]

控制图片的移动与切换

随方向改变图片朝向

法一 更改图片显示  素材里有顺序各方向图片

改渲染器中的sprite 就能改图片

在代码中拿到sprite的引用

在上面 拿到引用(定义一个变量,再用getcomponent)注意拿引用的特殊写法

拿到要切换的图片的引用 (0,8,16,24上右下左 记好顺序)搞一个数组 直接把这几张图拖到inspector 面板里的数组里

tips 在project 上端把素材排列由一行 改为两行可以显示图片

下面用输入监听变量的返回值 判断一下h/v的正负 if else if h< 0是zuo

图片切换就像变量赋值 此时的数组中括号内的值是拿到数组以后的顺序了

法二  根据不需要的z轴来控制旋转

[展开全文]

考试重点

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

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

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

 

遇到的问题是

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

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

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

[展开全文]

float h=input.getAxisRaw("Hirzontal");

//水平轴输入

float v=input.GetAxisRaw("Vertical");

//垂直轴输入

transform.Translate(vector3.right*h*Player_Movespeed*Time.delteTime,Space.World);

 

transform.Translate(Vector3.up*v*player_MoveSpeed,Space.World);

[展开全文]

GetAxis()与GetAxisRow();相似

Time.deltaTime:按照每秒移动

Space.World:世界坐标轴;

float h=Input.GetAxisRow("Horizontal")

transform.Translate(Vector3.Right*h )

//h返回值1到-1的float类型的小数;

float v=Input.GetAxisRow("Vertical")

transform.Translate(Vector3.up*h)

 

[展开全文]

FixedUpdate():固定物理帧;每帧都是执行固定的;

[展开全文]

显示大小不能是负数

显示大小是根据游戏给人的体验,进行不断调试而显示出来的

[展开全文]

public float moveSpeed = 3;  //移动速度

 


        transform.Translate(Vector3.right(横向X)*h(获取键盘方向)*moveSpeed(移动速度)*Time.deltaTime(帧率),Space.World(按照世界方向轴移动));


        transform.Translate(Vector3(纵向Y).up*v(获取键盘方向)*moveSpeed*Time.deltaTime(帧率),Space.World(按照世界方向轴移动));

[展开全文]

这样写会出现一个问题,比如玩家如果同时按上和左建,坦克会斜着移动,所以建议将transform.Translate(Vector3.up * v * moveSpeed * Time.deltaTime,Space.World);

transform.Translate(Vector3.up * h * moveSpeed * Time.deltaTime,Space.World);这两句写在if里面,且在交换精灵之后应该更合理,先换图再移动。

if (h < 0)//左边
        {
            sr.sprite = tankSprite[3];
            transform.Translate(Vector3.right * h * moveSpeed * Time.deltaTime, Space.World);
        }
        else if(h > 0)
        {
            sr.sprite = tankSprite[1];
            transform.Translate(Vector3.right * h * moveSpeed * Time.deltaTime, Space.World);
        }
        else if(v > 0)
        {
            sr.sprite = tankSprite[0];
            transform.Translate(Vector3.up * v * moveSpeed * Time.deltaTime, Space.World);
        }
        else if(v < 0)
        {
            sr.sprite = tankSprite[2];
            transform.Translate(Vector3.up * v * moveSpeed * Time.deltaTime, Space.World);
        }
        else
        {
            return;
        }

[展开全文]

图集:导进来的图片由各个小的元素图片组成,处理导进来的图集时首先调成2D andUI模式,然后mode调成Multiple模式。点击editor spite进行切割图集

 

[展开全文]

做不了动画了!

我不能多选啊???

怎么回事???

[展开全文]

固定物理帧

private void FixedUpdate(){添加刚体物体的所有指令}

[展开全文]

解决人物斜划的问题:

添加优先级先执行“V”在执行“H”

if (v!=0){return;}

渲染优先级

Sorting Layer

Order in Layer(数值)

[展开全文]

 

public Sprite[] tankSprite;

上右下左

 

[展开全文]