IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 菜鸡制作Unity2D游戏demo经历 -> 正文阅读

[游戏开发]菜鸡制作Unity2D游戏demo经历

教程B站Unity2D官方入门教程 Ruby' Adventure 完整版~_哔哩哔哩_bilibili

创建项目时提示什么版本控制器,选择是以后让安装了一个东西,估计是团队合作时用的,先不管了

创建完项目后发现是英文,,遂上网找教程怎么转成中文(英文弱鸡落泪),网上说在编辑菜单里的首选项设置有语言设置,但是我的竟然没有,,,

?看到网上也有其他这种情况的,就是没找到解决方案,算了,英文就英文了,,,(害怕ing

接下来就要正式开始学(chao)习(xi)了!

1.导入资源

先在Asset store里面搜索Ruby's Adventrue,点第一个把里面素材全下载下来,没梯子网真的慢。。。加载都要半天,下载完后选择全部导入,然后需要reload一下这个场景。

比较奇怪的是我不知道为啥这些文件会有红色的十字架。。视频里面都没有。

?然后教程里面在Scene文件夹里面又创了一个场景文件,搞不懂为啥,里面明明有一个空的了,。算了跟着教程走,我也创一个。

2.角色移动

视频开始跟第一节断层了,里面多了一个人物,这个人物在Asserts\Art\Sprites\Characters里面,直接从库里面拖出来就行,

然后咱们在Asserts文件夹内新建一个文件夹Scripts,用于存放脚本,

在写脚本的过程中发现VScode没办法进行自动补全,上网查了一下可能是.net版本不够,遂下最新版(5.0.302)Download .NET 5.0 SDK (v5.0.302) - Windows x64 Installer (microsoft.com)安装,又得重启一遍。。。。唉,真麻烦

重启完了,还是不行,,又在vscode里面下了一大堆相关的插件,终于可以补全了,继续继续!

下面是脚本代码,控制移动的

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/*控制角色移动、生命、动画等*/

public class PlayerController : MonoBehaviour
{
    public float speed = 5f;//移动速度
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        float moveX = Input.GetAxisRaw("Horizontal");//控制水平移动方向 A:-1 D:1 0
        float moveY = Input.GetAxisRaw("Vertical");//控制垂直移动方向 W:1 S:-1 0

        Vector2 position = transform.position;
        position.x += moveX * speed * Time.deltaTime;
        position.y += moveY * speed * Time.deltaTime;
        transform.position =position;
    }
}

定义一个公有成员变量speed,这样我们就能在unity界面修改它了,然后因为Update函数是每帧都要调用的,我们在里面写移动的代码,那个Input.GetAxisRaw是获取你按的键位,在Horizontal方向上如果是A或者D,就返回-1或者1,在Vertical方向上如果是W或者S,就返回1或者-1,然后根据这个正负来确定我们移动的方向,代码很好理解。

需要注意的就是写完代码记得保存,记得把脚本关联到角色,记得加分号!

3.tilemap绘制场景

咕咕咕~马上更新

哈哈哈绘制地图这块真好玩,我要好好搞一下再写,明天见~

2021/8/8 20:47? ? ? ? ---荒废了一天,补了炮姐第一部,晚上太愧疚了决定写到第六节!开搞开搞

我们在Assert里面新建一个Tiles文件夹,用来存放各类地板素材。在左侧场景栏(我也不知道叫啥,英文名是Hierarchy)新建一个2D Object,选Tilemap,然后场景那边就会多出网格图,我们后面就往里面填素材就行啦。

