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

制作于2017年12月23日

价格 免费

碰撞检测条件,两个物体中必须有collider+其一RigidBody

FixedUpdate{}固定侦,解决碰撞

[展开全文]

API

重复调用

InvokeRepeating(方法名,延时几秒后第一次调用,每隔多久调用一次)

[展开全文]

重点课时

场景的实例化(场景搭建)

 

[展开全文]

触发检测  触发器

触发器不会触发物理效果,而是发生一个检测

(一触即发)

碰撞器加上Is trigger打钩

触发检测必要条件

1.双方必须具有碰撞器,并且其中一方是触发器

2.有一方身上必须有刚体(同理最好在运动的物体身上设置刚体)

碰撞检测API

1.OnTriggerEnter 当两个物体接触时

2.OnTriggerExit 当两个物体出来时

3.OnTriggerStay 当两个物体互相进入

(2D游戏记得加上2D)

[展开全文]

做2D游戏的时候,旋转角度应该是反过来的负度数 

[展开全文]

     重点课时

碰撞器添加

发生碰撞检测的条件

1.两个身上都要有碰撞器

2.运动的一方身上要有刚体(不然会休眠)

 碰撞器分两大类

1.3D碰撞器

2.2D碰撞器

 

小知识;在菜单上面做操作是不会影响预制体的,要在预制体上做操作,这样就会自动复制在克隆体上面,或者菜单里面按Apply

 

2D游戏应该调整重力 不然会往下掉Gravity Scale

Consraints 应该锁上Z轴,不然会发生碰撞旋转

  private void FixedUpdate() //固定物理帧 这样子每一秒的帧数都是固定的,匀称的

(防止鬼畜!解决抖动效果)

 

[展开全文]

方法一:

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

Player

private SptiteRenderer srl

Update()

 

 

[展开全文]

我用的是2017.4.2f2的版本

上面显示说Instance有保护级别,不可调用

 

[展开全文]

两方都有碰撞器,运动的一方要有刚体。

碰撞体分两类为2D和3D

 

[展开全文]

把空气墙,家园墙做成预制体,实例化预制体就行了。

[展开全文]

Invoke方法记时和Destory方法记时是同时开始的,如果Invoke方法比Destory方法设置的时间长一些,比如1.0f和0.8f,则在调用Borntank方法生成坦克的1s内,到第0.8s时就开始运行Destory方法销毁了Born游戏物体,坦克无法生出。

坦克的产生依赖于Born游戏物体,如果游戏界面没有Born物体,则无法产生坦克。

Enemy遇到Player无法被销毁。

[展开全文]

case "Tank":
                if(isPlayerBullect)//不是玩家的子弹
                {
                    collision.SendMessage("Die");
                }
                break;

[展开全文]

这样写会出现一个问题,比如玩家如果同时按上和左建,坦克会斜着移动,所以建议将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游戏的UI与3D是相反的,即旋转度数相反

[展开全文]

SpriteRenderer中

Sorting Layer是渲染的大层级

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

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

[展开全文]

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

会生成一个Animation和一个Animator

选中文件后F2重命名文件

 

[展开全文]

图集和单一图片

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

 

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

图集还要多把Sprite Mode调成Multiple

用Sprite Editor切割图集

Slice 

[展开全文]