栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Unity3D

crossSection 盒子裁切闪烁问题

Unity3D 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

crossSection 盒子裁切闪烁问题

crossSection 盒子裁切闪烁问题

问题定位为鼠标坐标xyz导致出现的,和别人写的那个layer不一样

CappedSectionBox.cs

//The purpose of this script is to manipulate the scale and position of the capped section box gizmo object 
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

namespace WorldSpaceTransitions
{
    public class CappedSectionBox : MonoBehaviour, ISizedSection
    {

        //public LayerMask layer = 13;
        //[Space(10)]
        public Collider xAxis;
        public Collider xAxisNeg;
        [Space(10)]
        public Collider yAxis;
        public Collider yAxisNeg;
        [Space(10)]
        public Collider zAxis;
        public Collider zAxisNeg;

        private enum GizmoAxis { X, Y, Z, Xneg, Yneg, Zneg, XYRotate, XZRotate, YZRotate, none };
        private GizmoAxis selectedAxis;

        private RaycastHit hit;
        private Ray ray, ray1;
        private Plane dragplane;
        private float rayDistance, newRotY, rayDistancePrev, distance;
        private Vector3 lookCamera, startDrag, startPos, startDragRot, lookHitPoint, startScale;
        private bool dragging;
        private Vector3 Offset;

        // Use this for initialization
        void Start()
        {

        }

        // Update is called once per frame
        void Update()
        {

            if (Input.GetMouseButtonDown(0))
            {

                ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                dragplane = new Plane();

                RaycastHit hit;
                if (xAxis.Raycast(ray, out hit, 1000f))
                {
                    selectedAxis = GizmoAxis.X;
                    dragplane.SetNormalAndPosition(transform.up, transform.position);
                }
                else if (xAxisNeg.Raycast(ray, out hit, 1000f))
                {
                    selectedAxis = GizmoAxis.Xneg;
                    dragplane.SetNormalAndPosition(-transform.up, transform.position);
                }
                else if (yAxis.Raycast(ray, out hit, 1000f))
                {
                    selectedAxis = GizmoAxis.Y;
                    dragplane.SetNormalAndPosition(transform.forward, transform.position);
                }
                else if (yAxisNeg.Raycast(ray, out hit, 1000f))
                {
                    selectedAxis = GizmoAxis.Yneg;
                    dragplane.SetNormalAndPosition(-transform.forward, transform.position);
                }
                else if (zAxis.Raycast(ray, out hit, 1000f))
                {
                    selectedAxis = GizmoAxis.Z;
                    dragplane.SetNormalAndPosition(transform.up, transform.position);
                }
                else if (zAxisNeg.Raycast(ray, out hit, 1000f))
                {
                    selectedAxis = GizmoAxis.Zneg;
                    dragplane.SetNormalAndPosition(-transform.up, transform.position);
                }
                else
                {
                    //Debug.Log(hit.collider.name);
                    return;
                }
                distance = hit.distance;
                startDrag = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance));
                startPos = transform.position;
                startScale = transform.localScale;
                dragging = true;
            }

            if (dragging)
            {
                ray = Camera.main.ScreenPointToRay(Input.mousePosition);

                Vector3 onDrag = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance));

                Vector3 projectedTranslation = Vector3.zero;

                if (dragging)
                {
                    float lsx = startScale.x;
                    float lsy = startScale.y;
                    float lsz = startScale.z;

                    switch (selectedAxis)
                    {
                        case GizmoAxis.X:
                            {
                                Offset = new Vector3(onDrag.x, startDrag.y, startDrag.z);
                                Vector3 translation = Offset - startDrag;
                                projectedTranslation = Vector3.Project(translation, transform.right);
                                transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
                                lsx += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, transform.right));
                                break;
                            }
                        case GizmoAxis.Xneg:
                            {
                                Offset = new Vector3(onDrag.x, startDrag.y, startDrag.z);
                                Vector3 translation = Offset - startDrag;
                                projectedTranslation = Vector3.Project(translation, -transform.right);
                                transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
                                lsx += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, -transform.right));
                                break;
                            }
                        case GizmoAxis.Y:
                            {
                                Offset = new Vector3(startDrag.x, startDrag.y, onDrag.z);
                                Vector3 translation = Offset - startDrag;
                                projectedTranslation = Vector3.Project(translation, transform.up);
                                transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
                                lsy += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, transform.up));
                                break;
                            }
                        case GizmoAxis.Yneg:
                            {
                                Offset = new Vector3(startDrag.x, startDrag.y, onDrag.z);
                                Vector3 translation = Offset - startDrag;
                                projectedTranslation = Vector3.Project(translation, -transform.up);
                                transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
                                lsy += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, -transform.up));
                                break;
                            }
                        case GizmoAxis.Z:
                            {
                                Offset = new Vector3(startDrag.x, onDrag.y, startDrag.z);
                                Vector3 translation = Offset - startDrag;
                                projectedTranslation = Vector3.Project(translation, transform.forward);
                                transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
                                lsz += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, transform.forward));
                                break;
                            }
                        case GizmoAxis.Zneg:
                            {
                                Offset = new Vector3(startDrag.x, onDrag.y, startDrag.z);
                                Vector3 translation = Offset - startDrag;
                                projectedTranslation = Vector3.Project(translation, -transform.forward);
                                transform.position = startPos + 0.5f * (projectedTranslation.normalized * translation.magnitude);
                                lsz += translation.magnitude * Mathf.Sign(Vector3.Dot(projectedTranslation, -transform.forward));
                                break;
                            }

                    }

                    transform.localScale = new Vector3(Mathf.Clamp(lsx, 0.01f, Mathf.Infinity), Mathf.Clamp(lsy, 0.01f, Mathf.Infinity), Mathf.Clamp(lsz, 0.01f, Mathf.Infinity));

                    //foreach (UVScaler uvs in gameObject.GetComponentsInChildren()) uvs.SetUV();
                }

                if (Input.GetMouseButtonUp(0))
                {
                    dragging = false;
                }
            }
        }

        void OnDisable()
        {
            dragging = false;
        }

        public void HideCage(bool val)
        {
            foreach (PlaneHover ph in gameObject.GetComponentsInChildren()) ph.GetComponent().enabled = val;
        }
        public void HideCaps(bool val)
        {
            foreach (Transform quad in gameObject.transform) if (quad.name.Contains("hatch")) quad.GetComponent().enabled = val;
        }

        public void Size(Bounds b, GameObject g, BoundsOrientation orientation)
        {
            //Debug.Log(b.ToString());
            float scale = 1f;

            Vector3 clearance = 0.01f * Vector3.one;

            transform.localScale = Vector3.one;

            transform.localScale = scale * b.size + clearance;

            transform.position = b.center;
        }
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/900732.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号