Unity:2D

目录

1. 简介

2. 2D Sorting

3. 9-slicing Sprites

3.1 9-slicing and Colliders

4. Sprite Renderer

5. Sprite Creator

6. Sprite Editor

6.1 Slice

6.1 Resize polygons

6.2 Custom Outline

6.3 Custom Physics Shape

 6.4 Secondary Textures

6.5 Data Provider API

7. Sorting Groups

7.1 Particle System

8. Sprite Masks

9. Sprite Atlas

9.1 Variant Sprite Atlas

9.2 Preparing Sprite Atlases for distribution

10. Tilemaps

10.1 Tilemap component

10.2 Grid component

10.3 Tilemap Renderer

10.4 Tile asset

10.5 Tile Palette

10.6 Tilemap workflow

10.6.1 Creating Tilemaps

10.6.2 Creating Tiles

10.6.3 Creating a Tile Palette

10.6.4 Painting on Tilemaps

10.6.5 Tilemap Collider 2D

10.6.5.1 Tilemap and Composite Colliders

10.6.5.2 Scripting API tips

10.7 Hexagonal Tilemaps

10.8 Isometric Tilemaps

10.8.1 Creating an Isometric Tilemap

10.8.1.1 Custom Axis Sorting

11. Scriptable Tiles

11.1 TileBase

​12. Scriptable Brushes

12.1 GridBrushBase

12.2 GridBrushEditorBase

12.3 TilemapEditorTool

13. Rigidbody 2D

13.1 Rigidbody 2D body types

13.1.1 Body Type: Dynamic

13.1.2 Body Type: Kinematic

13.1.3 Body Type: Static

13.2 Simulated属性

14. Collider 2D

14.1 Circle Collider 2D

14.3 Box Collider2D

14.4 Polygon Collider2D

14.5 Edge Collider 2D

14.6 Capsule Collider 2D

14.7 Composite Collider 2D

15. ​​​​​​​2D joints

15.1 Constraints of 2D joints

15.2 Distance Joint 2D

15.3 Fixed Joint 2D

15.4 Friction Joint 2D

15.5 Hinge Joint 2D

15.6 Relative Joint 2D 

15.7 Slider Joint 2D​编辑

15.8 Spring Joint 2D

15.9 Target Joint 2D

15.10 Wheel Joint 2D

16. Constant Force 2D

17. Effectors 2D

17.1 Area Effector 2D

17.2 Buoyancy Effector 2D

17.3 Point Effector 2D

17.4 Platform Effector 2D

17.5 Surface Effector 2D​​​​​​​

1. 简介

2D游戏:主要包括Graphic、Physic

视角:俯视、侧视、2.5D

2. 2D Sorting

Unity根据2D Render 的类型和用法来排序,可以通过 Render Queue 声明渲染的顺序,渲染队列一般分为: Opaque queue 和 Transparent queue. 2D Renderers 主要在Transparent queue里,包括 Sprite Renderer, Tilemap Renderer, Sprite Shape Renderer.

排序的优先级:

3. 9-slicing Sprites

Sprite的MeshType,需要设置成FullRect

  • 四个角 (A, C, G and I) 大小不变.
  • B、H 水平拉伸
  • D、F 竖直拉伸
  • E水平、竖直拉伸

3.1 9-slicing and Colliders

当 Sprite有 Collider2D时, 需要确保当你改变精灵的尺寸时,Collider2D也会随之改变。

Box Collider 2D、 Polygon Collider 2D 支持自动变化, 勾选上Auto Tiling,如果不勾选, Collider2D保持不变。

4. Sprite Renderer

  • Material:default Material是Sprites - Default,它不受光源影响,Default - Diffuse可以接受光源影响

5. Sprite Creator

创建预定义的2D图形,用来临时使用2D->Sprite->Create

6. Sprite Editor

Slice 只有是Sprite类型是multiply才会有,它会自动识别独立的切图,把一张切图切分成多个部分,如果想手动添加一个切分,直接按住左键,创建矩形就可以,Trim表示收缩矩形

6.1 Slice

  • Type:
    • Automatic:自动划分Sprite切片
    • Grid by Cell Size:根据Cell 大小划分
    • Grid by Cell Count:根据Cell Count划分
  •  Method:
    • Delete Existing:删除所有已存在的grid
    • Smart:如果新的和原来的重叠了,则使用重叠后的外轮廓
    • Safe:保留原来的,如果新的和原来的有重叠,则丢弃新的

6.1 Resize polygons

如果Sprite的MeshType为Polygon,则在Sprite Editor 中可以定义polygon的形状

6.2 Custom Outline

使用custom outline 可以自定义图片的渲染区域,点击Generate,生成渲染区域,copy是复制当前的渲染区域,也可以自定义,先鼠标左键画一个矩形,然后移动、添加、删除其中的点,如果没有使用custom outline,即渲染的图片中包含了透明区域,那它和image的性能是差不多的,可以使用Texture Picker 这个三方插件,去编辑图集

如果想自定义outline,需要现在slice的模式下,创建一个矩形,然后转到该模式下,点击generate,生成outline,然后编辑点

6.3 Custom Physics Shape

