[计算机] Unity Unity3D之获取BoxCollider八个点的世界坐标

查看:1036 |回复:1 | 2019-11-18 00:13:29

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 胖纸_DHW 于 2019-11-18 09:36 编辑


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

public class Test03_8 : MonoBehaviour
{
   //8个标志位 ,用来在scene里预览
    public Transform[] points;
    //需要提取Boxcollier顶点的对象
    public BoxCollider cube;
    void Start()
    {
        //父节只能调节位置, 不能调节旋转和缩放。
        Transform parent = cube.transform.parent;
        while(parent!=null)
        {
            parent.localRotation = Quaternion.Euler(Vector3.zero);
            parent.localScale = Vector3.one;
            parent = parent.parent;
        }
    }

    void Update()
    {
        Vector3 [] veces = GetBoxColliderVertexPositions(cube);
        for(int i =0; i< veces.Length; i++)
        {
            points.transform.position = veces;
        }
    }  
    Vector3[] GetBoxColliderVertexPositions (BoxCollider boxcollider)
    {
        var vertices = new Vector3[8];
        //下面4个点
        vertices[0] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(boxcollider.size.x, -boxcollider.size.y, boxcollider.size.z) * 0.5f);
        vertices[1] = boxcollider.transform.TransformPoint( boxcollider.center + new Vector3(-boxcollider.size.x, -boxcollider.size.y, boxcollider.size.z) * 0.5f);
        vertices[2] = boxcollider.transform.TransformPoint( boxcollider.center + new Vector3(-boxcollider.size.x, -boxcollider.size.y, -boxcollider.size.z) * 0.5f);
        vertices[3] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(boxcollider.size.x, -boxcollider.size.y, -boxcollider.size.z) * 0.5f);
        //上面4个点
        vertices[4] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(boxcollider.size.x, boxcollider.size.y, boxcollider.size.z) * 0.5f);
        vertices[5] = boxcollider.transform.TransformPoint( boxcollider.center + new Vector3(-boxcollider.size.x, boxcollider.size.y, boxcollider.size.z) * 0.5f);
        vertices[6] = boxcollider.transform.TransformPoint( boxcollider.center + new Vector3(-boxcollider.size.x, boxcollider.size.y, -boxcollider.size.z) * 0.5f);
        vertices[7] = boxcollider.transform.TransformPoint(boxcollider.center + new Vector3(boxcollider.size.x, boxcollider.size.y, -boxcollider.size.z) * 0.5f);
        return vertices;
    }

}



584_2019111564603603.jpg

评分

参与人数 2元素币 +11 活跃度 +25 展开 理由
微凉. + 15 【点赞】这很有大网气质!
源支始 + 11 + 10

查看全部评分

2019-11-18 00:13:29  
 赞 赞 0

使用道具 登录

1个回答,把该问题分享到群,邀请大神一起回答。
2#
回复 收起回复
2023-2-25 11:58:49   回复
 赞 赞 0

使用道具 登录

CG 游戏行业专业问题

图文教程技术文章技术文库程序逻辑
显示全部 8
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表