我的Unity学习笔记(三)坦克大战小游戏(1)

建立一个2D项目

61b3bd45609147f59c53dc2e492a6032.png

导入需要用的资源

这是我从视频里提供的资料下载的

cc0c19da4cfb481996da1a3516c15147.png

分析资源,收纳整理

将玩家、地图资源拖入游戏场景中并修改为合适的大小e318ab2da1414df3981cd8898f197d73.png
 

 将动态效果选中,拖入游戏场景中,创建动画

14d83ec6b77f413a97d3203192c91c75.png

149a72c6408e475693167cf10238f50f.png

3f7e857c64304d3993820144862e805c.png

将Explode1改名为ExplosionController

将新建动画改名为Explodsion

并新建两个文件夹来放置所有的动画

b3d7d99862ba425ab24c0e50102031b9.png

b6521384261d49739ba6bb0684f9cf48.png

 给游戏对象改名字

6f5cd5e58bbd4c3bbbb5945e93f93cea.png

创建预制体

建立一个Perfabs文件夹来放置预制体,并在Perfabs文件夹中创建效果和地图两个文件夹来放置对应的预制体

6e605a7ee6b94337bbffc58750e4a417.png

操作游戏玩家

 给游戏玩家加入刚体组件(rigidbody)和2D碰撞器组件(Box Collider 2D)

c2c220322d764a13a31bcfe86586ff43.png

将刚体组件中的重力改为0 ,选中冻结Z轴,解决移动当中的旋转

d50aa4a541c04399beffee01e9e9bfe7.png

 建立Player脚本

0600f702665a408597affeee2c6f8fb0.png

 在类中定义速度:public float moveSpeed = 3;

在private void FixedUpdate()方法中添加以下代码,将代码放在FiexedUpdate生命周期函数中,是为了解决抖动。

然后通过监测键盘中wasd键和上下左右键来达到让Player移动的效果

调用transform中的Translate方法让Player移动

float v = Input.GetAxis("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];
        //}
        //if(v!=0)
        //{
        //    return;
        //}
        float h = Input.GetAxis("Horizontal");
        transform.Translate(Vector3.right * h * moveSpeed * Time.fixedDeltaTime, Space.World);

 优化移动

按上面的步骤下来会发现坦克向不同方向移动时,都是朝向同一个方向的,需要在更改移动方向时,朝向一致的方向。

在类中定义渲染组件private SpriteRenderer sr;

并获取组件

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

    // Update is called once per frame

一个tankSprite数组,public Sprite[] tankSprite;

在下面的图片中找出坦克对应的不同方向

8b27fd61041b4fb3ad5c74b5d79c7d68.png

添加至tankSprite中

然后通过判断键盘输入的方向来控制坦克的朝向,并对移动的优先级进行处理,如果同时输入上下键和左右键,将优先控制上下的移动

private void FixedUpdate()
    {
        float v = Input.GetAxis("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];
        }
        if(v!=0)
        {
            return;
        }
        float h = Input.GetAxis("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];
        }
        
    }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值