和custom outline差不多,多了一个edge 拖拽,而且也能扣洞,可以单独的为某张sprite图片生成physics shape,比如一只箭,只在箭头上生成碰撞区域,就可以只在箭头上定义physics shape,也就是polygon collider。

如果修改了一个在场景中已经引用的sprite,点击reset 更新最新的

 6.4 Secondary Textures

只有Sprite Render 支持,它表示对第二张纹理进行采样,把采样的结果,应用到sprite上面。

6.5 Data Provider API

用来更改当前现有的sprite的数据,比如在导入sprite的时候,批量更改sprite的数据,其实也可以用preset。

using UnityEditor;
using UnityEditor.U2D.Sprites;
using UnityEngine;

public class MyAssetPostProcessor : AssetPostprocessor
{
    private void OnPreprocessTexture()
    {
        var factory = new SpriteDataProviderFactories();
        factory.Init();
        var dataProvider = factory.GetSpriteEditorDataProviderFromObject(assetImporter);
        dataProvider.InitSpriteEditorDataProvider();

        /* Use the data provider */

        // Apply the changes made to the data provider
        dataProvider.Apply();
    }
}

也可以在编辑下,选择sprite进行更改数据

using UnityEditor;
using UnityEditor.U2D.Sprites;
using UnityEngine;

public static class MyCustomTool
{
    [MenuItem("Custom/Update Sprite Settings")]
    static void UpdateSettings()
    {
        foreach (var obj in Selection.objects)
        {
            if (obj is Texture2D)
            {
                var factory = new SpriteDataProviderFactories();
                factory.Init();
                var dataProvider = factory.GetSpriteEditorDataProviderFromObject(obj);
                dataProvider.InitSpriteEditorDataProvider();

                /* Use the data provider */

                // Apply the changes made to the data provider
                dataProvider.Apply();

                // Reimport the asset to have the changes applied
                var assetImporter = dataProvider.targetObject as AssetImporter;
                assetImporter.SaveAndReimport();
            }
        }
    }
}

修改sprite 数据

static void SetPivot(ISpriteEditorDataProvider dataProvider)
{
    // Get all the existing Sprites
    var spriteRects = dataProvider.GetSpriteRects();

    // Loop over all Sprites and update the pivots
    foreach (var rect in spriteRects)
    {
        rect.pivot = new Vector2(0.1f, 0.2f);
        rect.alignment = SpriteAlignment.Custom;
    }

    // Write the updated data back to the data provider
    dataProvider.SetSpriteRects(spriteRects);

    // Apply the changes
    dataProvider.Apply();
}

7. Sorting Groups

sorting group 是一个组件,把它下面的sprite render 当成一个物体渲染

 从前往后渲染

  • Sort At Root:如果该Gameobject是嵌套的,则忽略父物体的sort group,作为根物体的sort group

它和其他单独的sprite render 是同层级的,如果是嵌套,优先渲染嵌套的sorting group

7.1 Particle System

在sorting group 下的粒子系统,和sprite render 一样,同样根据它的sorting in layer 和 order  in   layer作比较。

8. Sprite Masks

只适用于Sprite  Render

可以设置交互方式

使用这个,配合sorting group,精确控制Mask的对象

9. Sprite Atlas

9.1 Variant Sprite Atlas

它的作用就是就是复制一份其它的图集,然后根据scale,设置该图集的分辨率。可以用来做性能适配。但是一般不要低于0.25

9.2 Preparing Sprite Atlases for distribution

如果图集特别大,或者要按需加载图集,比如手机的性能,可以取消勾选,include in build,通过asset bundle 加载

10. Tilemaps

地图,通过tile填充,把信息传递给tile render,collider

10.1 Tilemap component

Tilemap里面包含了地图的信息,并把信息传递给tile render 和 tile  collider,由tile 组成,可以通过 Window > 2D > Tile Palette来绘制它。

Animation Frame Rate设置tile动画播放的速度,比如:设置成 2, tile 动画播放的速度,是帧率的两倍. 

10.2 Grid component

它使用来帮助对齐tile的,一张tilemap上,父物体上挂载grid,unity 会把cell的信息,转换成局部坐标,然后再转换成tile的位置

Cell Gapcell 之间的间隔,如果是个负数,且绝对值大于cell的大小,unity 会自动矫正成cell的大小,比如 Cell Size 是 (1, 1, 0), Cell Gap 设置成 (–2, –2, 0),unity会自动矫正成 (–1, –1, 0) 
Cell Layout定义cell的形状
Rectangle矩形
Hexagon六边形
Isometric等距多边形,比如菱形

10.3 Tilemap Renderer

渲染tilemap 的信息,它俩是共存的

Sort Order设置所选Tilemap上tile的排序方向。
Mode渲染模式
    Chunk根据位置,把tile成组,成批渲染, 性能好
    Individual每个tile都单独渲染
Detect Chunk Culling BoundsRender检索bound的方式,它用来裁剪chunk,这些bounds扩展了Tilemap chunks 的边界,保证了越过chunk的sprite不会被裁剪
    Auto自动检索
    Manual手动输入bound
Chunk Culling Bounds手动输入的值

10.4 Tile asset

