【unity 3D】关于unity中制作绳子(Rope)的总结

    这几天因为项目需要,一直在搜寻和学习unity中关于绳子制作的资源。于是开始在CSDN、BaiDu、Bilibili上面找各种相关的资源,但是只是讲解了最基本的关于绳子的通用制作方法,即:绳子由若干个Gameobject(可以是Cube、Capusual、Cylinder etc.)拼接而成,而且每个Gameobject都添加了Hinge Joint(铰链关节)组件,每个Gameobject的Hinge Joint组件中的Connection Body属性都是它上面紧邻的Gameobject的Rigibody组件。接下来,我先介绍一下这种普遍的方法。

普通方法:

    先在unity场景中构建一个空的GameObject并更名为:RopeParent。在RopeParent目录下添加若干个Cube。

【unity 3D】关于unity中制作绳子(Rope)的总结_第1张图片

       接下来,我们在RopeParent上新建一个名为rope的脚本。

【unity 3D】关于unity中制作绳子(Rope)的总结_第2张图片 

         这个脚本的内容是:

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

public class rope : MonoBehaviour {

    //存储RopeParent的Rigibody组件
    internal Rigidbody RBody;
	// Use this for initialization
	internal void Start () {
        //给RopeParent添加Rigibody组件
        this.gameObject.AddComponent();
        //获取RopeParent的Rigibody组件并赋值给RBody
        this.RBody = this.gameObject.GetComponent();
        this.RBody.isKinematic = true;
        //RopeParent中子物体的数量
        //给每一个子物体都加上Hinge Joint组件
        int childcount = this.transform.childCount;
        for (int i = 0; i < childcount;i++) {
            Transform t = this.transform.GetChild(i);
            t.gameObject.AddComponent();

            HingeJoint hinge = t.gameObject.GetComponent();
            hinge.connectedBody = i == 0 ? this.RBody : this.transform.GetChild(i - 1).GetComponent();
            hinge.useSpring = true;
            hinge.enableCollision = true;
        }
	}	
}

    最后制作出来的结果是:如果你去拨动绳子,它会绕着一个点旋转。

   可是自己的项目需要这根绳子去跟随着其他的物体一起移动,但是上面的办法就不能够达到这样的效果。So。。。。经过漫长的尝试未果,决定。最后在Youtobe上找到了类似的教程。现在把方法总结如下:

   首先,Cube是用来模拟项目中绳子跟随移动的对象,每个Capsule都是绳子的每一个小结。

【unity 3D】关于unity中制作绳子(Rope)的总结_第3张图片

 

每个Capsule都有Character Joint组件, 而且组件上的Enable Projection的对勾要打上。每个Capsule上都有Rope脚本。

【unity 3D】关于unity中制作绳子(Rope)的总结_第4张图片

Rope脚本代码如下:

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

public class Rope : MonoBehaviour {

	// Use this for initialization
	void Start () {
        gameObject.GetComponent().connectedBody = gameObject.transform.parent.GetComponent();
	}
}

代码就是把当前绑定的Capsule的Character Joint组件的Connection Body设置成它的父部件的Rigibody。

这样一来上方立方体的移动也会带动绳子的移动。

效果是基本达到了,可是我现在还是一直不明白为什么绑定了Hinge Joint的物体只能绕某一个固定的点旋转而不能跟随父部件一起移动。希望走过路过的大神们能够帮我解答疑惑。

你可能感兴趣的:(Unity)