另外还要在最上面Window选项中新建一个2D的Tile Palette,这个叫调色板,作用就是把咱们的那些素材取出来备用(个人理解..

在Sprites的Environment文件夹里面都是放的图片素材,我们可以选一些自己喜欢的直接拖到刚刚那个调色板里面,但是这么做不太好,因为拖进去后大小可能不匹配,我们可以把原本的地板图片拆分成九宫格样式,然后再拖进去。拆分的方法就是先选中要拆的图片,再有色Inspector栏中把Sprite选成Multiple,然后apply一下,再点Sprite Editor,主要是调那个行和列数(Column & Row),视频中调的是3x3,咱们也用3x3的。

搞完后就可以在调色板里面选中方块然后直接点Scene里面的方格放置就行了,但是放置完后发现是这个样子....

这是因为我们的素材规定了每个格子是100x100个像素,但是我们的素材是192x192的,每一小块只有64x64个像素,所以占不满,只要把箭头这里的100改成64就OK了。

?改好之后效果是这样滴。

拙劣的手法完成最后的拙作QAQ

4.prefab丰富场景?

上一节的那个树,,别学我啊,那个加的不行,这节课讲了添加树方面的操作,比较完备。

这个prefab比较容易理解,就是我先弄好了一个东西的属性(比如树的刚体设置和碰撞体积什么的),然后我有好多同一个素材的树,这个prefab就是能把这些属性一同作用在所有同一素材的树上,操作起来也挺简单的。

我们先按视频中说的,在Assert文件夹下新建一个prefabs文件夹,用来存放我们调用的素材。

然后先从environment文件夹中拉出来一个素材,比如一棵树,把它拉到左边的Hierarchy栏目中,这样它也会出现在Scene中。然后再把它拉进刚刚新建的Prefabs文件夹中,颜色变蓝就说明搞好了。后面我们要弄同一种树的话只需要复制粘贴即可。

?设置碰撞信息的话,只要选中这个物体,然后在右边栏目中add component搜索box,选2D那个

这个Edit Collider点一下可以调整体积范围,建议建筑和人的话只弄底部就行。

对Ruby的设置除了需要设置碰撞信息,还需要设置刚体,就是添加box2D后再添加一个Rigidbody2D就行了,在添加Rigidbody2D时注意把Z轴冻结选上,不然人物碰到物体后会旋转。

前面说了prefabs,具体使用方法就是我们先把一棵树的属性设置好后,在图中位置选择apply all。

这样就能把所添加的同类型的物品全都赋值同一属性了。

这节的基本操作就这些,比较有意思也比较基础。

根据上面那些操作,咱们可以把自己想添加的素材整理一下搞进去,跟玩MC差不多。同样献上目前拙作。

?5.解决碰撞抖动问题

主要解决两个问题:1.碰撞后人物旋转问题 2.碰撞后来回抖动问题。

第一个问题在上一节已经解决过了,就是在Ruby的刚体控制那里把Z轴锁定就行了。

第二个问题需要对移动脚本进行修改,使其变为刚体移动。

先把代码贴上来!

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/*控制角色移动、生命、动画等*/

public class PlayerController : MonoBehaviour
{
    public float speed = 5f;//移动速度
    Rigidbody2D rbody;
    // Start is called before the first frame update
    void Start()
    {
        rbody = GetComponent<Rigidbody2D>();
    }

    // Update is called once per frame
    void Update()
    {
        float moveX = Input.GetAxisRaw("Horizontal");//控制水平移动方向 A:-1 D:1 0
        float moveY = Input.GetAxisRaw("Vertical");//控制垂直移动方向 W:1 S:-1 0

        Vector2 position = transform.position;
        position.x += moveX * speed * Time.fixedDeltaTime;
        position.y += moveY * speed * Time.fixedDeltaTime;
        // position.x += moveX * speed * Time.deltaTime;
        // position.y += moveY * speed * Time.deltaTime;
        //transform.position =position;
        rbody.position = position;
    }
}

不同点就是多声明了一个2D刚体rbody,然后初始化让他获取了主角刚体信息(我猜的,移动的时候使用刚体的移动方式,rbody.position直接赋值,跟视频中不一样,我觉得这个更好记一些,然后如果按视频中的写法的话会导致移动速度特别慢而且出现跳帧的现象,把Time.deltaTime改成Time.fixedDeltaTime就OK啦。

另外还讲了一个整理Hierarchy栏目的方法,就是新建一个空物体,然后把其他物体拉到它里面,就相当于文件夹了。

原本是这个样子。

弄完是这个样子

?

确实简洁了些。

这节也没啥内容,主要就是那个代码的理解,需要大概理解一下,感觉记不住其实也没关系。。

6.相机跟随

2021/8/8 23:38????????咕咕咕,明天再搞~

?

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-08-09 10:32:59  更:2021-08-09 10:33:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/9 4:00:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码