tile是一个asset,引用sprite,组成了tilemap,位置由给grid组件给出。

Collider TypeFunction
None不生成 Collider.
SpriteTilemap Collider 2D component 生成的Collider shape基于Sprite的形状,如果设置了 Custom Physics Shape,就基于它
GridTilemap Collider 2D component 生成的 Collider shape基于cell,它基于Grid组件的Cell Layout,矩形,六边形灯

10.5 Tile Palette

 Edit > Preferences > 2D > Tile Palette,画板的偏好设置

Target Edit Mode当选择一个tilemap的prefab编辑时,应该采取哪种形式,或弹框,告知进入prefab模式,还是直接在场景中编辑prefab的instance
Restore Edit Mode Active Target是否重置在运行时更改的操作

10.6 Tilemap workflow

  • 在场景中创建Tilemap,绘制好可以保存成prefab,默认添加一个带有Grid组件的父物体
  • 在Asset中创建 Tile Assets
  • 创建画板 Tile Palette 使用Tile Assets,使用笔刷绘制
  • 可以添加 Tilemap Collider 2D 来和Physics2D交互

10.6.1 Creating Tilemaps

GameObject > 2D Object > Tilemap,如果没有这个选项,需要安装2D Tilemap Editor插件

创建好后,可以调节grid组件

10.6.2 Creating Tiles

Pixels Per Unit (PPU) - 表示一个unity 单位所包含的像素数,一般设置成图片的宽度,一个unity 单位,就是一个格子,比如导入一个64x64 的sprite

从左至右PPU分别为:64、128、32

导入sprite之后,创建一个画板,把sprite拖拽到画板中,会自动创建tile assets

 如果删除了某个正在画板中使用的tile assets,画板中会以纯色表示

10.6.3 Creating a Tile Palette

Palette 也是一个asset,和tile 一样

Script笔刷的脚本,里面包含了一些绘制tile的方法,painting on Tilemaps,默认是GridBrush. 通过继承 Scriptable Brushes 自定义笔刷
Flood Fill Contiguous Only开启后只影响tilemap中和画板中相同的tile的tile,根据位置判断是否连续. 如果关闭,影响tilemap中所有的tile,只作用于Default Brush.
Lock Z Position是否锁住笔刷的z位置
Z Position定义笔刷z方向的位置,如果映射了z->y,就会影响tile的高度
  • 可以把prefab直接拖拽到pallete窗口里面,生成palette资源,条件是:
    • 该prefab不能是palette、最上层的父物体上有Grid组件

  • 第一个:选中表示该palette可以编辑,不选中表示不可编辑
  • 第二个:隐藏显示grid辅助工具
  • 第三个:隐藏显示选中palette的gizmo,如果要自定义palette的显示的icon,则给palette上添加个脚本,自定义 MonoBehaviour.OnDrawGizmos()​​​​​​

在工具栏上右键点击,会显示出菜单栏

Select Paint Target选择使用该palette创建的tilemap,在场景面板中的显示
Select Palette Prefab选择该palette prefab,在资源面板中显示
Select Tile Asset选择该palette使用的tile,在资源面板中显示
Unlock/Lock Palette Editing解锁/上锁 画板可编辑

10.6.4 Painting on Tilemaps

tilemap 是在场景面板中创建的,也就是Gameobject->2D->Tilemap

 

选择要绘制的tilemap

Visible icon

 Eye
隐藏/显示 tilemap

Picker icon

 Ping
在场景面板中,定位当前的tilemap,这个比较有用

 

这几个工具,是配合在Tilemap中使用的,比如画笔工具,就是在场景中进行绘制 

 

[顺时针旋转
]逆时针旋转
Shift+[沿x轴翻转
Shift+]沿y轴翻转
-
(Only available when Lock Z Position is disabled)
增加活动画笔的z轴位置. 
=
(Only available when Lock Z Position is disabled)
减少活动画笔的z轴位置. 

在tilpmap中整体平移删除操作,就像Excel一样

10.6.5 Tilemap Collider 2D

Max Tile Change Count每次更改tilemap,比如增加/删除tilemap都会增量构建一下新增tilemap的collider,这是数量是累加的数量,更改的数量达到这个之后,就会整体重新构建

Note: 设置的过大,增量构建耗费的时间要比整体构建耗费的还高,适当减少该值
Extrusion Factor设置每个tile的collider往外扩展的值,减少tile之间的缝隙
Note: 勾选 Used by Composite 才可用
Layer OverridesExpand for the Layer override settings.
Layer Override Priority设置该tilemap 碰撞体的优先级,如果和其他collider有冲突的话
Include Layers能和该collider交互的层
Exclude Layers不能和该collider交互的层
Force Send Layers交互能发送力的作用的层
Force Receive Layers交互能接收力的作用的层
Contract Capture Layers能捕获交互的层,先是能交互,还得能捕获
Callback Layers能接收回调的层,on trigger等
10.6.5.1 Tilemap and Composite Colliders

Tilemap Collider 2D 能和Composite Collider 2D 一起使用,Unity 会把所有tile的collider组合到一起.将平滑相邻tile的Collider之间的角和边。

同时使用这两个组件可以减少物理更新中单个Collider的数量,减少计算量,减少对性能的影响。

