Unity2D小狐狸教程笔记

这篇具有很好参考价值的文章主要介绍了Unity2D小狐狸教程笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Frist Game:Sunnyland

1、安装软件与导入素材

下载

https://unity.cn/releases

默认显示方式

window -> layout -> default

SampleScene :

Project -> 文件目录

Scene ->游戏画面

asset store -> 素材商店

在asset store下载素材 sunnyland

shift + sapace 放大窗口

2、编辑素材与Til

1.背景导入

每个格子16像素: Pixels Per Unit 16px

2.绘制瓷砖式地图

新建瓦片图层:左上角/右键 > 2D object>Tilemap

调出画板: window > 2D > Tile palette

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

建立瓦片文件夹管理素材

编辑素材:素材16像素/格, 编辑 Sprite Editor

切割素材:Slice >automatic自动 (效果不好,无法分出每格)

>Grid By Cell Size自定义

第一行x:16 y: 16

Apply 确认

将素材拖拽进画板Tile palette开始绘制

遇见问题:编辑完地图保存项目后,打开发现素材丢失 (为了找解决方案找了半个小时qaq)

原因:不在一个场景

解决方案:assets > scenes > scene.unity

3、图层(layer)与角

Main camera中的Size可调整视野大小

图层排序:sorting layer

图层名称排序越在下面,越在前面

order in layer 数字越大越在前

右键->2D object -> sprite(精灵)

sprite:表示在 2D 游戏中使用的精灵对象。

精灵 是一种 2D 图形对象,用于 2D 游戏中的角色、道具、飞弹和其他游戏元素。

将角色素材拖拽到 sprite中

Add Component:

Rigibody 2D 2D刚体

Box Collider 2D碰撞体(记得Edit Collider去调整人物的绿色框不要太大)

Tilemap Collider 2D 地图碰撞格子

遇到的几个问题

1.狐狸大小-> 设置图片的 unit -> 16

2.无法移动 -> 要点到箭头才能拖动

4、角色移动

在Player中Add Component->New Scripts(脚本),命名为PlayerControler

可以创建专门的Scripts文件夹来放Scripts

打开代码文件创建一个刚体

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

保存后将Rigidbody 2D拖拽进Rb中绑定player(角色)来实现更改角色

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

Input.GetAxis 函数:用于确定移动方向

Input.GetAxis("Horizontal")表示在X轴上移动,

Input.GetAxis("Vertical")代表在z轴上移动,

可以从Edit——Project Setting——input中查看相关的设置

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerControler : MonoBehaviour
{
    //声明刚体变量
    public Rigidbody2D rb;
    //声明速度
    public float speed;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    //Update函数在游戏运行中时刻调用
    void Update()
    {
        Movement();
    }

    //角色移动
    void Movement()
    {
        float horizontalmove;
        //Horizontal是u3d的水平虚拟轴,即左右,
        //GetAxis为得到-1到1的数值
        horizontalmove = Input.GetAxis("Horizontal");

        if(horizontalmove != 0)
        {
            //velocity:此属性用于设置或返回刚体的速度值,vector2表示用于2D
            rb.velocity = new Vector2(horizontalmove * speed, rb.velocity.y);
        }
    }
}

注意事项:

1.在游戏过程中更改的变量不会在结束时保存,

若需保存游戏内的更改,可以先在游戏时Copy Component,

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

在结束后粘贴即可(如下)

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

2.2D角色需要在刚体中固定Z轴,否则会晕头转向(笑)

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

5、角色方向与跳跃

角色方向:

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

Scale是缩放比例:用Transform.localScame调用

//GetAxisRwa可得到-1,0,1三个数值
float facedicretion = Input.GetAxisRaw("Horizontal");       //左右转向

//判断左右转向
   if(facedicretion != 0)
   {
            //localScale是三维的缩放
            transform.localScale = new Vector3(facedicretion,1,1);
   }

注意事项:

1.人物移动时的卡顿问题:

将TileMap在现有基础上加一个CompositeCollider2D组件,并把原来的TileMapCollider2D的

Used By Composite钩上,这样每一个瓦片的碰撞框会合并到一起,然后将刚体中的Body Type

设置为静态后即可解决。

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

2.针对不同电脑帧率不同的问题:

将void Updatee() -> void FixedUpdate()

