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

制作于2017年12月23日

价格 免费

图集和单一图片

图集可以裁剪成多个图片使用

 

导入的素材的Texture Type要调成Sprite(2D and UI)

图集还要多把Sprite Mode调成Multiple

用Sprite Editor切割图集

Slice 

[展开全文]

shift选中多张图片拖入场景,可以直接创建为Animation

会生成一个Animation和一个Animator

选中文件后F2重命名文件

 

[展开全文]

 private void FixedUpdate()
    {
        float v = Input.GetAxisRaw("Vertical");
        float h = Input.GetAxisRaw("Horizontal");

        if (Mathf.Abs(v) > 0.0f)
        {
            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];
            }
        }
        else if (Mathf.Abs(h) > 0.0f)
        {
            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];
            }
        }
    }

[展开全文]

SpriteRenderer中

Sorting Layer是渲染的大层级

Order in Layer 是大层级下的小层级渲染顺序

Order in Layer越大,越晚渲染,也就是越不会被覆盖

[展开全文]

GetkeyDown是(KeyCode.     )是键盘输入 

 

[展开全文]

敌人AI的编写 重点

1.删掉 isdefended 和effect相关的 没给拖引用会报空

CD 大于等于3,attack删掉空格

move方法 利用v与h的值 随机数,删掉键盘输入

再弄一个计时器 private float timeValChangeDirection;

在外面 private float v;

private float h;

在move方法里写   计时4秒开始 随机变量一到八 大于5时 尽量往下走,概率提高 num==0往回走

0到2区间向左,3到4向右;

重点行动完一次后要对计时归0

计时没到四秒则累加(记得用fixedDeltaTime)

修复一下子弹的脚本 case Enemy

是玩家子弹时 Die 再销毁自身 tank里面也要补一下,再改一下标签

 

[展开全文]

敌人一产生就应有一个转向,所以把计时器初始值=4

[展开全文]

地图的实例化

测量四个角与中点的位置  20*16

create empty--MapCreation 新弄一个gameobjevt做地图孵化器 加同名脚本

框架 1.先拿一下预制体

一个数组 public GameObject[] item; 用来装饰初始化地图所需物体的数组

0 heart 1wall 2barrier 3 出生效果 4河流 5 草 6 空气墙 再拖一下预制体

重点 先把脚本(object)的钩消掉再操作

heart 坐标 0,-8  实例化

在awake方法里(因为要先于所有物体)

Instantiate(item[0], new Vector3(0,-8,0), Quaternion.identity(没有旋转角度);

use walls inclose the heart

wall的坐标 上面一排用一个for循环 坐标中x设一个参i(初始=-1),中间记得加分号

ctrl cv  

wall中间有缝调大一点 map 都调的3.2

我自己的坐标自己按位置调

每次实例化出来的东西clone就会散落在hierarchy上 让他们产生在mapcreation下

再封装一个方法 private void CreateItem(GameObject createGameObject,Vector3 createPosition,Quaternion,createRotation四元数)

{

用GameObject变量 itemGo来接收它们

再设置成子物体itemGo.transfrom.setParent(gameObject.transform);

}

再把上面的Instantiate全改成CreateItem

易错别把transform写错了

[展开全文]

学习发布的尺寸的大小与如何发bu

[展开全文]

都要有碰撞器,一方要有刚体,最好是运动的

[展开全文]

欧拉角转四元数的api

Quaternion.EulerAngles()旧版本

Quaternion.EulerAngles()新版本

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

[展开全文]

碰撞 

两个物体身上有碰撞器

其中一方是刚体 一般在运动的一方上

因为刚体会休眠 就不会发生碰撞jian'c

[展开全文]

24节 6.00 防止出现绝对现象。

 

24节 1.22定义List<Vector3> XX = new List <Vector>();

 

 

if(判断应该是两个等号==)

[展开全文]

Heart 脚本:Die()  拿spriteRander组件

[展开全文]

授课教师

SiKi学院老师

课程特色

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