10.6.5.2 Scripting API tips

如果需要立即更改Collider,通过

Tilemaps.TilemapCollider2D.ProcessTilemapChanges 来处理  Tilemaps.TilemapCollider2D-hasTilemapChanges 检查是否更改了tilemap

10.7 Hexagonal Tilemaps

六边形地图相比四边形地图的优点:中心点到其六个邻居走的距离都是一致的,四边形不是。

上面分别是Hexagonal Point Top、Hexagonal Flat Top 

它们的区别就是:坐标计算方式不一样

10.8 Isometric Tilemaps

isometric 透视视角显示了  X, Y, and Z轴, 可以给tilemap添加伪深度和伪高度,策略类游戏也经常使用该地图,创建2.5D的游戏

Isometric Tilemap workflow

  1. Import and prepare Sprites for an Isometric Tilemap.
  2. Create an Isometric Tilemap.
  3. Create an Isometric Tile Palette.
    • Adjust the Z Position Editor while painting the Tilemap.
  4. 设置 Tilemap Renderer Mode 
    • 设置 Chunk Mode sorting 
    • 设置 Custom Axis Sort mode.
  5. 自定义 Scriptable Brushes 处理Z position的改变

10.8.1 Creating an Isometric Tilemap

GameObject > 2D Object > Isometric Tilemap/Isometric Z as Y Tilemap.

10.8.1.1 Custom Axis Sorting

自定义2D图像的排序,Isometric的贴图要达到3D的效果,比如深度越大的越先渲染,也就是从前往后渲染,要确保这个规则,就需要设置自定义渲染的轴

(0,1,0)表示按照y轴渲染,即y轴越大,越先渲染

 Isometric Z as Y Tilemap 就是把Z轴的大小映射到Y轴上,也就是按照Y轴+Z轴的大小,决定渲染顺序

Transparency Sort Axis 设置为 (0,1,–0.26),表示当y轴一样时,优先绘制较低Z位置的Tiles。

也就是透明的物体从前往后渲染,如果是正值,表示从后往前渲染

11. Scriptable Tiles

创建类,继承子TileBase或者TileBase的子类Tile,重写下面的方法:

  • RefreshTile:决定周围的tile怎么更新,当该tile添加到tilemap的时候
    .
  • GetTileData:获取tile的数据

通过 ScriptableObject.CreateInstance<YOUR_TILE_CLASS>()创建asset实例,

通过AssetDatabase.CreateAsset()创建资源实例

11.1 TileBase

public void RefreshTile(Vector3Int location, ITilemap tilemap)
  • 刷新tilemap指定位置的tile,默认调用tilemap.RefreshTile(location),刷新当前位置的tile 
public bool GetTileData(Vector3Int location, ITilemap tilemap, ref TileData tileData)
  • 返回tiledata,比如有4张sprite,根据位置,决定返回tiledata的类型
public bool GetTileAnimationData(Vector3Int location, ITilemap tilemap, ref TileAnimationData tileAnimationData)
  • 返回是否使用animation​​​​​​
public bool StartUp(Vector3Int location, ITilemap tilemap, GameObject go)
  • tile 获取数据的时候调用一次,go就是tiledata 

​12. Scriptable Brushes

创建类,继承自 GridBrushBase或者它的子类,比如 GridBrush,重写下面的方法:

  • Paint :绘制方法.
  • Erase :擦除方法.
  • FloodFill :油漆桶方法.
  • Rotate :旋转方法.
  • Flip :翻转方法.

