导入

1.创建工程

2.导入joint_scene.unitypackage

3.运行发现机械爪子摇来摇去,因为line节点下面的子节点之间相互碰撞带动的关系

4.为了消除这种乱摇,我们在右上角添加一个catch层,把line节点整个设置成catch层,然后在Edit---->Project Settings---->Physics---->碰撞矩阵里面设置catch层和catch层不碰撞

5.重新运行,机械爪子正常

原理

机械爪子正常之后,发生它上下来回运动,慢慢停下来,但是它的子节点之间又不是弹簧关节,而是固定关节,确实是比较神奇的一个点。

这个神奇的点是这样实现的,首先我们要把几个物体彼此连在一起,要有陷入的那种连接,然后彼此之间的连接都设置为固定关节,把质量调大一点10,最上面那个物体固定坐标,运行,就会有弹簧的效果。

代码解释

Line.position = Line.position + offsetPosition * 1.2f * Time.deltaTime;

速度x时间=距离

距离x方向=坐标偏移量

1.2f是速度

Time.deltaTime是时间

offsetPosition是方向

控制机械爪子的脚本JointControl是挂载在MainCatcher节点下的

JointControl内容是:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems; public class JointControl : MonoBehaviour {
public Transform[] claws0; //爪子一级支节
public Transform[] claws1; //爪子二级支节
public Transform[] claws2; //爪子三级支节 private float angle; //爪子打开或合拢的角度
private float offset; //角度步长 public Transform Line; //绳子对象
private Vector3 offsetPosition; //绳子移动步长 private bool isMove; //绳子移动标志位 void Start () { angle = ; //默认爪子为开启
}
void Update () {
if (angle + offset >= && angle + offset < ) { //爪子可进行操作
for (int i = ; i < ; i++) { //进行开启或合拢
claws0[i].Rotate(Vector3.left, offset * 2.5f, Space.Self); //三级支节分别进行操作
claws1[i].Rotate(Vector3.left, offset * 0.2f, Space.Self);
claws2[i].Rotate(Vector3.left, offset * 1.8f, Space.Self);
}
angle += offset;
}
if (isMove) { //移动绳子
// Line.position = Vector3.Lerp(Line.position, Line.position + offsetPosition * 1.2f, Time.deltaTime * 1.2f);
Line.position = Line.position + offsetPosition * 1.2f * Time.deltaTime;
} this.ctrl_update();
}
public void ControlCatcher(int i) { //开启或合拢爪子监听方法
offset = i == ? -0.2f : 0.2f;
}
public void MoveCatcher(int i) { //移动绳子监听方法
Vector3[] poses = new Vector3[] {Vector3.forward, Vector3.back, Vector3.left, Vector3.right, Vector3.up, Vector3.down};
offsetPosition = poses[i];
isMove = true;
} public void MoveButtonUp() { // 按钮抬起监听方法
isMove = false;
} void ctrl_update() {
if (Input.GetKeyDown(KeyCode.UpArrow)) {
this.MoveCatcher();
}
else if (Input.GetKeyDown(KeyCode.DownArrow))
{
this.MoveCatcher();
}
else if (Input.GetKeyDown(KeyCode.LeftArrow))
{
this.MoveCatcher();
}
else if (Input.GetKeyDown(KeyCode.RightArrow))
{
this.MoveCatcher();
}
else if (Input.GetKeyDown(KeyCode.W)) {
this.MoveCatcher();
}
else if (Input.GetKeyDown(KeyCode.S)) {
this.MoveCatcher();
}
else if (Input.GetKeyUp(KeyCode.UpArrow) || Input.GetKeyUp(KeyCode.DownArrow) ||
Input.GetKeyUp(KeyCode.LeftArrow) || Input.GetKeyUp(KeyCode.RightArrow) ||
Input.GetKeyUp(KeyCode.W) || Input.GetKeyUp(KeyCode.S)) {
this.MoveButtonUp();
}
else if (Input.GetKeyDown(KeyCode.Space)) {
this.ControlCatcher();
}
else if (Input.GetKeyDown(KeyCode.P)) {
this.ControlCatcher();
}
}
}

调试小技巧:

想要判断某个节点是不是被脚本控制运行的,可以在运行的过程中关闭脚本,看物体是否正常运动,如果是则和该脚本无关。

