Unity初级案例 - 坦克大战(Unity2019.3)(上)

02-工程创建,素材导入与介绍
双击打开Unity,新建2D工程
在这里插入图片描述
调整布局:layout设置为2 by 3
导入素材
在这里插入图片描述
project面板调整为 One Column Layout

03-场景搭建,素材的处理
设置主摄像机:size(离屏幕位置)设置为8.5
Background设置为黑色
游戏显示窗口设置为 5:4
调出控制台窗口:ctrl+shif+c
图集的加工:导入素材的Texture调整为Sprite(2D and UI),点击apply
Sprite Mode:Multiple
切割图集(需要切割):点击Sprite Editor——Slice——Automayic ——点击Slice(调整大小,获得尺寸)——Grid By Size(按照固定大小切割)——点击Slice——点击X,点击apply

ctrl+s 保存场景

04-游戏中预制体的制作,2D动画的制作
Play1拖入Hierarchy面板下
unity开发以米为单位
Scale调整为3 3
改名为Player
在Projiect面板下,新建文件夹Prefabs存放预制体,拖入Player
再把map下的拖入Hierachy面板下,解决每个图片都要调整大小问题:
Sprite Render组件下的Sprite控制显示的图片,ctrl+D复制几个一样的物体,再拖入图片到Sprite下。
在这里插入图片描述
创建存放动画和存放动画控制器的文件夹Animation和AnimatorController
Born动画:鼠标单击选择第一张图片按住shift选择最后一张图片,拖入Hierarchy面板下,弹出窗口命名动画名字,命名为Born,Hierarchy面板下改名为Born。大小调整为3 3 3
在这里插入图片描述控制器改名为BornController,与动画分别拖入相应文件夹下。

在预制体Prefabs文件夹下创建Map文件夹存放地图和Effect特效文件夹
同理,创建爆炸特效Explosion和无敌效果Shield,河流River
取消显示摄像机Gizmos,叉掉Camera旁边的摄像机

05-控制玩家的移动
创建新的文件夹Script,存放所有的脚本。
选择Player,点击Add Component

定义速度

 public float moveSpeed=3;

控制游戏物体移动,在Update函数中

float h = Input.GetAxisRaw("Horizontal");//h=-1 左   h=1右
transform.Translate(Vector3.right * h * moveSpeed * Time.fixedDeltaTime, Space.World);
float v = Input.GetAxisRaw("Vertical");
transform.Translate(Vector3.up * v * moveSpeed * Time.fixedDeltaTime, Space.World);
   

06-控制图片的移动切换
方法一:切换图片的渲染和显示。
方法二:控制Z轴的旋转

方法一:拿到Sprite组件,更改他的属性值

拿到渲染器的引用:

    private SpriteRenderer sr;

在Awake函数中(一开始就拿到),Start函数之前

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

拿到切换图片的引用:

public Sprite[] tankSprite;//上 右 下 左

图片为:0 8 16 24
把图片拖入数组下面
上右下左

在这里插入图片描述
07-碰撞器的添加,解决抖动问题
发生碰撞的物体身上都应该有碰撞器,其中一方(最好是运动的一方)身上要有刚体。
给player游戏物体添加Box Collider 2D(2D游戏碰撞器)和刚体Rigibody 2D
新建文件夹Tank用来装所有的坦克
River调整到Map里
Map里所有的物体添加Box Collider 2D(2D游戏碰撞器)
Player的重力为0
删除草的碰撞器

解决旋转问题:选择Player游戏物体,在Rigibody 2D下的Constraints勾选上z轴
解决抖动问题:
unity内置的生命周期函数:
固定物理帧

 private void FixedUpdate()
    {
        
    }

08-移动优先级的添加,2D渲染层级问题
解决同时按两个键,斜着走的问题。垂直优先。
先确定v


        if (v != 0)
        {
            return;
        }

把控制移动的代码封装成一个方法
在这里插入图片描述
在 FixedUpdate()中调用Move方法
在这里插入图片描述
渲染的优先级:Order in Layer层级越大,越后渲染。Born、Grass设置为1

添加子弹,层级设置为1,拖入Tank文件夹下做成预制体。爆炸特效层级也设置为1
09-坦克的攻击方法
拿到子弹的引用

 public GameObject bullectPrefab;   

当按下空格的时候实例化一个子弹

 private void Attack()
    {
        if (Input.GetKeyDown(KeyCode.Space))//按下空格键
        {
Instantiate(bullectPrefab, transform.position, transform.rotation);}}

10-子弹的朝向问题

 private Vector3 bullectEulerAngles;
//子弹产生的角度:当前坦克的角度+子弹应该旋转的角度。
            Instantiate(bullectPrefab, transform.position, Quaternion.Euler(transform.eulerAngles + bullectEulerAngles));

14-子弹朝向问题的解决,移动方法的编写
旋转图片——旋转Z轴
在这里插入图片描述

    bullectEulerAngles = new Vector3(0, 0, -180);

12-攻击CD的加入,触发器与碰撞器的区别
创建子弹的脚本Bullet
在Update里面设置子弹移动

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

设置子弹CD
设置计时器:private float timeVal;
Update函数里调用攻击方法:
在这里插入图片描述
实例化之后归零timeVal = 0;//计时器归零
触发器:给子弹添加触发器:
在这里插入图片描述
给子弹添加Rigidbody2D,重力设置为0。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值