通过 ScriptableObject.CreateInstance<(Your Brush Class>()创建实例;

通过 AssetDatabase.CreateAsset()传入上面的实例,生成asset

12.1 GridBrushBase

public virtual void Paint(GridLayout grid, GameObject brushTarget, Vector3Int position)
  • 在tilemap grid的position位置,把数据添加到brushTarget上​​
public virtual void Erase(GridLayout grid, GameObject brushTarget, Vector3Int position)
  •  擦除tilemap grid的position位置的brushTarget数据
public virtual void BoxFill(GridLayout grid, GameObject brushTarget, BoundsInt position)
public virtual void FloodFill(GridLayout grid, GameObject brushTarget, Vector3Int position)
  • 选择框选、油漆桶工具时,在tilemap bound position位置,把数据添加到brushTarget上​​
public virtual void Rotate(RotationDirection direction)
public virtual void Flip(FlipAxis flip)
  • 选择旋转、翻转时,触发
public virtual void Pick(GridLayout grid, GameObject brushTarget, BoundsInt position, Vector3Int pivot)
public virtual void Move(GridLayout grid, GameObject brushTarget, BoundsInt from, BoundsInt to)

public virtual void MoveStart(GridLayout grid, GameObject brushTarget, BoundsInt position)

public virtual void MoveEnd(GridLayout grid, GameObject brushTarget, BoundsInt position)
  • 在tilemap上移动position位置的tile时触发​​ 

12.2 GridBrushEditorBase

继承自该类,自定义笔刷的显示

public virtual GameObject[] validTargets

public virtual void OnPaintInspectorGUI()

public virtual void OnSelectionInspectorGUI()

public virtual void OnPaintSceneGUI(GridLayout grid, GameObject brushTarget, BoundsInt position, GridBrushBase.Tool tool, bool executing)

12.3 TilemapEditorTool

palette窗口的编辑工具栏,和选择、移动等一栏,继承该类自定义编辑工具

//工具的tooltip
protected abstract string tooltipStringFormat { get; }

//快捷键
protected abstract string shortcutId { get; }

//显示的图标
public virtual GUIContent toolbarIcon { get; }

//执行的功能
public virtual bool HandleTool(bool isHotControl, GridLayout gridLayout, GameObject brushTarget, Vector3Int gridMousePosition)

//是否可用
public override bool IsAvailable()

自定义的TilemapEditorTool可以在unity preference面板中的Tile Palette Preferences添加成默认的工具,也可以给特定的Grid Brushes添加 BrushTool属性,来指定特定的笔刷,才有这个工具

13. Rigidbody 2D

13.1 Rigidbody 2D body types

Unity 提供了三种body type,不同的类型,控制transform的方式也不同,如果更改了类型,则Unity 会在下次Fixed Update中更新

使用了刚体组件,就不要通过更改transform的方式改变位置了,通过力或者碰撞

13.1.1 Body Type: Dynamic

Body Type设置该物体是什么类型的Rigidbody
Dynamic动态的物体,实时的模拟它的运动和碰撞
Kinematic运动学,显示的控制运动的时候,才会模拟
Static静态的,不动的物体
Material对该物体上挂载的所有collider都使用该material,如果collider上单独赋值了,就覆盖该选项,可以在 Physics 2D 窗口,设置默认的material.
Simulated运行时,开启是否模拟运动,即碰撞
Use Auto Mass勾选上,就从collider2D上获取质量
Mass不勾选Use Auto Mass,质量
Linear Drag线性阻力,影响移动
Angular Drag旋转阻力,影响旋转
Gravity Scale定义物体对象受重力影响的程度
Collision Detection碰撞检测的方式
Discrete每帧检测,如果速度够快,有可能穿过
Continuous实时检测,不会穿过,耗性能
Sleeping Mode定义物体休眠的方式,节省处理时间
Never Sleep不休眠,耗性能.
Start Awake最初处于唤醒状态
Start Asleep选择此选项可以使GameObject最初处于休眠状态,但可以通过碰撞唤醒。
Interpolate物体在两次update之间怎么移动
None不移动
Interpolate根据上一帧的位置,平滑移动
Extrapolate根据预测下一帧的位置,平滑移动

13.1.2 Body Type: Kinematic

Dynamic Rigidbody 2D通过gravity和forces影响位置,旋转,Kinematic Rigidbody 2D不是,所以它模拟的更快

特点:

  • 通过Rigidbody2D.MovePosition or Rigidbody2D.MoveRotation显式控制移动和旋转,通过Physic.Raycast方法检测碰撞,然后更改其位置
  • 也可以动过velocity移动,但是不受力或者重力的影响 
  • 不会和其它Kinematic Rigidbody 2Ds、Static Rigidbody 2Ds发生碰撞,只和Dynamic Rigidbody 2Ds碰撞,它就像一个不可移动的对象,即质量无穷大,所以该类型下和质量相关的都不可用

Full Kinematic Contact开启后,可以和其它所有body type发生碰撞,不开启只和dynamic发生碰撞

Using Full Kinematic Contacts 

  • 开启后,可以和其他所有类型碰撞,只不过不受物理系统的影响,比如位置,需要显示的更新位置。
  • 关闭后,OnCollisionEnter, OnCollisionStay, OnCollisionExit 不会触发.
  • 当使用physics queries,比如 Physics.Raycast检测对象,不方便

Tips:Use Full Kinematic Contacts开启后,使用显式控制位置,但也能收到所有的碰撞事件所以可以考虑使用Kinematic Rigidbody 2Ds代替Dynamic Rigidbody 2Ds

13.1.3 Body Type: Static

静态对象,不能移动,只能和Dynamic类型发生碰撞,如果添加了collider,不显式添加rigidbody,默认添加的是static 类型的rigidbody

如果一堆static,把它们成组的去移动,比单独移动要快

13.2 Simulated属性

它表示是否开启模拟刚体运动,通过开关它,要比隐藏/显示collider效率要高

原因:

  • 开启、关闭该属性,更改的只是collider与rigidbody的联系,同时射线检测也检测不到,创建的collider、rigidbody对象还在内存中,
  • 开启、关闭collider,collider、rigidbody的对象就会重复的生成和销毁

14. Collider 2D

14.1 Circle Collider 2D

Is Trigger开启后,不会接受碰撞事件
Used by Effector开启后,该collider受Effector 2D的影响

14.3 Box Collider2D

Used by Composite开启后,会被Composite Collider 2D组件使用,一些属性会被覆盖

包括: MaterialIs TriggerUsed By EffectorEdge Radius.
Auto Tiling当sprite render的Draw ModeTiled.自动扩展collider,以适应sprite
Edge Radius设置一个值,在Collider的边缘形成一个半径。这将产生一个带有圆形凸角的更大的Collider 2D。缺省值为0(无半径)

14.4 Polygon Collider2D

多边形

14.5 Edge Collider 2D

它和polygon的区别就是,它不需要闭合

14.6 Capsule Collider 2D

胶囊

14.7 Composite Collider 2D

组合多边形,它会把物体的box collider,polygon collider的顶点合并成一个collider

Geometry Type选择合并的图形
Outlines和Edge Collider 2D一样
Polygons和Polygon Collider 2D一样
Use Delaunay MeshEnable this property to an additional Delaunay triangulation step to produce the Collider mesh.
Generation Type当组成的collider更改的时候后,如何更新collider外形
Synchronous立即更改
Manual手动更改,通过调用CompositeCollider2D.GenerateGeometry 方法,或者点点击 Regenerate Geometry 按钮
Vertex Distance控制点合并的最小距离,小于这个距离,就会被合并成一个点

15. ​​​​​​​2D joints

只能添加到rigidbody上,且它之作用于rigidbody,对rigidbody施加力,可以添加多个

15.1 Constraints of 2D joints

关节是通过力来约束rigidbody的行为,比如把两个物体连接在一起,如果对其中的一个物体,施加相反的力,当它大于约束的力,就会破坏joint,这是joint就会对rigidbody施加相反的力

  • 通过 Joint2D.breakForce and Joint2D.breakTorque设置临界的力和临界的扭矩
  • 通过 Joint2D.breakAction设置break joint时的回调,默认是销毁Joint2D组件,它在​​​​​​Joint2D.OnJointBreak2D(Joint2D)调用时调用
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    void OnJointBreak2D(Joint2D brokenJoint)
    {
        Debug.Log("A joint has just been broken!");
        Debug.Log("The broken joint exerted a reaction force of " + brokenJoint.reactionForce);
        Debug.Log("The broken joint exerted a reaction torque of " + brokenJoint.reactionTorque);
    }
}