将rb.velocity = new Vector2(horizontalmove * speed, rb.velocity.y);

-> rb.velocity = new Vector2(horizontalmove * speed *Time.deltaTime, rb.velocity.y);

其中Time.deltaTime为百分比时间,可防止跳帧现象

跳跃:通过刚体来更改角色的Y轴

可以在刚体里调整重力

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

    //跳跃
    public float jumpforce;

        //跳跃功能(Jump)
        if(Input.GetButtonDown("Jump"))         //如果检测到Jump按键(即空格)被按下
        {
            rb.velocity = new Vector2(rb.velocity.x,jumpforce * Time.deltaTime);
        }
    }
}

代码还存在跳跃不灵敏的问题未修改;

手感优化

官方手册里的

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

有关于按键手感的优化说明

FixedUpdate()每秒固定刷新帧数

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

6、实现动画效果(Animation与Animator)

<1>添加组件Animator,再创建一个Animator Controller命名为Player

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

再将Animator Controller拖拽到

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档
unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

在Animation窗口中创建Idle(原地站立)的动画,再从素材包中找到idle的动画全部

(多选的方法:选中一个目标,按下shift再选择最后一个目标,就可以完成多选了)

拖拽到时间轴,可以拉长时间轴或调整samples来改变播放速度。

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

中可点击Player后看见角色添加的动画

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

,再添加跑动的动画

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

再让Idle和Run之间建立联系

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档
unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

再给箭头设置条件

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

声明动画变量Anim,再将Animator拖拽到Anim中

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

在脚本里添加代码

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

7、跳跃动画

1、先用跟上节一样的原理给player添加jumping和falling的动画

2、在Animator中设置好触发条件

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

编写脚本,再在Update中调用即可

    //转换动画
    void SwitchAnim()
    {
        anim.SetBool("idle", false);
        if (anim.GetBool("jumping") && rb.velocity.y < 0)                        //检测到jumping为true并且Y轴速度小于0(下落)
        {
            //触发下落动画
            anim.SetBool("jumping" , false);
            anim.SetBool("falling", true);
        }
        else if(coll.IsTouchingLayers(ground))                                  //如果接触地面
        {
            //触发站立动画
            anim.SetBool("falling", false);
            anim.SetBool("idle", true);
        }
    }

8、修复移动卡顿错误和优化代码

(1)给Player添加圆形碰撞体

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

调整两个碰撞体的大小

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

(2)

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

因为rb与anim的值不需要反复更改,所以不需让他显示在Unity中

实现方法:

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档
unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

9、镜头控制Cinemachine

1、给Main Camera添加脚本

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

2、

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

后将Player拖拽进此

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档
unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

即可实现摄像头跟随移动

3、在GameObject中打开Cinemashine创建2D摄像头,然后

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

调整Dead Zone Width可锁定不跟踪范围

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

4.锁定移动镜头范围

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

10、物品收集 & Prefabs

实现收集樱桃和宝石:

1、创建精灵

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档

,给Cherry添加Animator组件,用前面创建角色的方法将樱桃实体化

2、给樱桃添加碰撞体Box,勾选Is Trigger(一个碰撞检测用的开关,不要让它有碰撞效果的意思)

unity小狐狸教程,Unity,unity,游戏引擎,c#,Powered by 金山文档
   //拾取物品
    private void OnTriggerEnter2D(Collider2D collision)         //取消碰撞触发OnTrigger事件
    {
        if(collision.tag == "Collection")               //如果碰撞体的标签是Collection
        {
            Destroy(collision.gameObject);              //则销毁此物体
            Cherry += 1;
        }
    }

OnTriggerEnter2D:

  • Trigger触发,取消所有的物理碰撞,可以在触发时执行OnTrigger事件。

  • 想获得碰撞状态信息,又不想触发物理效果 使用OnTrigger

  • 至少一方勾选 Trigger触发器

  • 运动一方必须含有刚体

Prefabs预制件:

相当于模板,类与对象的关系

11、物理材质&空中跳跃

移动跳跃完美手感(终极版/可多段跳)

