Unity学习笔记

这篇博客详细介绍了Unity的基础知识,包括人物移动、瓦片地图、物理系统、碰撞处理、动画系统和UI交互等。通过实例讲解了如何实现向左移动、控制物体、修改帧率、创建瓦片地图、禁用重力、处理碰撞、使用触发器、射线投射以及添加生命值统计等功能。此外,还涵盖了碰撞体优化、图层与碰撞的关系、粒子系统、摄像机设置和UI元素的创建与交互等内容,是Unity初学者的宝贵教程。
摘要由CSDN通过智能技术生成

目录

向左移动人物

上下左右控制物体

修改每秒渲染帧数

Tilemaps瓦片地图

物理系统

禁用重力:找到 Gravity Scale 属性并将其设置为 0

碰撞

去除旋转

去除抖动:修改物体移动的脚本

添加瓦片地图碰撞

图层与碰撞

触发器

 射线投射

给物体添加生命值统计功能

定义一个属性

精灵渲染器 (Sprite Renderer)

动画Animator

添加Animator 的组件

create an Animation Clip

构建 Controller

Instantiate(实例化)

摄像机

粒子

UI

EventSystem

Rect Transform(矩形变换)

Render Mode:

Canvas Scaler 组件:

Graphic Raycaste组件:

对话框

引用对象的新方法:使用静态成员


向左移动人物

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

public class RubyController : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        Vector2 position = transform.position;
        position.x = position.x + 0.1f;
        transform.position = position;
    }
}

Update()每帧调用

上下左右控制物体

使用Unity Input 系统

 此处用到Horizontal和Vertical

Input 页面列出所有玩家输入控件(例如,游戏手柄上的一个按键)的 Axes 值。值的范围从 -1 到 1(具体值取决于玩家执行的操作)。

例如,对于游戏手柄上的控制杆,可以将水平轴设置为:

  • -1(控制杆在左侧时)

  • 0(控制杆在中间时)

  • 1(控制杆在右侧时)

对于键盘按键,以 2 个键来定义轴:

  • 负值键,被按下时将轴设置为 -1

  • 正值键,被按下时将轴设置为 1

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

public class RubyController : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");
        Debug.Log(vertical);//在 Console 窗口中写入一些内容
        Vector2 position = transform.position;
        position.x = position.x + 0.1f * horizontal;
        position.y = position.y + 0.1f * vertical;
        transform.position = position;
        /*
         * 如果你按向左键,则horizontal将为 -1(即移动距离为 position.x + -0.1f;)。Ruby 将向左移动 -0.1。
           如果你按向右键,则horizontal将为 1。Ruby 将向右移动 0.1。
           如果没有按下任何键,则horizontal将为 0 且 Ruby 不会移动(0.1 * 0 等于 0)。
        */
    }
}

Input系统的键盘输入,例:C按键

if (Input.GetKeyDown(KeyCode.C))

如果要确保在不同设备上有效,可以将 Input.GetButtonDown 与轴名称一起使用(就像前面针对移动执行的操作一样),并在输入设置 (Edit > Project Settings > Input) 中定义该轴对应的按钮。如需了解示例,请查看 Axes > Fire1

修改每秒渲染帧数

 也就是调用Update的频率,默认是60帧每秒。

    void Start()
    { 
        QualitySettings.vSyncCount = 0;
        Application.targetFrameRate = 10;//每秒渲染10帧
    }

修改后发现物体移动变慢,就有一个问题:

如果一个玩家的计算机非常陈旧,只能以每秒 30 帧的速度运行游戏,而另一个玩家的计算机能以每秒 120 帧的速度运行游戏,那么这两个玩家的主角的移动速度会有很大差异。这样就会使游戏的难易程度提高或降低,具体取决于运行游戏的计算机。

所以前面移动代码应改成

position.x = position.x + 0.1f * horizontal * Time.deltaTime;//乘上每帧渲染时间
position.y = position.y + 0.1f * vertical * Time.deltaTime;

这样不同帧速的电脑控制物体的速度才一样。

Tilemaps瓦片地图

不断重新渲染(Update())很大的游戏世界并不现实,瓦片地图可以用来解决此问题!瓦片地图将世界作为一个网格,你可以在其中为每个网格单元格设置不同的精灵。通过使用在视觉上连在一起的精灵,你可以创建便于在编辑器内直接更改的更大图像。

在 Hierarchy 窗口中创建两个游戏对象:

  • Grid(网格):顾名思义,场景中的网格可用于将游戏对象均匀地放置在网格单元格中。

  • Tilemap(瓦片地图):此瓦片地图是网格的子游戏对象。瓦片地图由瓦片 (Tiles) 组成;在本教程中,可将瓦片视为特殊精灵。

在 Project 窗口中,创建“Tiles”文件夹。选择 Create > Tile。

如果没有就选择 Create > 2D>Tile palette>Rectangular

然后在Hierarchy面板点Layer1,把Sprite拖进去就会生成一个Tile

 瓦片集:3x3,比单个瓦片方便

世界设计 - 瓦片地图 - Unity Learn自己看吧受不了了。

物理系统

添加Rigidbody 2D 组件

例1:在刚体上调用 AddForce,施加的力是方向与力的乘积。当力增大时,物理引擎将根据该力和方向逐帧移动飞弹。

rigidbody2d.AddForce(direction * force);

例2:rigidbody2D.simulated = false;//将刚体从物理系统模拟中删除

禁用重力:找到 Gravity Scale 属性并将其设置为 0

碰撞

告诉物理系统,该游戏对象的哪一部分是“实心的”。此操作是通过碰撞体完成的。

碰撞体是简单的形状(例如正方形或圆形),物理系统将这样的形状作为游戏对象的近似形状来进行碰撞计算。

添加Box Collider 2D组件

调整碰撞体大小:单击 Edit Collider 时,碰撞体在 Scene 视图中会变化为在侧面显示四个小方块。可以单击并拖动小方块来调整碰撞体的大小。

但是碰撞时会旋转和抖动

去除旋转

找到 Rigidbody 2D 组件。单击 Constraints 旁边的小箭头以展开该部分。 启用 Freeze Rotation

抖动原因:你不断在箱子内移动物体,而物理系统则将她移回。你要求代码执行的操作与物理系统执行的操作之间的这种冲突就会导致发生抖动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值