15.2 Distance Joint 2D

让两个rigidbody,保持一定的距离

Enable Collision两个连接的gameobject之间是否可以碰撞
Connected Rigidbody设置连接的对象. None表示把连接的点,定在Connected Anchor 设置的值上
Auto Configure Connected Anchor自动设置连接的anchor,开启后,Connected Anchor就不用设置了

特点:

  • 没有扭矩约束,只有力的约束
  • 当勾选Max Distance Only时,绳子是松的,比如橡皮绳,不勾选时,是直的,比如两个轮胎

15.3 Fixed Joint 2D

让两个rigidbody保持相对的旋转和距离,就像弹簧一样

Damping Ratio设置抑制弹簧振荡的程度. In the range 0 to 1, 值越大,抑制程度越大,比如弹簧
Frequency当对象之间的距离接近初始距离时弹簧振荡的频率(圈/秒). In the range 0 to 1,000,000 - 该值越高,弹簧越硬. Note: Frequency为0,直接就定住了,就像把弹簧拉的很长松手

Fixed 和 Relative joints 2D之间的区别:

  • Fixed Joint 2D 是弹簧式joint. Relative Joint 2D is a motor-type joint with a maximum force and/or torque.
  • Fixed Joint 2D 使用弹簧维持相对的linear、angular偏移. Relative Joint 2D使用力
  • Fixed Joint 2D 通过anchor points,继承自Anchored Joint 2D,Relative Joint 2D 不包含anchor points,直接继承自Joint 2D
  • Fixed Joint 2D 运行时不能更改相对位置及偏移量. Relative Joint 2D可以

15.4 Friction Joint 2D

应用两个物体,之间有摩擦力,不管是旋转,还是运动,比如行走的车,后面挂了个减速伞

Max Force最大摩擦力,值越大,约不容易移动,比如推箱子
Max Torque最大旋转角度,值越大,约不容易移动,比如磨豆腐

15.5 Hinge Joint 2D

用于允许游戏对象围绕特定点旋转的joint,例如门铰链、轮子或钟摆。

示例:

  • 跷跷板枢轴,其水平部分与基座相连。使用关节的角度限制来模拟跷跷板运动的最高点和最低点。
  • 剪刀用铰链轴连接在一起的剪刀使用关节的角度限制来模拟剪刀的闭合和最大打开
Use Motor对关节施加力
Motor
Motor Speed设置旋转的速度,单位度每秒
Maximum Motor Force最大的扭矩力,已达到最大的速度
Use Limits
Angle Limits
Lower Angle设置旋转的最小角度
Upper Angle设置旋转的最大角度

15.6 Relative Joint 2D 

Max Force设置连接的GameObjects之间的线性(或直线)移动,A high value (up to 1,000) 使用强力维持偏移量。
Max Torque设置连接的游戏对象之间的角度(或旋转)移动. A high value (up to 1000) 使用强力维持偏移量
Correction ScaleTweak the joint to correct its behaviorif required. Increasing the Max Force or Max Torque may affect the joint’s behavior such that the joint doesn’t reach its target, requiring you to correct it by adjusting this setting. The default setting is 0.3.

15.7 Slider Joint 2D

大约有三种约束:

  • 在两个刚体对象上的两个锚点之间保持与指定直线的相对线性距离。
  • 在两个刚体对象上的两个锚点之间沿着指定的直线保持线速度. (速度受maximum force影响)
  • 两点之间沿指定直线保持直线距离