//跳跃
    void Jump()
    {
        if (isGround)
        {
            jumpCount = 2;
            isJump = false;
        }
        //第一段跳
        if (jumpPressed && isGround)     //在地面上跳跃
        {
            isJump = true;
            rb.velocity = new Vector2(rb.velocity.x, jumpForce);
            jumpCount--;
            jumpPressed = false;
            jumpAudio.Play();                   //播放声音
        }
        //第二段跳
        else if (jumpPressed && jumpCount > 0 && !isGround)      //在天上
        {
            rb.velocity = new Vector2(rb.velocity.x, jumpForce);
            jumpCount--;
            jumpPressed = false;
            jumpAudio.Play();                   //播放声音
        }
    }

12、UI入门

UI ->Canvas :画布

1.添加Canvas ->添加Text->按F聚焦->blod,22,颜色

2.在代码中给Text修改值->赋值用到toString()

3.锁定UI位置->Text里Rect transform->左上角有个图形

13、敌人Enemy

1.添加敌人sprite,添加Enemy标签

2. 通过 private void OnCollisionEnter2D(Collision2D collision) 防范判断踩到敌人

遇到的问题:

添加了敌人未显示:添加层级,分层

14 受伤效果Hurt

1.添加碰撞逻辑 , 根据x的大小判断左右

2.设置弹出 rb.velocity = new Vector2(h, rb.velocity.y);

3.Mathf.Abs(rb.velocity.x) < 0.1 判断弹出是否结束,isHurt变量设置是否受伤状态

4.添加受伤动画 hurting 变量切换动画状态 anim.SetFloat("running", 0); 结束跑动状态

15 AI敌人移动

1.添加敌人控制代码

2.给敌人添加左右两个子object 确定左右节点

3. 代码中根据左右节点决定转向

  1. 拖到Perfabs 重复

问题: 滚动,原因是没有把Z轴固定

16 Animation Events动画事件

  1. 创建动画
    2. 编写 跳落地逻辑
    3. 在Idel结束帧后加入移动代码,保证动画播完

17 类的继承制作更多敌人

public class Enemy : MonoBehaviour
{
    //protected仅限父子类间使用
    protected Animator anim;
    protected AudioSource deathAudio;

    //虚方法
    protected virtual void Start()
    {
        anim = GetComponent<Animator>();
        deathAudio = GetComponent<AudioSource>();
    }

    //敌人死亡动画与音效
    public void Death()
    {
        Destroy(gameObject);
    }

    public void JumpOn()
    {
        anim.SetTrigger("death");
        deathAudio.Play();          //播放
    }
}

18 音效Audio

添加AudioSource

Play On Awarke 自动播放

Loop 是否循环

Stereo Pan 左右耳声音量

19 对话框Dialog

添加UI ->Panel

布局

添加 text

字体

围绕中心点拖动大小 option+拖动

触发Dialog

添加boxCollider -> trigger

添加代码

EnterDialog

player添加 tag

public GameObject enterDialog; //门

OnTriggerEnter2D //碰撞事件

OnTriggerExit2D //离开事件

制作动画

add Animation

点击录制按钮,设置不同帧的样式。

FixUpdate fixedDateTime

20 趴下效果Crouch

创建下蹲按钮

edit->project setting

右上角Gimoz 可以显示碰撞体

enabled 控制碰撞体是否启用

判断点周围是否重合

Physics2D.OverlapCircle

头顶添加一个object判断上方是否有碰撞物

21 场景控制SceneManager

1.回到起点

添加一个deadobject

添加deadLine Tag

重置游戏

using UnityEngine.SceneManagement;

//延时执行

Invoke("Restart", 2f);

//重新加载场景

SceneManager.LoadScene(SceneManager.GetActiveScene().name);

//关闭音源

GetComponent ().enabled = false;

index

file -> build Setting

加载到菜单

SceneManager.LoadScene("Menu");

25 主菜单MainMenu

1.新建Scene作为主菜单

2.添加panel作为背景,添加渐变动画

3.添加开始结束按钮,在on click()中选择函数文章来源地址https://www.toymoban.com/news/detail-821534.html

