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 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> Unity横版Games基础功能实现 -> 正文阅读

[游戏开发]Unity横版Games基础功能实现


一、基础组件


TileMap

切分素材

新建 TileMap,他会连同 Grid 一起出现,对贴图进行属性设置

在这里插入图片描述
然后点击 Sprite Editor ,slice切换为按照像素切割,调整像素进行切割

在这里插入图片描述
将切割后的贴图放入 Tile Palette 窗口,拖动单块进行地图素材的创建

地图碰撞

在Tilemap中添加 Tilemap Collider 2D,勾选Used By Composite,按照素材生产碰撞体

在这里插入图片描述


刚体移动

首先要有个最基础的2D刚体对象,然后简单设置重力影响

在这里插入图片描述

public Rigidbody2D ri;

移动与转向

可以定义 speed(float) 速度来控制x轴的移动

根据正负来修改 Vector3 的x轴属性来控制贴图朝向

float hm = Input.GetAxisRaw("Horizontal");

ri.velocity = new Vector2(hm * playerSpeed, ri.velocity.y);

// 角色转向
if (hm != 0)
{
    transform.localScale = new Vector3(hm, 1, 1);
}

多端跳跃

首先判断是否在地面或墙体,根据 OverlapCircle 与 ground 地面 layer 判断

// 多段条次数
public int jumpCount;
// 判断是否在地面,墙上
public bool onGround, onWall, jumpPressed;
// 碰撞体半径
public float collisionRadius = 0.2f;
// 3个碰撞体位置
public Vector2 bottomOffset, rightOffset, leftOffset;
public LayerMask ground;

下图3个圆形碰撞体则是代表上面的 Vector2 对象

在这里插入图片描述
这里还需要设置地面 Layer ,新增 一个名为 GroundLayer,然后将 Tilemap 的 Layer 设置为 Ground

onGround = Physics2D.OverlapCircle((Vector2)transform.position + bottomOffset, collisionRadius, ground);
onWall = Physics2D.OverlapCircle((Vector2)transform.position + rightOffset, collisionRadius, ground) ||
            Physics2D.OverlapCircle((Vector2)transform.position + leftOffset, collisionRadius, ground);

设置全局可跳跃次数变量 jumpCount

// 重置段跳次数
if (onGround)
{
    jumpCount = 2;
    isJump = false;
}
// 在地面并按跳跃键
if (jumpPressed && onGround)
{
    isJump = true;
    ri.velocity = new Vector2(ri.velocity.x, JumpForce);
    ri.velocity += Vector2.up * JumpForce;
    jumpCount--;
    jumpPressed = false;
}
// 在空中并且不接触墙体时,有次数并跳跃
else if (jumpPressed && jumpCount > 0 && !onGround && !onWall)
{
    ri.velocity = new Vector2(ri.velocity.x, JumpForce);
    ri.velocity += Vector2.up * JumpForce;
    jumpCount--;
    jumpPressed = false;
}

动画切换

创建动画与关联

首先利用贴图创建帧动画,物体对象添加 Animator组件 并绑定 Controller控制者

资源目录中新建 Animator ,多个贴图放入 Animation窗口,可以在 Samples 中设置播放速度

在这里插入图片描述
在 Animator 窗口中新增变量(+号),用来做动画的切换(右键 Stand 然后 Make Transtion

例如 Stand > Jump (站立 > 跳跃),根据jumping布尔类型的变量的值来判断动画的切换

在这里插入图片描述
可以在 script 脚本中对变量进行修改,anim对象 指向 Animator组件,也可以 Start 方法中初始化

在这里插入图片描述

public Animator anim;
anim.SetFloat("running", Mathf.Abs(ri.velocity.x));
if (onGround)
{
    anim.SetBool("falling", false);
} 
else if (ri.velocity.y > 0)
{
    anim.SetBool("jumping", true);
} 
else if (ri.velocity.y < 0)
{
    anim.SetBool("jumping", false);
    anim.SetBool("falling", true);
}

角色碰撞体

可以针对于一个人物角色添加两种膨胀体,上下分为方形和圆形,方便以后任务可以进行蹲下操作

在这里插入图片描述
还可以添加2D无摩擦材质 Physics Material 2D,对其 Friction 属性进行修改,改为0,防止与建筑体产生摩擦力

在这里插入图片描述


二、组件部分

Cinemachine(镜头跟踪)

在Window > Package Manager 中查找 Cinemachine 安装后需要 Import 至项目目录

在当前场景中添加 Cinemachine > 2D Cinema

常用属性

Follow:跟随的物体对象,可以把Player拖到这里,下图的角色黄点点

Lens 中 Ortho Size:相机尺寸大小

Body 中 Dead Zone:相机锁死区域,下图的红色区域

在这里插入图片描述


总结

蔚蓝,遥不可及

  游戏开发 最新文章
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-07-15 16:34:29  更:2021-07-15 16:35:48 
 
开发: 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年11日历 -2024/11/26 3:54:23-

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