关于Unity中关节的使用(二)的更多相关文章

  1. 关于Unity中关节的使用(一)

    1: 刚体的形状大小在物理世界里面是不变的,可是很多时候,我们需要多个刚体来配合使用;2: 关节: 连接刚体与刚体的对应的物理模拟;3: 关节类型: 铰链关节,弹簧关节, 固定关节, 角色关节,可配置 ...

  2. unity 中 protobuff 的用法 一句话攻略

    (一)unity 添加 pb 的 dll 支持.1,从GitHub上下载protobuf源码 (源码链接:https://github.com/google/protobuf),找到 csharp 分 ...

  3. Unity中创建二维码

    在网络上发现了一个可以把字符串转换成二维码的dll,但是我们要怎么使用他呢.不废话,直接进入主题. 用到的引用 using UnityEngine;using ZXing;using ZXing.Qr ...

  4. 关于Unity中的刚体和碰撞器的相关用法(二)

    在关于Unity中的刚体和碰撞器的相关用法(一)的基础上 有一个plane平面,一个ball球体,都挂了碰撞器,ball挂了刚体Rigidbody,写了一个脚本ball挂载在球体上,球体从空中落下装机 ...

  5. 「翻译」Unity中的AssetBundle详解(二)

    为AssetBundles准备资源 使用AssetBundles时,您可以随意将任何Asset分配给所需的任何Bundle.但是,在设置Bundles时,需要考虑一些策略.这些分组策略可以使用到任何你 ...

  6. 【Unity3D技巧】在Unity中使用事件/委托机制(event/delegate)进行GameObject之间的通信 (二) : 引入中间层NotificationCenter

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 一对多的观察者模式机制有什么缺点? 想要查看 ...

  7. Unity中UGUI之Canvas属性解读版本二

    Canvas Render Modes(渲染模式) 1.在screen空间中渲染2.在world空间中渲染 Screen Space-Overlay 在这个渲染模式中,UI元素将在场景的上面.如果场景 ...

  8. Unite 2018 | 《崩坏3》:在Unity中实现高品质的卡通渲染(下)

    http://forum.china.unity3d.com/thread-32273-1-1.html 今天我们继续分享米哈游技术总监贺甲在Unite Beijing 2018大会上的演讲<在 ...

  9. Unity基础知识学习笔记二

    1,object Instantiate(object original,Vector3 position,Quaternion rotation)       克隆原始物体,并返回克隆物体.     ...

随机推荐

  1. css3动画制作工具

    1.从chrome webstore下载 chrome应用商店安装地址 2.直接下载crx文件 如果无法访问到chrome的应用商城,可以选择下载app.crx文件,在chrome中打开chrome: ...

  2. fork failed.: Cannot allocate memory

    在做压力测试时候: [root@666 ok]# webbench -c 5000 -t30 http://10.100.0.61/ Webbench - Simple Web Benchmark 1 ...

  3. 菜鸟学Java(四)——JSP内置对象

    学习JavaWeb就离不开JSP,而学习JSP又不得不了解它常用的九个内置对象.今天来做一个简单介绍. request Request封装了用户提交的信息,通过调用Request相应的方法可以获取封装 ...

  4. 【小白的CFD之旅】22 好网格与坏网格

    网格疏密网格形状其他的一些问题小白的总结郑重申明 网格的作用如此重要,以至于小白纠结了很久.小白知道网格划分过程很大程度上受制于计算资源的限制,但小白还是不太明白,如果计算资源非常充足,不用顾忌资源限 ...

  5. Spark VS Presto VS Impala

    https://www.quora.com/What-is-the-difference-between-Spark-and-Presto

  6. HTTP 代理服务器技术选型之旅

    HTTP 代理服务器技术选型之旅 背景 长期以来,贴吧开发人员多,业务耦合大,需求变化频繁,因此容易产生 bug.而我所负责的广告相关业务,和 UI 密切相关,一旦因为某种原因(甚至是被别人改了代码) ...

  7. 【Android】Sensor框架HAL层解读

    Android sensor构建 Android4.1 系统内置对传感器的支持达13种,他们分别是:加速度传感器(accelerometer).磁力传感器(magnetic field).方向传感器( ...

  8. 【Socket】linux组播技术

    1.mystery引入      1)本学期学了计算机网络,对一些网络底层的东西还是不大了解    2)目前IP网络流行3种通信模式,分别是单播/广播与组播    3)根据Internet关于IP地址 ...

  9. 【Socket】linux网络多路复用IO技术

      1.mystery引入      1)Select是一种多路复用IO输入输出模式,在linux的输入输出编程中通过select的轮询机制,发现可用/可读或可写的接口.    2)低级socket程 ...

  10. python2 和 python3 区别

    python2 python 2 必须加object加入后是新式类 python 2 不加object是经典类 class HTTP(object): # 经典类和新式类 @staticmethod ...