zoukankan      html  css  js  c++  java
  • unityGame窗口绘制Box

    原文地址: https://blog.csdn.net/amnrwlm8593/article/details/102253392/

    Bounds bounds = GetComponent<BoxCollider>().bounds;

    Vector3 v3Center = bounds.center - transform.position;//此处减去GameObject本身坐标是为了在物体移动时,绘制的Box也跟着一起移动

    Vector3 v3Extents = bounds.extents;

    原文绘制Box和BoxColider位置不匹配,修改成下这两行就好了。

    Vector3 v3Center = collider.center;
    Vector3 v3Extents = collider.size*0.5f;

    using System;
    using System.Collections.Generic;
    using UnityEngine;
    public class ShowBoxColider : MonoBehaviour
    {
        //画线用的材质球
        Material lineMat;
    
        private Vector3 v3FrontTopLeft;
        private Vector3 v3FrontTopRight;
        private Vector3 v3FrontBottomLeft;
        private Vector3 v3FrontBottomRight;
        private Vector3 v3BackTopLeft;
        private Vector3 v3BackTopRight;
        private Vector3 v3BackBottomLeft;
        private Vector3 v3BackBottomRight;
        BoxCollider collider;
        // Use this for initialization
        void Start()
        {
    
        }
    
        // Update is called once per frame
        void Update()
        {
    
        }
    
        void OnEnable()
        {
            if (lineMat == null)
            {
                lineMat = Resources.Load<Material>("Materials/LineMat");
            }
            if (collider==null)
            {
                collider = GetComponent<BoxCollider>();
            }
            CalcBoxColliderPositons(collider);
        }
    
        void OnRenderObject()
        {
            if (!collider.enabled)
                return;
            CalcBoxColliderPositons(collider);
            lineMat.SetPass(0);
    
            GL.Begin(GL.LINES);
            GL.Color(Color.red);
            GL.Vertex(v3FrontTopLeft);
            GL.Vertex(v3FrontTopRight);
    
            GL.Vertex(v3FrontTopRight);
            GL.Vertex(v3FrontBottomRight);
    
            GL.Vertex(v3FrontBottomRight);
            GL.Vertex(v3FrontBottomLeft);
    
            GL.Vertex(v3FrontBottomLeft);
            GL.Vertex(v3FrontTopLeft);
    
            GL.Vertex(v3BackTopLeft);
            GL.Vertex(v3BackTopRight);
    
            GL.Vertex(v3BackTopRight);
            GL.Vertex(v3BackBottomRight);
    
            GL.Vertex(v3BackBottomRight);
            GL.Vertex(v3BackBottomLeft);
    
            GL.Vertex(v3BackBottomLeft);
            GL.Vertex(v3BackTopLeft);
    
            GL.Vertex(v3FrontTopLeft);
            GL.Vertex(v3BackTopLeft);
    
            GL.Vertex(v3FrontTopRight);
            GL.Vertex(v3BackTopRight);
    
            GL.Vertex(v3FrontBottomRight);
            GL.Vertex(v3BackBottomRight);
    
            GL.Vertex(v3FrontBottomLeft);
            GL.Vertex(v3BackBottomLeft);
            GL.End();
        }
    
        void CalcBoxColliderPositons(BoxCollider collider)
        {
           
            Vector3 v3Center = collider.center;
            Vector3 v3Extents = collider.size*0.5f;
    
            v3FrontTopLeft = new Vector3(v3Center.x - v3Extents.x, v3Center.y + v3Extents.y, v3Center.z - v3Extents.z);  // Front top left corner
            v3FrontTopRight = new Vector3(v3Center.x + v3Extents.x, v3Center.y + v3Extents.y, v3Center.z - v3Extents.z);  // Front top right corner
            v3FrontBottomLeft = new Vector3(v3Center.x - v3Extents.x, v3Center.y - v3Extents.y, v3Center.z - v3Extents.z);  // Front bottom left corner
            v3FrontBottomRight = new Vector3(v3Center.x + v3Extents.x, v3Center.y - v3Extents.y, v3Center.z - v3Extents.z);  // Front bottom right corner
            v3BackTopLeft = new Vector3(v3Center.x - v3Extents.x, v3Center.y + v3Extents.y, v3Center.z + v3Extents.z);  // Back top left corner
            v3BackTopRight = new Vector3(v3Center.x + v3Extents.x, v3Center.y + v3Extents.y, v3Center.z + v3Extents.z);  // Back top right corner
            v3BackBottomLeft = new Vector3(v3Center.x - v3Extents.x, v3Center.y - v3Extents.y, v3Center.z + v3Extents.z);  // Back bottom left corner
            v3BackBottomRight = new Vector3(v3Center.x + v3Extents.x, v3Center.y - v3Extents.y, v3Center.z + v3Extents.z);  // Back bottom right corner
    
            v3FrontTopLeft = transform.TransformPoint(v3FrontTopLeft);
            v3FrontTopRight = transform.TransformPoint(v3FrontTopRight);
            v3FrontBottomLeft = transform.TransformPoint(v3FrontBottomLeft);
            v3FrontBottomRight = transform.TransformPoint(v3FrontBottomRight);
            v3BackTopLeft = transform.TransformPoint(v3BackTopLeft);
            v3BackTopRight = transform.TransformPoint(v3BackTopRight);
            v3BackBottomLeft = transform.TransformPoint(v3BackBottomLeft);
            v3BackBottomRight = transform.TransformPoint(v3BackBottomRight);
        }
    }
    

      

  • 相关阅读:
    selenium 的页面对象模型Page Object
    PostMan的在线安装和简单使用
    用Jmeter对数据库执行压力测试
    常用的Linux系统命令
    摘:《自动化测试技术领航》
    WEB接口测试之Jmeter接口测试自动化 (四)(持续构建)
    WEB接口测试之Jmeter接口测试自动化 (二)(数据分离)
    WEB接口测试之Jmeter接口测试自动化 (一)(初次接触)
    性能测试篇 :Jmeter监控服务器性能
    UI自动化测试篇 :ReportNG替代TestNG自带html版测试报告初探
  • 原文地址:https://www.cnblogs.com/DazeJiang/p/14366811.html
Copyright © 2011-2022 走看看