精华内容
下载资源
问答
  • unity坐标吸附的大坑

    2020-11-20 12:01:02
    unity坐标吸附的大坑 Unity提供了一个顶点吸附快捷键v,可以通过使用这个快捷键将两个物体无缝的拼接起来,但是有些情况下会出现问题。 比如这个时候就出现了明显的缝隙,问题是相同材质相同物体在有些地方又不会...

    unity坐标吸附的大坑

    Unity提供了一个顶点吸附快捷键v,可以通过使用这个快捷键将两个物体无缝的拼接起来,但是有些情况下会出现问题。
    在这里插入图片描述

    比如这个时候就出现了明显的缝隙,问题是相同材质相同物体在有些地方又不会出现缝隙,通过研究发现问题在于物体position精度的问题。

    在这里插入图片描述
    这是上面两个物体的transform,可以看到它们的position只保留了两位小数,它们在使用V的时候最小的移动也只能0.01的移动,对于精度要求较高的物体就会产生缝隙。
    那哪些地方不会出现问题了?


    在这里插入图片描述
    这是它们的position,可以看到它们之所以能够合并是因为它们的position保留了4甚至5位小数。而这里也只是用了V键。同样的两个物体在不同的地方出现了这么大的不同。问题在于Unity的机制,它的position默认保留五位小数,当你的整数位有三位的时候,它默认操纵两位小数,如果整数位为一位,它会默认操纵四位小数,所以造成了相同操作在不同位置的差异。(如果position为五位数时甚至,每一下就直接移动1,空隙更大)。

    解决方案
    第一个方案
    当x较大或精度较高时,抛弃V快捷键,把它当作一个靠近的机制,手动精确调节位置。
    第二个方案
    把需要合并的物体在x(y,z)值小的地方合并再拉回去。
    第三个方案
    由于第二个方案想想实施起来有点麻烦,我研究出来一种方法,由于物体的position并不是它的世界坐标,而是它相对于父节点的坐标。而场景往往都是类似物体放在一个节点下,节点往往是(0,0,0).我们可以移动父节点。比如开始的两个物体的父节点是(0,0,0),如果把父节点设为(-380,0,0),那么它们的x坐标就应该是(-10.78)和(-3.92)这个时候就可以使用V合并了,依旧可以精确到小数点后四位。 以上方法各有利弊,选择合适的使用。

    展开全文
  • unity实现吸附功能的效果

    千次阅读 2020-07-07 09:50:59
    unity实现吸附功能的效果随笔 物体移动到墙体一定距离会被吸附到墙体上面 这个一定的距离根据代码 Vector3 scale = boxCol.transform.localScale+ new Vector3(1.4f,0,0); 来更改; 代码如下: using System....

    unity实现吸附功能的效果随笔

    物体移动到墙体一定距离会被吸附到墙体上面
    这个一定的距离根据代码
    Vector3 scale = boxCol.transform.localScale+ new Vector3(1.4f,0,0);
    来更改;

    代码如下:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    //using DG.Tweening;
    
    public class Wallcollision : MonoBehaviour
    {
    
        
    
            BoxCollider boxCol = null;
    
        private void Start()
        {
            boxCol = GetComponent<BoxCollider>();
        }
    
        private void Update()
        {
            DetectionBox();
        }
    
    
            void DetectionBox()
        {
            //为盒子的左右两边伸出来1.4f个向量长度用于我们检测碰撞
            Vector3 scale = boxCol.transform.localScale+ new Vector3(1.4f,0,0);
            //模拟的盒子中心点,x、y、z轴长度的一半
            Collider[] colliders = Physics.OverlapBox(boxCol.transform.position, scale / 2, boxCol.transform.rotation,LayerMask.GetMask("Detectcollisions"));
    
            print(colliders.Length);
    
            for (int i = 0; i < colliders.Length; i++)
            {
                print(colliders[i].name);
    
               //这只是一面墙体,其他方向类似,改轴向就是了
    
                //计算碰撞物体的z轴的一半宽度;
                float cube_z = colliders[i].GetComponent<MeshFilter>().sharedMesh.bounds.size.z;
                float scal_z = colliders[i].transform.lossyScale.z;
                float dqkd = cube_z * scal_z / 2;
    
                //计算墙体的x轴的一半宽度,
                float zqt_x = this.gameObject.GetComponent<MeshFilter>().sharedMesh.bounds.size.x;
                float zqtscal_x = this.transform.lossyScale.x;
                float qdkd = zqt_x * zqtscal_x / 2;
                
                //把这两个向量相加到时候我们物体作吸附运动就不会穿模,而是像吸附在墙上;
                float ydjl = dqkd + qdkd;
    
    
                //如果有DG.Tweening插件的朋友我建议用我注释的这行代码,毕竟有一个缓动效果;
                // colliders[i].transform.DOMove(new Vector3(colliders[i].transform.position.x, colliders[i].transform.position.y, this.transform.position.z - ydjl), 1);
                colliders[i].transform.localPosition = Vector3.MoveTowards(colliders[i].transform.localPosition, new Vector3(colliders[i].transform.position.x, colliders[i].transform.position.y, this.transform.position.z - ydjl), 2 * Time.deltaTime);
    
            }
    
        }
    
       
    
    }
    
    

    代码可直接拖拽使用,还有要设置碰撞检测层,我的碰撞检测层是Detectcollisions。

    至于被检测物体的移动的代码我就不写了;

    效果如下:
    000在这里插入图片描述
    这里注意我墙体的轴向,如果你和我不同略微更改一下代码就行了,我这里是提供一个思路;
    代码直接挂在绿色墙体就行了。

    展开全文
  • unity 自动吸附和对齐功能

    千次阅读 2019-05-30 13:50:35
    1.自动吸附 选中物体,再按住v键,移动物体。 2.父子物体中心对齐 子物体——transform_reste 3.grid layout Group

    1.自动吸附

    选中物体,再按住v键,移动物体。

    2.父子物体中心对齐

    子物体——transform_reste

     

    3.grid layout Group

    展开全文
  • 本文实例为大家分享了Unity实现ScrollView滑动吸附的具体代码,供大家参考,具体内容如下 最近在做一个展示模块的时候遇到了一个需要实现滑动窗口并且能固定吸附距离的需求,借助UGUI的ScrollView的API以及Dotween...
  • 本文实例为大家分享了Unity实现ScrollView滑动吸附的具体代码,供大家参考,具体内容如下最近在做一个展示模块的时候遇到了一个需要实现滑动窗口并且能固定吸附距离的需求,借助UGUI的ScrollView的API以及Dotween...

    本文实例为大家分享了Unity实现ScrollView滑动吸附的具体代码,供大家参考,具体内容如下

    最近在做一个展示模块的时候遇到了一个需要实现滑动窗口并且能固定吸附距离的需求,借助UGUI的ScrollView的API以及Dotween实现了这个功能。主要核心逻辑就是检测Content节点的RectTransform的localPosX的移动距离然后继承实现OnDrag几个接口来完成拖动再松开自动吸附到具体的位置。具体效果如下

    另外说一下有几个ScrollView自带的API需要设置一下,一个事Movement Type设置成Unrestricted,以及关闭Inertia,这样才能关闭ScrollView自带的最大距离移动控制不会导致在松手吸附过程中因为拖动距离大于了左右两边限制而最终的移动结束的坐标位置不对。

    下面贴一下代码,脚本直接附在Content物体上既可。

    Tip:代码里的450 225是一个子物体宽度的加上content的Space距离,我演示的工程师一个Image420的宽度 30的HorLayout Space,225则是这个距离/2,可以根据具体需求去改变由于只是为了出个DEMO就没有写成变量

    using System.Collections.Generic;

    using UnityEngine;

    using UnityEngine.EventSystems;

    using UnityEngine.UI;

    using DG.Tweening;

    using DG.Tweening.Core.Easing;

    using UnityEngine.Experimental.UIElements;

    public class ScorllViewAutoHandler : MonoBehaviour, IEndDragHandler, IBeginDragHandler, IDragHandler

    {

    private GameObject Scroll;

    private ScrollRect sc;

    private float OriginPosX;

    private float offsetX;

    private int CurIndex;

    private bool isDragging = false;

    private bool TimerFlag = false;

    private float Timer;

    // Start is called before the first frame update

    void Start()

    {

    CurIndex = 0;

    Scroll = this.gameObject;

    sc = Scroll.transform.parent.transform.parent.gameObject.GetComponent();

    }

    public void OnEndDrag(PointerEventData eventData)

    {

    int tempIndex=0;

    sc.OnEndDrag(eventData);

    offsetX = this.transform.localPosition.x - OriginPosX;

    if (Mathf.Abs(offsetX) % 450 < 225)

    {

    tempIndex = (int)(Mathf.Abs(offsetX) / 450);

    int _TempTargetIndex = 0;

    if (offsetX <0)

    {

    _TempTargetIndex = CurIndex + tempIndex;

    }

    else

    {

    _TempTargetIndex = CurIndex - tempIndex;

    }

    if (_TempTargetIndex >= 0 && _TempTargetIndex <= Scroll.transform.childCount - 1)

    {

    _TempTargetIndex = _TempTargetIndex;

    }

    else if (_TempTargetIndex < 0)

    {

    _TempTargetIndex = 0;

    }

    else

    {

    _TempTargetIndex = Scroll.transform.childCount - 1;

    }

    Debug.LogError("本次位移目标" + _TempTargetIndex + "初始" + CurIndex);

    this.transform.DOLocalMoveX(_TempTargetIndex*450, 0.5f).SetEase(Ease.OutBack);

    }

    else

    {

    tempIndex = (int)(Mathf.Abs(offsetX) / 450);

    tempIndex += 1;

    int _TempTargetIndex = 0;

    if (offsetX < 0)

    {

    _TempTargetIndex = CurIndex + tempIndex;

    }

    else

    {

    _TempTargetIndex = CurIndex - tempIndex;

    }

    if (_TempTargetIndex >= 0 && _TempTargetIndex <= Scroll.transform.childCount - 1)

    {

    _TempTargetIndex = _TempTargetIndex;

    }

    else if (_TempTargetIndex < 0)

    {

    _TempTargetIndex = 0;

    }

    else

    {

    _TempTargetIndex = Scroll.transform.childCount - 1;

    }

    Debug.LogError("本次位移目标" + _TempTargetIndex + "初始" + CurIndex);

    this.transform.DOLocalMoveX(_TempTargetIndex*450, 0.5f).SetEase(Ease.OutBack);

    }

    }

    public void OnBeginDrag(PointerEventData eventData)

    {

    sc.OnBeginDrag(eventData);

    OriginPosX = this.transform.localPosition.x;

    CurIndex = (int)(Mathf.Abs(this.transform.localPosition.x) / 450);

    offsetX = 0;

    //当鼠标在A对象按下并开始拖拽时 A对象响应此事件

    // 此事件在OnInitializePotentialDrag之后响应 OnDrag之前响应

    //Debug.Log("OnBeginDrag " );

    }

    public void OnDrag(PointerEventData eventData)

    {

    sc.OnDrag(eventData);

    //Debug.LogError("Dragging" );

    }

    }

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持云海天教程。

    原文链接:https://blog.csdn.net/wispy0206/article/details/108827309

    展开全文
  • unity开发格子吸附功能

    千次阅读 2019-03-12 09:22:19
    格子吸附功能适用:背包和摆放功能 先说背包,如果一个背包的格子有吸附作用的话,只要我们把一件物品摆放到格子的附近,就能自动调整到格子里面了。 实现方法:每个格子都是一个UI,都有自己的一个锚点,我们...
  • unity中的吸附小技巧

    千次阅读 2019-12-05 16:55:47
    在制作过程中常常要将两个物体“无缝对接”,但是只用鼠标移动很难去准确的...在两个物体位置有微小差别时怎么去吸附: 选中物体,按住V,就可以选择吸附的顶点,选中顶点后点击拖动到要吸附的顶点上就可以了
  • 最近在做一个展示模块的时候遇到了一个需要实现滑动窗口并且能固定吸附距离的需求,借助UGUI的ScrollView的API以及Dotween实现了这个功能。主要核心逻辑就是检测Content节点的RectTransform的localPosX的移动距离...
  • using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using DG.Tweening; ...public class CltUGUI : MonoBehaviour, IDragHandler, IBeginDragHandler,...
  • 画面中悬浮球可任意拖拽,拖拽结束后会靠在最近的屏幕边缘,会适应各种分辨率的情况。 利用锚点设置,工程代码见下载链接:... /// <summary>... /// 设置ui对象边距适应 ...par...
  • Unity中实现自动吸附的ScrollView

    千次阅读 2020-12-17 10:36:33
    /// /// 自动吸附的滑动列表 /// public class AutoAdsorbScrollView : MonoBehaviour, IBeginDragHandler, IEndDragHandler { private ScrollRect scrollRect;//滑动框组件 private RectTransform content;//滑动...
  • Unity物体接近时自动吸附

    千次阅读 2019-10-10 14:19:42
    移动的物体是LuoGan04 将其做成预制体,这时可以面板上把这个零件删除。然后在脚本中同样申请一个public变量,把目的地的预制体赋给它,在通过transform获取其position和rotation using System.Collections;...
  • using DG.Tweening; using KetosGames.SceneTransition; using UnityEngine.Events; using UnityEngine.UI; using System....//翻页吸附 public class SwitchPage : MonoBehaviour { private const float SMO
  • 通过HTCVive手柄发射射线控制物体的吸附效果,类似于帖在墙壁上的画框。1.首先编写手柄上的控制类:SteamVRControllerBase。通过手柄射线获得碰撞点的位置和法线方向using UnityEngine; using System.Collections; ...
  • 在有些屏幕空间比较局促的游戏中,可能会采用可活动的按钮,根据点击的位置灵活摆放按钮,为了不遮挡其他物体和UI,自动吸附在屏幕边缘。我们的游戏还提了一个多按钮呈半圆分布的需求。具体的代码如下: using DG....
  • 预览效果,切换过程顺滑使用最后一次滑动的方向来判定目标方向,如果朝某边偏移后往回移动,会返回到原来的位置支持代码设置索引直接跳转不需要手动设置宽度,自动根据当前子类来设置滑动距离,支持动态添加和删除...
  • 利用Scroll View控件做拖拽自动吸附居中效果 1、新建一个Scrool View控件,去掉两个Scroolbar,因为不需要; 然后在Viewport下建一个CenterPoint空对象跟Content同级作为中心位置用来比较; 最后给Content添加...
  • 需求是实现类似2d窗体的磁力吸附的效果,有一个背景板,其中的各个窗口会自动吸附加粗样式,先预览一下效果。 本来想的有有两种实现思路: 第一种是利用画网格的方法,将背板看成一个矩形区域,计算出每个网格...
  • 按住键盘上的V键,鼠标点击顶角,然后拖动对齐即可。
  • 移动的物体是LuoGan04 目标位置有local position 和旋转确定。Rotation就四元素,其可以把面板调为debug时,再查看。 但这样写会比较麻烦,一个改进的方案是把目的地的位置调好后,将其做成预制体,这时可以面板上...
  • 在不少游戏中都会有自动滚动的效果 ...他可以被我们拖动 而且 通过代码自动检测区域 然后吸附过去 实现过程 首先我们现在unity中搭建所要的Scrool View content上的组件 之后就是代码了 其中计算比较麻烦 仔
  • 预览效果,切换过程顺滑 支持代码设置索引直接跳转 不需要手动设置宽度,自动根据当前子类来设置滑动距离,支持动态添加和删除 使用方法: 0 新建脚本,重命名为Slider,复制代码保存 ...1 新建Scroll View控件,...

空空如也

空空如也

1 2 3 4
收藏数 77
精华内容 30
关键字:

unity吸附