比如:

  • 一个可以上下移动的平台,当有东西落在平台上时,平台会向下移动,但绝不能向侧面移动. 

15.8 Spring Joint 2D

弹簧

15.9 Target Joint 2D

让两个joint point之间保持0距离,和上边的有重合的地方,只不过更方便

15.10 Wheel Joint 2D

车轮,允许悬挂,即上下摆动

16. Constant Force 2D

施加力的快捷方法,每次fixed update 都会施加个力

17. Effectors 2D

17.1 Area Effector 2D

进入到该区域的collider,会被施加一个力,就相当于创建一个力场

17.2 Buoyancy Effector 2D

该collider就类似一条河,能够浮起其他物体

Surface Level定义浮力作用的的表面位置。当一个GameObject在这条线上,没有浮力施加。当GameObject与这条线相交或完全低于这条线时,就会施加浮力。沿y轴的世界空间坐标的偏移量,Transform组件也可以对它缩放。
Density流体的密度. 高于此密度的collider,下沉
Linear Drag流体的线性阻力
Angular Drag流体的角度阻力
Flow Angle浮力的角度
Flow Magnitude浮力的力. 
Flow Variation浮力的随机变化量

17.3 Point Effector 2D

对进入到该区域的collider,施加一个新引力或者是爆破力,和Area有点像

Force Mode计算力的方式
        Constant不管距离多远,施加相同的力
        Inverse Linear和距离成反比
        Inverse Squared和距离的平方成反比,和重力相似

17.4 Platform Effector 2D

 它就像一个平台一样,消除当方面的碰撞效果,即不会发生反弹

Use One Way勾选表示使用单向碰撞行为。
Use One Way Grouping所有碰撞该platform的,都视为单向碰撞行为
Surface Arc这个弧线之外被认为是单向碰撞。
Use Side Frictionside是否应用摩擦力.
Use Side Bounceside是否应用弹力
Side Arc定义side

17.5 Surface Effector 2D

沿着碰撞器的表面施加切线力,类似于传送带。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/483008.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Nginx 全局块配置 user 指令详解

1. 前言 user 指令用于配置运行 nginx 服务器的 worker 进程的用户和用户组&#xff0c;这样对于系统权限的访问控制更加精细和安全 如果你修改过 nginx.conf&#xff0c;那么就会看到文件第一行的 user 指令配置&#xff0c;默认是被注释掉的&#xff08;默认使用 nobody 用户…

《边缘计算:连接未来的智慧之桥》

随着物联网、5G等技术的快速发展&#xff0c;边缘计算作为一种新兴的计算模式&#xff0c;正逐渐引起人们的广泛关注。边缘计算通过将数据处理和存储功能放置在距离数据产生源头更近的位置&#xff0c;实现了更快速、更可靠的数据处理和交换&#xff0c;为各行各业带来了前所未…

镁光的sdram手册阅读--MT48LCC16M16A2

镁光的sdram手册阅读–MT48LCC16M16A2 一、这个sdram的总容量是256Mb&#xff0c;MT48LC16M16A2对应的参数是&#xff1a;4Meg 16 4banks&#xff0c;也可表示为16M16。4164256Mbit。 1&#xff09;其中&#xff0c;4Meg表示单个bank包含的存储单元个数&#xff0c;计算公式…

架构整洁之道-读书总结

1 概述 1.1 关于本书 《架构整洁之道》&#xff08;Clean Architecture: A Craftsman’s Guide to Software Structure and Design&#xff09;是由著名的软件工程师Robert C. Martin&#xff08;又称为Uncle Bob&#xff09;所著。这本书提供了软件开发和架构设计的指导原则…

查看文件信息:ls,pwd,操作文件:cd,touch,mkdir,rmdir,rm,cp,mv

