Unity中使用矩阵实现物体跟随

需求:

在某一特殊情况下,物体的子物体需要重新设置新的父物体,但还需要跟随原先物体移动。

1.搭建测试场景:

2.实现:

新建脚本TestFollow,代码如下:

cs 复制代码
public class TestFollow : MonoBehaviour
{
    public RectTransform moveItem;
    public RectTransform followItem;

    public Transform followItemParent;

    // 存储相对变换矩阵
    private Matrix4x4 offsetMatrix;

    void Start()
    {
        Matrix4x4 itemWorldMatrix = moveItem.localToWorldMatrix;
        Matrix4x4 thisWorldMatrix = followItem.localToWorldMatrix;

        // 计算相对矩阵:offset = child * parent^-1
        offsetMatrix = thisWorldMatrix * itemWorldMatrix.inverse;

        followItem.SetParent(followItemParent);
    }

    // Update is called once per frame
    void Update()
    {
        // 使用矩阵计算新的世界位置
        Matrix4x4 itemWorldMatrix = moveItem.localToWorldMatrix;
        Matrix4x4 newWorldMatrix = offsetMatrix * itemWorldMatrix;

        // 从矩阵中提取位置
        Vector3 newPosition = newWorldMatrix.GetColumn(3);
        followItem.position = newPosition;
    }
}

原理:

在游戏开始时计算原父物体与子物体的相对矩阵,在原父物体移动时,通过相对矩阵与原原父物体的世界位置,计算子物体的世界位置。

演示:

相关推荐
mxwin3 分钟前
Unity Shader BRDF双向反射分布函数
unity·游戏引擎
魔士于安14 小时前
unity完整项目走廊
游戏·unity·游戏引擎·贴图·模型
程序员正茂16 小时前
在Unity3d2021.3.35中实现MQTT异步客户端
mqtt·unity·异步
海海不瞌睡(捏捏王子)18 小时前
Unity YAML
unity·游戏引擎
海海不瞌睡(捏捏王子)20 小时前
Unity A*寻路算法
算法·unity
weixin_4239950020 小时前
unity 虚拟数字人-接讯飞虚拟人
unity·游戏引擎
小贺儿开发20 小时前
Unity3D 家居视频遥控效果演示
unity·udp·人机交互·网络通信·winform·远程·photon
mxwin1 天前
Unity URP 阴影映射 深度纹理、阴影采样与分辨率控制的深度解析
unity·游戏引擎·shader·着色器
amadeusCristina1 天前
Unity中生命周期调用时机
unity·游戏引擎
C蔡博士2 天前
Unity2D物理系统-从入门到实战优化
unity·游戏引擎·rigidbody2d