精华内容
下载资源
问答
  • 怎么套绳索

    2010-01-19 22:08:16
    一条河环抱围绕着一个岛屿,岛屿上的中间地方有一颗大树,你在这条河的外面,怎样才能把一条绳索套在大树上? 注意:不能游过河到达小岛,不能空投,不能投掷。。。。。
  • Unity绳子/绳索效果

    千次阅读 2020-10-23 11:35:32
    但由于IOS14以上版本对代码审核非常严格,很多插件是无法使用的,只能自己写算法了,网上很多方法都是使用关节实现的绳子效果,绳子并非一条连贯的绳子,以下分享一实现的方式: 一、使用铰链关节(Hinge Joint)把...

    老规矩先上图:
    在这里插入图片描述

    最近在做一个做一个游戏,绳子缠绕在一起然后需要把绳子解开方能赢得游戏。因为需要用到一个绳子的效果,网了查了不少资料一方面是用插件Obi Rope 或 Megafiers 都可以实现,另一方面比较硬核的可以使用自己的算法也可以用关节什么的。

    但由于IOS14以上版本对代码审核非常严格,很多插件是无法使用的,只能自己写算法了,网上很多方法都是使用关节实现的绳子效果,绳子并非一条连贯的绳子,以下分享一实现的方式:
    一、使用铰链关节(Hinge Joint)把球体串起,保留Sphere Collider和Rigidbody。
    在这里插入图片描述
    二、随便找下物体挂上下面脚本,使物体可以被拖拽。

    using UnityEngine;
    
    public class MousePosHandle : MonoBehaviour
    {
        #region 公有变量
        //------------------------------------------------------------------------------------
    
        //------------------------------------------------------------------------------------
        #endregion
    
        #region 私有变量
        //------------------------------------------------------------------------------------
        private Transform dragGameObject;
        private Vector3 offset;
        private bool isPicking;
        private Vector3 targetScreenPoint;
        //------------------------------------------------------------------------------------
        #endregion
    
        #region 公有方法
        #endregion
    
        #region 私有方法
        //------------------------------------------------------------------------------------
        private void Update()
        {
            if (Input.GetMouseButtonDown(0))
            {
                if (CheckGameObject())
                {
                    offset = dragGameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, targetScreenPoint.z));
                }
            }
    
            if (isPicking)
            {
                //当前鼠标所在的屏幕坐标
                Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, targetScreenPoint.z);
                //把当前鼠标的屏幕坐标转换成世界坐标
                Vector3 curWorldPoint = Camera.main.ScreenToWorldPoint(curScreenPoint);
                Vector3 targetPos = curWorldPoint + offset;
    
                dragGameObject.position = targetPos;
            }
    
            if (Input.GetMouseButtonUp(0))
            {
                isPicking = false;
                if (dragGameObject != null)
                {
                    dragGameObject = null;
                }
            }
    
        }
        //------------------------------------------------------------------------------------
        /// <summary>
        /// 检查是否点击到cbue
        /// </summary>
        /// <returns></returns>
        bool CheckGameObject()
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hitInfo;
            if (Physics.Raycast(ray, out hitInfo, 1000f))
            {
                isPicking = true;
                //得到射线碰撞到的物体
                dragGameObject = hitInfo.collider.gameObject.transform;
    
                targetScreenPoint = Camera.main.WorldToScreenPoint(dragGameObject.position);
                return true;
            }
            return false;
        }
        //------------------------------------------------------------------------------------
        #endregion
    }
    

    三、 建模一个圆柱体网格大概是酱子,节不能太少因为绳子会不柔顺,也不能太多因为 性能会伤不起。
    在这里插入图片描述
    四、加了一个可爱的贴图
    在这里插入图片描述
    五、然后把球和网格放在一起。
    在这里插入图片描述
    六、创建MonoBehaviour,添加脚本并挂上对应物体,通过先找到所有球

    public MeshFilter TargetMesh;               //网格
    public Transform BallGroup;                 //球体集合(关节上所有球放这)
    private List<Transform> m_listBall;         //存放所有球体
    private List<MeshData> m_listMeshData;      //节点数据
    
    void Start()
     {
            m_listBall = new List<Transform>();
            foreach (Transform tran in BallGroup)
            {
                m_listBall.Add(tran);
            }
    }
    

    在这里插入图片描述

    七、提供一个方法,帮所有网格节点找到对应的球节点,网格自动寻找离自己最近的球为目标。

    private Transform __FindNearest(Vector3 v3)
        {
            if (m_listBall != null)
            {
                float MaxDis = 999999;
                Transform MaxTran = null;
                for (int i = 0; i < m_listBall.Count; i++)
                {
                    float curDis = Vector3.Distance(m_listBall[i].localPosition, v3);
                    if (curDis < MaxDis)
                    {
                        MaxDis = curDis;
                        MaxTran = m_listBall[i];
                    }
                }
                return MaxTran;
            }
            return null;
        }
    

    八、提供记录节点数据的数据结构

    public class MeshData
    {
        public int Index;               //索引
        public Transform target;        //目标球球
        public Vector3 offset;          //与目标球球位置差距
    }
    

    九、在Start中调用以下代码找到各节点的目标与位差信息

    m_listMeshData = new List<MeshData>();
            int totleMeshPoint = TargetMesh.mesh.vertices.Length;
            for (int i = 0; i < totleMeshPoint; i++)
            {
                MeshData data = new MeshData();
    
                data.Index = i;
                data.target = __FindNearest(TargetMesh.mesh.vertices[i]);
                if (data.target == null) Debug.Log("有空的");
                data.offset = TargetMesh.mesh.vertices[i] - data.target.localPosition;
                m_listMeshData.Add(data);
            }
    

    十、然后在Update调用以下方法,并拖动。你会得到下面的效果:

    	private void MoveMeshPoint()
        {
            Vector3[] v3 = TargetMesh.mesh.vertices;
            for (int i = 0; i < m_listMeshData.Count; i++)
            {
                MeshData curData = m_listMeshData[i];
                v3[i] = curData.target.localPosition+ curData.offset;
            }
            TargetMesh.mesh.vertices = v3;
        }
    

    在这里插入图片描述
    十一、跟着动了对吗?显然这还不是我们要的最终效果,优化一下加上这句,
    让位置着跟着球球旋转一下:

    Vector3 dir = curData.target.transform.TransformDirection(curData.offset);
    

    变成这样:

    private void MoveMeshPoint()
        {
            Vector3[] v3 = TargetMesh.mesh.vertices;
            for (int i = 0; i < m_listMeshData.Count; i++)
            {
                MeshData curData = m_listMeshData[i];
                Vector3 dir = curData.target.transform.TransformDirection(curData.offset);
                v3[i] = curData.target.localPosition + dir;
            }
            TargetMesh.mesh.vertices = v3;
        }
    

    在这里插入图片描述
    十二、完整代码:

    using System.Collections.Generic;
    using UnityEngine;
    
    public class TestMono : MonoBehaviour
    {
    
        public MeshFilter TargetMesh;               //网格
        public Transform BallGroup;                 //球体集合(关节上所有球放这)
        private List<Transform> m_listBall;         //存放所有球体
        private List<MeshData> m_listMeshData;      //节点数据
    
        void Start()
        {
            m_listBall = new List<Transform>();
            foreach (Transform tran in BallGroup)
            {
                m_listBall.Add(tran);
            }
    
    
            m_listMeshData = new List<MeshData>();
            int totleMeshPoint = TargetMesh.mesh.vertices.Length;
            for (int i = 0; i < totleMeshPoint; i++)
            {
                MeshData data = new MeshData();
    
                data.Index = i;
                data.target = __FindNearest(TargetMesh.mesh.vertices[i]);
                if (data.target == null) Debug.Log("有空的");
                data.offset = TargetMesh.mesh.vertices[i] - data.target.localPosition;
                m_listMeshData.Add(data);
            }
        }
    
        // Update is called once per frame
        void Update()
        {
            MoveMeshPoint();
        }
    
        private void MoveMeshPoint()
        {
            Vector3[] v3 = TargetMesh.mesh.vertices;
            for (int i = 0; i < m_listMeshData.Count; i++)
            {
                MeshData curData = m_listMeshData[i];
                Vector3 dir = curData.target.transform.TransformDirection(curData.offset);
                v3[i] = curData.target.localPosition + dir;
            }
            TargetMesh.mesh.vertices = v3;
        }
    
    
    
        private Transform __FindNearest(Vector3 v3)
        {
            if (m_listBall != null)
            {
                float MaxDis = 999999;
                Transform MaxTran = null;
                for (int i = 0; i < m_listBall.Count; i++)
                {
                    float curDis = Vector3.Distance(m_listBall[i].localPosition, v3);
                    if (curDis < MaxDis)
                    {
                        MaxDis = curDis;
                        MaxTran = m_listBall[i];
                    }
                }
                return MaxTran;
            }
            return null;
        }
    
    }
    
    public class MeshData
    {
        public int Index;               //索引
        public Transform target;        //目标球球
        public Vector3 offset;          //与目标球球位置差距
    }
    
    

    有问题请与我取得联系。
    Demo地址:
    https://download.csdn.net/download/ww1351646544/15345650

    展开全文
  • Obi+Rope是款利用插件制作绳索的工具,可以很方便的做出有弹性的绳子 橡胶 铁链
  • [中文]Unity 绳索教程

    2021-01-05 17:11:43
    Unity Ultimate Rope Editor 绳索插件,点我下载 1.Unity顶部菜单 Gameobject—Creat Rope 2.创建3个Cube,调整位置,当然你也可以使球,胶囊或者是空物体,这里只是为了做标识,摆放如图所示。 3.根据自己需求...

    Unity Ultimate Rope Editor 绳索插件,点我下载,访问码 i5uu

    1.Unity顶部菜单 Gameobject—Creat Rope
    在这里插入图片描述
    2.创建3个Cube,调整位置,当然你也可以使球,胶囊或者是空物体,这里只是为了做标识,摆放如图所示。
    在这里插入图片描述
    3.根据自己需求调整一下参数,下面做一下部分参数功能介绍。稍微调不好可能就会“漫天飞舞”,所以适当的增加绳子的质量和链接间的最大作用力可能会有更好的效果。

    Rope Layer
    绳子可以设置层级。

    Rope Type
    Procedural
    Linked Objects
    Import Bones
    绳索类型,有三种,第一种是程序的,第二种是锁链的,第三种是骨骼的
    使用绳子选第一种,使用锁链选第二种,骨骼最后

    Rope Start
    开始的点

    Rope Diameter
    绳子的粗细程

    Diameter ScaleX / ScaleY
    X/Y方向的粗细放缩放度

    Rope Sides
    面数的复杂程度,面数越多越平滑

    Rope Material
    绳子的材质

    Rope Section Material
    部分材质,一些拐角处的材质,比如绳子断了之后的材质或者内部材质

    Enable Prefab Usage
    是否将自定义好的绳子做成预制体(做成预制体后变成死模型)

    Is Extensible
    是否拓展

    Rope segment 0
    绳子的片段,可以点击Add增加,两点确定一条线,所以每一段都有个段的终端点。

    Segment End
    一段绳子的终端点

    Length
    绳子长度(最好不要超过起点和终端点的距离)

    NumLinks
    联接数量,绳子的关节数量

    Collider Type
    碰撞类型

    Link Mass
    绳子的质量

    Link Solver Iteration
    绳子解算器,值越高绳子的仿真度越强,当然越吃性能。
    当值很高的时候,由于甩的过度用力穿透碰撞卡住了,这个解算器就可以把绳子解算出来。

    Link Joint Angular X/Y/Z
    各个轴的弧度限制

    Link Joint Spring
    关节弹性,值越大,弹性越强。

    Link Joint Damper
    关节阻力,值越大关节间阻力越大

    Link Joint Max Force
    链节间的最大力。值越大,绳子越紧

    Link Joint Break Torque
    链节断裂扭矩

    Lock Start/End ZAxis
    锁定起始于终止节点处的旋转

    Send Rope Events
    是否发送绳子断裂触发事件,可以自己写触发事件,比如绳子断了,物体受重力影响掉下去了。

    Events Object Receive
    接收事件的游戏物体

    Break Event Method
    断裂触发的方法名

    Persist after playmode
    坚持当前设置的值,在运行时绳子处于什么状态,停止后再运行时就是什么状态,不会恢复默认状态

    Reset rope
    刷新绳索

    Delete rope
    删除当前绳索

    Convert to static mesh
    将当前绳索生成并保存成一个静态的模型,不可以在引擎运行状态下保存。

    在这里插入图片描述

    展开全文
  • 演示有一条简单的绳索,或更像是一条链,它由通过销接头相互连接的节点组成。 该演示的提出了很多对源代码的请求,因此我决定在Github中共享它。 注意:源代码用于演示,因此,如果在产品或游戏中使用它,请记住...
  • MAX Reactor之绳索

    千次阅读 2013-06-16 16:32:53
    reactor中的绳子是维的可变形体。用它可以模拟绳子、弹簧、头发等物体运动的效果 绳子编辑修改器能够将3ds max中的spline样条曲线转换为reactor中的绳子(系列的可变形维控制点)。有两种方式为选中的...

    reactor中的绳子是一种一维的可变形体。用它可以模拟绳子、弹簧、头发等物体运动的效果

    绳子编辑修改器能够将3ds max中的spline样条曲线转换为reactor中的绳子(一系列的可变形一维控制点)。有两种方式为选中的对象施加绳子编辑修改器:

    (1)在菜单栏中单击reactor—Apply Modifier—Rope Modifiers 。
    (2)在reactor工具栏中击 Apply Rope Modifier按钮。

    此时修改命令面板中会出现绳子编辑修改器的参数卷展栏,共有两个,其中constrainte (约束卷展栏与布料编辑修改器的相同)

    Thickness (厚度):为绳子指定厚度,厚度为0的绳子在模拟时将不
    可见。

    Rope Type (绳子类型)选项组:
    Spring (弹簧):默认的绳子类型。
    Stiffiiess (硬度):设置弹簧的硬度。
    Damping (阻尼):设置弹簧的阻尼。
    Num Weaves:用来设置绳子允许的弯曲程度,此值越大,绳子越不
    易弯曲。
    Keep Shape (保持形状):,选中此复选框时,绳子将力图保持其初 始形状;其效果取决于Num Weaves的值,该值越大,绳子保持原状
    的能力越强。
    Constraint (约束):这种绳子类型更简单、模拟时的开销更小,它不会像弹簧那样因外力而拉长,而是像普通的绳子一样不能伸缩。

    Rope Collection (绳子收集器)
    绳子收集器是reactor的辅助工具,它的作用是作为绳子的容器。场景中任意一个有效的绳子均可被添加到绳子收集器中,不被添加的绳子将不会被模拟。

    创建绳子收集器的方法有以下3种:
    (1) 打开创建命令面板,选择Helpers—reactor,单击RPCollection,
    (2) 在菜单栏中选择reactor—Create Object—Rope Collection
    (3) 在reactor工具栏中单击國Create Rope Collection按钮。
    使用以上任意一种方式,在任意一个视图中单击鼠标即可创建一个绳子收集器,它的位置不会影响其作用。

    注意:绳子修改器只对线条起作用,而对几何体无作用。
    展开全文
  • JAVA算法:连接绳索的最小成本 有n根不同长度的绳子,我们需要把这些绳子连接成一根绳子。连接两根绳子的费用等于它们的长度之和。我们需要以最低的成本连接绳索。...现在我们有两长度为6和9的绳子。 3)...

    JAVA算法:连接绳索的最小成本

    有n根不同长度的绳子,我们需要把这些绳子连接成一根绳子。连接两根绳子的费用等于它们的长度之和。我们需要以最低的成本连接绳索。

    例如,如果我们有4根绳子,长度分别为4、3、2和6。我们可以用以下方法连接绳子。

    1)首先连接长度为2和3的绳索。现在我们有三根绳子,长度分别是4、6和5。

    2)现在连接长度为4和5的绳索。现在我们有两条长度为6和9的绳子。

    3)最后连接两条绳索,所有绳索都已连接。

    所有绳索的连接总成本为5+9+15=29。这是连接绳索的最佳成本。其他连接绳索的方法总是有相同或更多的成本。例如,如果我们先连接4和6(我们得到3、2和10的三个字符串),然后连接10和3(我们得到13和2的两个字符串)。最后我们连接13和2。这样的总成本是10+13+15=38。

    问题分析

    如果我们仔细观察上述问题,我们可以注意到,首先挑选的绳索长度包含在总成本中不止一次。因此,我们的想法是先连接最小的两条绳子,然后对剩余的绳子进行循环。这种方法类似于哈夫曼编码。我们把最小的绳子放在树上,这样它们就可以重复多次,而不是更长的绳子。

    下面是一个完整的算法,用于寻找连接n根绳索的最低成本。

    让一个数组len[0..n-1]中存储n条长度的绳子。

    1)创建一个最小堆,并将所有长度插入最小堆。

    2)当min堆中的元素数不是1时执行以下操作。

    ……a)从最小堆中提取最小值和第二个最小值

    ……b)将上述两个提取值相加,并将其插入min堆。

    ……c)保持总成本的变量,并不断增加提取值之和。

    算法设计

    package com.bean.algorithm.basic;
    
    import java.util.PriorityQueue;
    
    public class ConnectRopes {
    	// Java program to connect n
    	// ropes with minimum cost
    
    	static int minCost(int arr[], int n) {
    		// Create a priority queue
    		PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
    
    		// Adding items to the pQueue
    		for (int i = 0; i < n; i++) {
    			pq.add(arr[i]);
    		}
    
    		// Initialize result
    		int res = 0;
    
    		// While size of priority queue
    		// is more than 1
    		while (pq.size() > 1) {
    			// Extract shortest two ropes from pq
    			int first = pq.poll();
    			int second = pq.poll();
    
    			// Connect the ropes: update result
    			// and insert the new rope to pq
    			res += first + second;
    			pq.add(first + second);
    		}
    
    		return res;
    	}
    
    	// Driver program to test above function
    	public static void main(String args[]) {
    		int len[] = { 4, 3, 2, 6 };
    		int size = len.length;
    		System.out.println("Total cost for connecting" + " ropes is " + minCost(len, size));
    
    	}
    }
    

    程序运行结果

    Total cost for connecting ropes is 29

     

    展开全文
  • 类似绳索的链子用C#模拟实现

    千次阅读 2014-01-19 10:52:22
    为了实现类似于物理引擎中的关节连接的效果,但是又不想用那臃肿的引擎因为好多的费时费力的效果都用不到,就想自己实现一个类似的效果,其实目的是为了一个游戏的的特殊效果,大概是类似于一条蛇的动物的爬行或者是...
  • 绳索数据结构(字符串快速拼接)

    千次阅读 2017-05-24 23:44:07
    原文地址:Ropes Data Structure (Fast String Concatenation)字符串连接是种十分常见的操作。...绳索数据结构绳索个二叉树,这个二叉树的节点包含除叶子节点以外,节点左边字符的个数。叶子节点包含的是字
  • 花webgl 描述 这是个以朴素的风格绘制花田的项目。 随着时间的流逝,每朵花都会因风而失去花瓣,最终...每条绳索仅由几个部分组成,因为我认为它给出了更多有趣的动作。 但是,我仍然希望茎看起来平滑,因此在绘制
  • 放下,给爱一条生路

    2015-05-13 09:18:22
    因爱而生的恨是这个世界上最长的绳索,它可以捆绑你一辈子,放下你的恨,给爱一条生路,既是给自己松帮,也是给别人松绑,那样,你才会好好爱自己,也会好好爱别人。  ——题记  【空牵念】  男人很爱女人,...
  •  激励开发人员就好比是像要向前移动绳索,最好的办法不是在绳子的这一端推而是在另外一端拉。 如果对工作人员激励不到位,也不管他们工作时间多长,管理者将得不到40小时的产出.因为很有可能他们上本只是为了...
  • 运营不是面对一个功能或一项技术,是面对一个个活生生的人,..." 数据是运营的基础,就像一条绳索,贯穿整个运营工作。它既是运营 KPI 考核的直接呈现方式,同时也是运营方向的理论支撑点 "。运营产生数据,数据支撑...
  • 村长养了一条

    2007-02-01 18:44:53
    村长平四养了一条狼狗,刘勤民也养了一条狼狗。村长平四和刘勤民都到晒谷场上去遛狗,村长口里衔着烟,拿眼看刘勤民的狗。村里人围拢来,围住村长的狗,都啧啧啧,都说多好的狗呀,多神武的狗呀,你们看看刘勤民的狗...
  • unity实现绳子效果(绳索插件Obi Rope)

    千次阅读 热门讨论 2020-10-23 16:03:46
    } } 三,绳索效果 上述两点说得是,如何创建并渲染一条绳子,但此时的绳子可能存在弹力比较大,质量比较重,摩擦力不够等等问题,以至于并不能满足你的项目需要。文章开头我们说,这个插件实现绳索的原理是通过一些...
  • 三维骨骼动画初探(绳索

    千次阅读 2014-07-18 17:40:29
    项目需要实现段万用表使用过程的动画
  • Ultimate+Rope+Editor+1.18绳索插件学习文档 插件分享: 链接:https://pan.baidu.com/s/1i6VzCup 密码:a4eo 、绳子主要控制脚本组件Ultimate Rope  1.Rope Layer:设定绳子的层Layer  2.Rope Physic ...
  • 、注意事项 OBI插件导入后将Obi文件夹下的Editor Default Resources和Gizmos文件移动到Assets下。 二、使用流程 创建Obi Rope(GameObject -> 3D Object -> Obi-> Obi Rope(fully se...
  • 磁共振成像(MRI)系统能够提供清晰的人体组织图像,系统检测并处理氢原子在强磁场中受到共振磁场激励脉冲的激发后所...如同一条绳索在外部张力作用下发生共振。在典型的1.5T MRI磁场中,氢原子的共振频率近似为64MHz。
  • 关于有向图强连通分量详细知识可以从上一篇文章中找(包你满意)。题目大意:奶牛能表演圆舞.需要一些绳索和一个圆形的...有的奶牛可能握有很多绳索,也有的奶牛可能一条绳索都没有握。比如说贝茜,她的圆舞跳得是否成
  • 这个百度转型做门户的个必要条件。以为在很多人眼里,互联网新闻=门户网站,百度要做门户,新闻必然是不可或缺的。 但是,有了网络新闻牌照的百度,就门户了吗?就踏上了社会主义的康庄大道了吗? 我看未必。 在我...
  • Google 员工架飞索去总部蹭饭

    千次阅读 2008-10-29 21:06:00
    今年8月,Google 搬到了 Mountain View 的另一栋新建筑,位于 Google 总部...于是,有人提议架一条飞索,越过中间的小河,连接两个园区,一个星期五的下午,一个叫 Doug 员工买了一条绳索,周六那天,飞索就架成了。
  • 年8月,Google 搬到了 Mountain View 的另一栋新建筑,位于 ... 于是,有人提议架一条飞索,越过中间的小河,连接两个园区,一个星期五的下午,一个叫 Doug 员工买了一条绳索,周六那天,飞索就架成了。按照 Google
  • 四 人 过 桥

    2014-04-08 17:31:43
    有好心人在两岸连起一条绳索,横空挂在独木桥上方。  四个人来到岸边:一个盲人,一个聋哑人和两个健康人。他们都有急速要到对岸去。聋哑人不言不语,迈步上桥,摇摇晃晃中到了对岸。一个健康人引导着盲人,...
  • 我们知道,Cocos Creator内置的物理引擎有RopeJoint组件,可以帮助我们做根普通的绳子,废话不多说,直接开始。 首先看一下RopeJoint组件的属性: 上图中的Connected Body是当前节点连接的锚点,什么意思呢,举个...
  • 今天想用物理引擎实现个柔软可弯曲的绳子。首选(也不知道还能选啥)当然是用cocos物理引擎的RopeJoint(绳子关节)。 绳子关节的作用是保持两端刚体的距离最大值,简单地说,就是我用绳子关节链接了两个刚体,设置...
  • 2008-05-04 06:05:46
    钱是什么东西 没有确切答案钱是什么东西 没有具体意义打开钱的外衣 剥去钱的表皮赤裸裸的肉体 铜臭味扑鼻钱是什么东西 我一直在寻找谜底钱是什么东西 我常常探讨这个问题钱是一条绳索 捆住人的手脚让你无法伸展四肢 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,897
精华内容 758
关键字:

一条绳索