到了这里,关于Unity2D小狐狸教程笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity2D学习笔记-Tilemap

    tilemap算是接触了几次,但是无论是看视频还是看文章都一知半解,这次把编辑地图的开始步骤搞清楚。 首先要知道tilemap是做什么的。 这里提到的Tilemap其实不止是Tilemap:Tilemap本身是地图编辑器(虽然我更倾向于理解为“场景”,不过编辑地图才是核心)。之前学的印象是,

    2023年04月09日
    浏览(36)
  • Unity2D 商业游戏案例 - 梦幻西游(第二季 框架设计篇)

    01 Unity2D 回合制游戏案例 - 梦幻西游(第一季 战斗逻辑篇) 01 Unity2D 回合制游戏案例 - 梦幻西游(第一季 战斗逻辑篇)【B站的第一季的部分视频】 02 Unity2D 商业游戏案例 - 梦幻西游(第二季 框架设计篇) 03 Unity2D 商业游戏案例《梦幻西游》(番外篇 - 场景系统) 。。。。。

    2024年02月05日
    浏览(61)
  • Unity学习笔记(7) Unity2D骨骼动画制作流程

    用骨骼动画最大的好处就是方便之后做换装系统。 无论对3Dor2D游戏都是这样的。 这篇博文记录一下2D骨骼动画的制作流程,参考b站麦扣的系列教程: https://space.bilibili.com/370283072/channel/seriesdetail?sid=211996 用PS做一个将人物各个部件(骨骼)都分解开来的人物模型。 导出时注意

    2023年04月09日
    浏览(34)
  • 【用unity实现100个游戏之14】Unity2d做一个建造与防御类rts游戏(附项目源码)

    【视频】:https://www.udemy.com/course/awesome-builder-defender-game-in-unity/?couponCode=CMCOURSEDEC23 注意 :本文为学习笔记记录,推荐支持原作者,去看原视频自己手敲代码理解更加深入

    2024年02月05日
    浏览(36)
  • 【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏1(附项目源码)

    当今,塔防游戏已经成为游戏市场上备受欢迎的一类游戏类型。《保卫萝卜》作为其中的经典之作,深受玩家喜爱。本项目旨在基于《保卫萝卜》的玩法和特点,开发一个Unity2D塔防游戏,让玩家可以在游戏中体验到精彩的策略对抗与刺激的关卡挑战。 本项目将通过Unity引擎进

    2024年02月04日
    浏览(34)
  • 【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏4(附项目源码)

    本期紧接着上一篇,本期主要内容是实现商店、购买、出售、升级等功能。 新增TurretSettings 配置不同炮塔参数 绘制商店UI 新增TurretCard,渲染商品数据,如果前面有绘制价格文本,还可以渲染价格文本,这里我就偷懒不弄了 挂载脚本,并配置 新增TurretShopManager,商店管理器

    2024年01月21日
    浏览(35)
  • Unity2D RPG开发笔记 P1 - Unity界面基础操作和知识

    按下 QWERTY 可以选择不同的工具进行 旋转、定位、缩放 按下 Ctrl + D 可以复制物体 16:9 为最常见的分辨率 Transform 组件 物体在空间中的位置、缩放、旋转 点击这里可以进行 reset 操作,位置将会被重置 不知道算不算冷知识的冷知识:鼠标拖动这里可以移动该数值 Sprite Renderer

    2024年02月13日
    浏览(32)
  • 【用unity实现100个游戏之15】开发一个类保卫萝卜的Unity2D塔防游戏5(附项目源码,完结)

    本期是本项目的最后一篇,主要内容是配置环境、生成不同敌人、结束重开。 我用的环境素材 https://assetstore.unity.com/packages/2d/environments/2d-sugar-world-asset-pack-urp-256585

    2024年02月05日
    浏览(37)
  • 【笔记】Unity2D角色和物体移动的几种方法

    在Unity中对于物体移动有多种方法,这里根据b站up主【鼓励Jun】的视频整理了一些笔记 变量声明: 位移向量var dir=new Vector3(deltax.deltay,deltaz); 移动速度var speed=2; ps:变量声明都在主要都在方法外,实际位移操作则在Update方法中。 #键盘输入,这里举一个只x轴上移动的例子,y轴同

    2023年04月08日
    浏览(32)
  • Unity2D Sprite尺寸与UI在场景视图和游戏视图显示不一致问题解决方案

    在Unity3D中,当开发2D游戏时,经常会遇到Sprite尺寸与UI在场景视图和游戏视图中显示不一致的问题。这个问题可能导致UI元素变形或者在不同分辨率的设备上显示不正确。本文将为您提供解决这个问题的方法,并附带相应的源代码。 问题分析: Sprite是2D游戏中最常用的图像资

    2024年02月05日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包