####预制件
在Hierarchy中,选择对象
![](https://kuangstudy.oss-cn-beijing.aliyuncs.com/bbs/2024/01/13/kuangstudyea09bf41-0327-4f40-a159-4dac6103b8ec.png)
##添加碰撞体
双击对象打开预制件模式
Inspector->Add Component->Box Collider 2D
![](https://kuangstudy.oss-cn-beijing.aliyuncs.com/bbs/2024/01/13/kuangstudy3ac5086d-5534-42d6-a774-d8ed2a61b8d2.png)
##对象旋转问题
>告知 物理系统 不要旋转游戏对象
双击对象打开预制件模式
Inspector->Add Component->Rigidbody 2D->Constraints->Freeze Rotation
##对象抖动问题
###原因
![](https://kuangstudy.oss-cn-beijing.aliyuncs.com/bbs/2024/01/13/kuangstudyd2c8537e-fdfd-4052-a71d-bcda424d7979.png)
###解决
修改代码->移动刚体本身而不是游戏对象变换组件,并让物理系统将游戏对象位置同步到刚**置->物理系统在对象进入箱子之前停止移动,而不必在对象已经进入箱子之后再移动它
```c#
public class RubyController : MonoBehaviour
Rigidbody2D rigidbody2d;
//创建一个名为 rigidbody2d的新变量,用来存储刚体并从脚本中的任何位置访问刚体。
float horizontal;
float vertical;
//创建两个新变量来存储输入数据(需要在FixedUpdate函数中使用,原声明变量仅在Update函数中适用)
// 在第一次帧更新之前调用 Start
void Start()
//该函数内代码仅在游戏开始时执行一次
rigidbody2d = GetComponent
();
//通过GetComponent()获得游戏对象上的Rigidbody2D组件的引用,然后将其赋值给名为"rigidbody2d"的变量。
// 每帧调用一次 Update
void Update()
horizontal = Input.GetAxis("Horizontal");
vertical = Input.GetAxis("Vertical");
//用于读取输入
//角色移动相关代码移至FixedUpdate函数
void FixedUpdate()
Vector2 position = rigidbody2d.position;
//利用刚**置,代替原 游戏对象变换组件位置transform.position
position.x = position.x + 3.0f * horizontal * Time.deltaTime;
position.y = position.y + 3.0f * vertical * Time.deltaTime;
rigidbody2d.MovePosition(position);
//使用刚**置来设置新位置
/*这行代码会将刚体移动到你想要的位置
* 但如果刚体在移动中与另一个碰撞体碰撞
* 则会中途停止刚体。
##调整碰撞体大小
双击对象进入预制件模式
Inspector->Box Collider->Edit Collider 即可调整代表碰撞体的绿框大小
![](https://kuangstudy.oss-cn-beijing.aliyuncs.com/bbs/2024/01/13/kuangstudy421a91ef-ec4d-42f9-8f38-bb2c1947ec0d.png)
调整到一半是因为你的角色需要能够走到箱子“后面”
##瓦片地图碰撞
Hierarchy->Tilemap->Inspector->Add Component->Tilemap Collider 2D
![](https://kuangstudy.oss-cn-beijing.aliyuncs.com/bbs/2024/01/13/kuangstudy8936e86b-4889-4764-80e3-fd5f22f440a9.png)
###按瓦片删除碰撞
在Project窗口中,选中所有不需要添加碰撞的瓦片
Inspector->Collider Type(Sprite->None)
![](https://kuangstudy.oss-cn-beijing.aliyuncs.com/bbs/2024/01/13/kuangstudydb5c2ad2-4322-42c6-b4ca-1ae78e0ac17b.png)
###优化瓦片地图碰撞体
每个瓦片都是一个单独的碰撞体→创建一个大的碰撞体
Hierarchy->Tilemap->Inspector->Add Component->Composite Collider 2D
>会自动添加 Rigidbody 2D 组件,因为复合碰撞体需要 Rigidbody 2D 才能正常运行
Tilemap Collider 2D-> Used By Composite
Rigidbody 2D->Body Type->Static
>Static 将阻止你的世界移动