目录 ls 选项 -l -a 隐藏文件存在的意义 -F -d -R pwd cd 选项 ​编辑 touch 选项 mkdir 选项 -p rmdir 选项 -p rm 选项 cp 选项 -r -R (和-r的区别) mv 移动目录 改名 选项 rm改为mv ls 显示当前目录下的文件 选项 (可以合并使用,有的也可以写…

linux centos 安装jenkins,并构建spring boot项目

首先安装jenkins&#xff0c;使用war包安装&#xff0c;比较简单&#xff0c;注意看下载的版本需要的JDK版本&#xff0c;官网下载https://www.jenkins.io/download/ 把下载好的war包放到服务器上&#xff0c;然后运行&#xff0c;注意8080端口的放行 # 前台运行并指定端口 ja…

目标检测的指标评估

目标检测模型的评价指标主要用于衡量模型的性能&#xff0c;特别是它在定位和识别目标方面的准确性。以下是一些常见的评价指标&#xff1a; 1. 精确度 (Precision): 表示检测到的目标中&#xff0c;正确检测到的目标所占的比例。精确度高意味着模型产生的误报&#xff08;错误…

rabbitmq 3.9.29 docker mac 管理员页面无法打开

SyntaxError: Unexpected token ‘catch’ SyntaxError: Unexpected token ‘catch’ at EJS.Compiler.compile (http://127.0.0.1:15672/js/ejs-1.0.min.js:1:6659) at new EJS (http://127.0.0.1:15672/js/ejs-1.0.min.js:1:1625) at format (http://127.0.0.1:15672/js/main…

图床项目实战:从零搭建一个简易图床

项目背景与需求分析 随着互联网的发展&#xff0c;图片分享、存储和管理的需求日益增长。图床作为一种专门用于存储和分享图片的服务&#xff0c;受到了广大用户的欢迎。本项目旨在搭建一个简易的图床系统&#xff0c;满足用户上传、查看和删除图片的基本需求。 技术选型 本项…

微光图像增强算法学习记录(一)

微光图像增强&#xff08;LLIE&#xff09;旨在恢复照明并提高微光图像的可见性&#xff0c;本文对阅读的文献进行记录和分享&#xff0c;帮助回顾和大家建立学习资料。 文献一摘要及前沿摘选主要贡献网络结构实验结论 文献二摘要 文献三摘要主要贡献网络架构实验 文献四摘要实…

AGV|机器人导航识别二维码视觉传感器TDCS-0100与上位机PLC联机实例说明

目前二维码视觉导航的AGV出货量非常大&#xff0c;几乎都是仓储型AGV使用的导航方式。在地面或者天花板等位置标贴二维码作为标记点&#xff0c;通过扫描读取二维码信息和二维码相对相机的角度来确定当前位置。 本文重点介绍AGV|机器人导航识别二维码视觉传感器TDCS-0100与上位…

linux下线程分离属性

linux下线程分离属性 一、线程的属性---分离属性二、线程属性设置2.1 线程创建前设置分离属性2.2 线程创建后设置分离属性 一、线程的属性—分离属性 什么是分离属性&#xff1f; 首先分离属性是线程的一个属性&#xff0c;有了分离属性的线程&#xff0c;不需要别的线程去接合…

测试ALPHA开发板CAN1的设备树文件

一. 简介 前面一篇文章学习了 ALPHA开发板上的 CAN接口的设备节点信息&#xff0c;文章如下&#xff1a; ALPHA开发板修改CAN的设备树节点信息-CSDN博客 本文对设备树文件进行测试&#xff0c;即开发板加载 .dtb设备树文件。 二. 加载测试 CAN的设备树文件 1. 拷贝设备树…

认识String类

认识String类 前面我们学习了类和对象&#xff0c;这一小节咱们来谈String类 目录 认识String类前言一、String类的创建方式二、String引用类型的特点及方法1.存储内容2.String对象的比较3.字符串查找在这里插入图片描述4.转换&#xff08;一&#xff09;数字转为为字符串&…

Swift 结构化并发之全局 Actor 趣谈

概览 在 Swift 结构化并发构成的体系中,一个称为“演员”(Actor)的成员扮演了非常重要的角色,它被用来隔离和同步执行中的数据。 除了普通 Actor 以外,还有一个全局“演员”(Global Actor)的概念,它是做什么的?又有什么与众不同的长处呢? 在本篇博文中,您将学到如…

【Swagger】接口文档生成

文章目录 一、前后端分离开发流程二、YApi导入接口文档三、Swagger3.1 介绍3.2 使用步骤3.2.1 导入 knife4j 的maven依赖3.2.2 在配置类中加入 knife4j 相关配置3.2.3 配置类中设置静态资源映射3.2.4 访问测试 3.3 常用注解3.4 全局参数设置 四、YApi 与 Swagger 一、前后端分离…

网络安全实训Day8

写在前面 网络工程终于讲完了。这星期到了网络安全技术部分。 网络安全实训-网络安全技术 网络安全概述 信息安全&#xff1a;所有保障计算机硬件、系统、软件、数据不因有意或无意的行为导致的服务中断、数据损坏或丢失等安全事件的保障技术 网络安全&#xff1a;基于计算机…

Spark Stage

Spark Stage 什么是Stage Spark中的一个Stage只不过是物理执行计划其中的一个步骤&#xff0c;它是物理执行计划的一个执行单元。一个Job会被拆分为多组Task&#xff0c;每组任务被称为一个Stage&#xff0c;可以简单理解为MapReduce里面的Map Stage&#xff0c; Reduce Stag…

Oracle 使用OGG(Oracle GoldenGate) 实现19c PDB与MySQL5.7 数据同步

OGG 是一种基于日志的结构化数据复制软件&#xff0c;它通过解析源数据库在线日志或归档日志获得数据的增删改变化。 OracleMysqlIP address192.168.80.100192.168.80.16DB version19.2.05.7host nametempmysql OS version&#xff1a; CentOS 7.9 一&#xff0c;Oracle 服务…

文件上传二—WEB攻防-PHP应用文件上传中间件CVE解析第三方编辑器已知CMS漏洞

演示案例&#xff1a; PHP-中间件-上传相关-Apache&NginxPHP-编辑器-上传相关-第三方处理引用PHP-CMS源码-上传相关-已知识别到利用 #PHP-中间件-上传相关-Apache&Nginx 复现漏洞环境&#xff1a;vulhub &#xff08;部署搭建看打包视频&#xff09; 由于PHP搭建常用中…