【Unity 3D】学习笔记四十一:关节
关节
关节组件能够加入至多个游戏对象中,而加入关节的游戏对象将通过关节连接在一起而且感觉连带的物理效果。须要注意的是:关节必须依赖于刚体组件。
关节介绍
关节一共分为5大类:链条关节,固定关节,弹簧关节,角色关节和可配置关节。
链条关节(hinge joint):将两个物体以链条的形式绑在一起,当力量大于链条的固定力矩时,两个物体就会产生相互的拉力。
固定关节(fixed joint):将两个物体永远以相对的位置固定在一起,即使发生物理改变,它们之间的相对位置也将不变。
弹簧关节(spring joint):将两个物体以弹簧的形式绑定在一起,挤压它们会得到向外的力,拉伸它们将得到向里的力。
角色关节(character joint):能够模拟角色的骨骼关节。
可配置关节(configurable joint):能够模拟随意关节的效果。
关节是一个游戏组件,在导航菜单条中选择component——physics然后从中选择一种关节组件,就可以完毕关节组件的加入。
使用breakforce可设置关节断裂的力,一旦力超过它,关节将会断裂。断裂时,通过onjointbreakforce方法可监听相关事件。
以下给个实例:
using UnityEngine;
using System.Collections; public class Script_06_10 : MonoBehaviour
{
//链接关节游戏对象
GameObject connectedObj = null;
//当前链接的关节组件
Component jointComponent = null; void Start()
{
//获得链接关节的游戏对象
connectedObj = GameObject.Find("Cube1");
} void OnGUI()
{
if(GUILayout.Button("加入链条关节"))
{ ResetJoint();
jointComponent = gameObject.AddComponent("HingeJoint");
HingeJoint hjoint = (HingeJoint)jointComponent;
connectedObj.rigidbody.useGravity = true;
hjoint.connectedBody = connectedObj.rigidbody;
} if(GUILayout.Button("加入固定关节"))
{
ResetJoint();
jointComponent =gameObject.AddComponent("FixedJoint");
FixedJoint fjoint = (FixedJoint)jointComponent;
connectedObj.rigidbody.useGravity = true;
fjoint.connectedBody = connectedObj.rigidbody;
} if(GUILayout.Button("加入弹簧关节"))
{
ResetJoint();
jointComponent =gameObject.AddComponent("SpringJoint");
SpringJoint sjoint = (SpringJoint)jointComponent;
connectedObj.rigidbody.useGravity = true;
sjoint.connectedBody = connectedObj.rigidbody;
} if(GUILayout.Button("加入角色关节"))
{
ResetJoint();
jointComponent =gameObject.AddComponent("CharacterJoint");
CharacterJoint cjoint = (CharacterJoint)jointComponent;
connectedObj.rigidbody.useGravity = true;
cjoint.connectedBody = connectedObj.rigidbody;
} if(GUILayout.Button("加入可配置关节"))
{
ResetJoint();
jointComponent =gameObject.AddComponent("ConfigurableJoint");
ConfigurableJoint cojoint = (ConfigurableJoint)jointComponent;
connectedObj.rigidbody.useGravity = true;
cojoint.connectedBody = connectedObj.rigidbody;
}
} //重置关节
void ResetJoint(){
//销毁之前加入的关节组件
Destroy (jointComponent);
//重置对象位置
this.transform.position = new Vector3(821.0f,72.0f,660.0f);
connectedObj.gameObject.transform.position = new Vector3(805.0f,48.0f,660.0f);
//不敢应重力
connectedObj.rigidbody.useGravity = false;
}
}
执行后:
点击左边button,两个正方体便会下落实现不同的关节效果。主要是上述的代码非常值得參考与细读。
【Unity 3D】学习笔记四十一:关节的更多相关文章
- unity 3D 学习笔记
1.父对象的初始位置设,即刚开始的空对象的根节点位置应当设置成(0,0,0) 这样设置可以避免以后出现奇怪的坐标. GameObject实际上就是一些组件的容器. unity 使用公用变量原因是,在U ...
- Unity 3D学习笔记(三)——关于脚本
在脚本中定义的类成员,如果是公共的话,在脚本与游戏对象绑定之后,是可以在Inspector中编辑的,例如下面这个脚本: using UnityEngine; using System.Collecti ...
- VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式
原文:VSTO 学习笔记(十一)开发Excel 2010 64位自定义公式 Excel包含很多公式,如数学.日期.文本.逻辑等公式,非常方便,可以灵活快捷的对数据进行处理,达到我们想要的效果.Exce ...
- angular学习笔记(三十一)-$location(1)
本篇介绍angular中的$location服务的基本用法,下一篇介绍它的复杂的用法. $location服务的主要作用是用于获取当前url以及改变当前的url,并且存入历史记录. 一. 获取url的 ...
- kvm虚拟化学习笔记(四)之kvm虚拟机日常管理与配置
KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
- java之jvm学习笔记四(安全管理器)
java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...
- Python学习笔记(十一)
Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...
随机推荐
- SVN命令汇总
1.将文件checkout到本地文件夹 svn checkout path(path是server上的文件夹) 比如:svn checkout svn://192.168.1.1/pro/doma ...
- Java 内部类分析
一.简介 因为现在是Android开发实习生.发现在发展过程中越来越多,但他们知道什么时候该使用真实的情况,但没有获得,例如,使用内部类,因此,学习和自己的总结后发现,通过互联网的信息,家分享,如有不 ...
- Java 信号 Semaphore 简介
Semaphore当前在多线程环境下被扩放使用.操作系统的信号量是个非常重要的概念,在进程控制方面都有应用. Java 并发库 的Semaphore 能够非常轻松完毕信号量控制,Semaphore能够 ...
- [Network]Transport Layer
1 Principles behind Transport Layer Services 1.1 Multiplexing/Demultiplexing Multiplexing at sender ...
- Android视频通话Java代码
近期学习Android平台下跨平台音视频通信开发,尽管网上有非常多开源项目供我们參考学习.但音视频效果非常一般,还有非常多不稳定的因素,毕竟是开源嘛.在国内我找到了一个比較好音视频通信解决方式(百 ...
- Cocos2d-x3.0 DrawNode吸取
DrawNode正如它的绘图形状的节点,相互作用可以使将来更加灵活. DrawNode* DrawLayer::shape() { auto shape = DrawNode::create(); s ...
- hdu4758 Walk Through Squares (AC自己主动机+DP)
Walk Through Squares Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others ...
- cocos2dx 制作单机麻将(二)
cocos2dx 制作单机麻将(二) 打乱麻将顺序2 前面解说了怎样打乱初始给定的麻将牌堆, 另一种是打乱随意给定的麻将牌堆 //混乱扑克2 void RandAppointCardData(BYTE ...
- 【iOS发展-28】制造业UITabBarController标记控制器、定制UITabBarItem文字图像6途径和More评论
一个.一个简单的制作过程(实际工程中不建议这样的方式,不要只展示所用原理的理解) 在AppDelegate.m在: - (BOOL)application:(UIApplication *)appli ...
- 【 D3.js 进阶系列 — 2.1 】 力学图的事件 + 顶点的固定
本章讨论在力学图中经常使用到的事件( Event ),然后对[p=555">进阶 - 第 2.0 章]的人物关系图进行改进.使用户可以固定拖拽的对象. 在[入门 - 第 9.2 章]和 ...