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

制作于2017年12月23日

价格 免费

水平=h   Horizontal

垂直=v   Vertical

public float moveSpeed=3;    //声明一个移速,默认=3

private SpriteRenderer sr;   //声明一个私有的SpriteRenderer 常量为“sr”

private void Awake(){
    sr=GetComponent<SpriteRenderer>();
}

 

 

[展开全文]

一、背景设置:

camare-background——黑色

比例——5:4

size——8.5

以上数值可以自己调试

Windows-console

二、素材处理:

Texture Type——调为Sprite(2D and UI)

Sprite Mode:单张图single,图集multiple

三、切割图片

sprite editor-slice-Type{自动、以格子尺寸切割,以格子行量切割}

小窍门:一开始调节方格的大小到合适的尺寸,随后选择以格子尺寸切割

四、保存场景,整理文件夹

 

[展开全文]

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

[展开全文]

动画制作小技巧:

选中project面板中需要做成动画的全部图片,然后拖入Hiearchy面板,会自动生成动画(三角形图标的是动画,四个小方块的是动画控制器)

[展开全文]

碰撞器的生成

二者都要有碰撞器

其中一方(运动的一方)要有缸体

fixedupdate 物理针

是每一秒受力固定

缸体碰撞受力使物体发生抖动,添加物理针处理

未加物理针

void Update ()
    {
        float h = Input.GetAxisRaw("Horizontal");
        transform.Translate(Vector3.right * h * movespeed * Time.deltaTime, Space.World);
        if (h < 0)
        {
            sr.sprite = tanksprite[3];
        }
        else if (h > 0)
        {
            sr.sprite = tanksprite[1];
        }
        float v = Input.GetAxisRaw("Vertical");
        transform.Translate(Vector3.up * v * movespeed * Time.deltaTime, Space.World);
        if (v < 0)
        {
            sr.sprite = tanksprite[2];
        }
        else if (v > 0)
        {
            sr.sprite = tanksprite[0];
        }

    }

添加物理针

  private void FixedUpdate()
    {
        float h = Input.GetAxisRaw("Horizontal");
        transform.Translate(Vector3.right * h * movespeed * Time.fixedDeltaTime, Space.World);
        if (h < 0)
        {
            sr.sprite = tanksprite[3];
        }
        else if (h > 0)
        {
            sr.sprite = tanksprite[1];
        }
        float v = Input.GetAxisRaw("Vertical");
        transform.Translate(Vector3.up * v * movespeed * Time.fixedDeltaTime, Space.World);
        if (v < 0)
        {
            sr.sprite = tanksprite[2];
        }
        else if (v > 0)
        {
            sr.sprite = tanksprite[0];
        }
    }

[展开全文]

v、h的控设置优先级,如果没有输入就return

先处理V纵向输入,如果有输入的话(!=0),就不再处理下面的H横向输入,直接return掉

[展开全文]

哈哈哈哈,打了个喷嚏!!!!!!!!!!!!!!!!!!!!!!!!!!1

[展开全文]

 

//封装方法
private void move()
{
//这里面都是move的方法   直接调用就可以

}
[展开全文]

quaternion.euler(tranform.eulerangles+bullerangles)

euler欧拉角转四元数 

[展开全文]

2d是3d的水平镜像,所有角度都是反的

[展开全文]

为什么刚体要添加在运动的物体上面
为什么触发器要双方都带有触发器的才能正常工作
translate中的世界坐标系与self坐标系的区别

[展开全文]

single 处理单张图片

multipie 处理多张小图

[展开全文]

碰撞检测

1 添加碰撞器,运动的一方最好有刚体(必须有一方有)   经常性不运动时刚体会休眠

2. 2D与3D 碰撞器不一样 

3。最好直接在预制体上操作

4 添加刚体 2D给玩家,记得把重力调为0

把所有map预制体都加上碰撞器(草不用)  小技巧 全选后一起加

穿模问题 碰到map时方向乱套(受到旋转力)  将player刚体中的constraints  勾选Z轴

沿墙走时抖动(帧时间不同问题)  在玩家代码中 添加FixedUpdate(固定物理帧) 把所有有关移动的方法移到里面

并将Tima.deltaTime 改为Tima.fixedDeltaTime注意D大写

[展开全文]

移动优先级 两个不同轴的方向键键一起按变成斜着移动

分开两个输入与运动 先执行V(Y) 再执行h(X)加一个判断代码

谁放前面谁优先

先把目前已经写好的控制移动代码们封装为一个(Move)方法 让FixedUpdate里更加整洁,还可以注释一下

2D 渲染层级 图层  特效>玩家 子弹》河流

sorting 大层级 (default) order 小层级  数值越大越在上面  特效 /草/子弹order设为1

添加子弹素材 拖入 Bullet size 331

[展开全文]

方法一:

通过素材的图片控制Player的方向转动

Player

private SptiteRenderer srl

Update()

 

 

[展开全文]

坦克的攻击方法 子弹

Attack()  检测空格下的按下  实例化*注意方法应用 Instantiate(子弹的变量,坦克位置,旋转角度(无旋转))一个子弹

拿到子弹预制体的引用(预制体的)

 

[展开全文]

授课教师

SiKi学院老师

课程特色

图文(1)
视频(32)
下载资料(1)