【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,两个正方体便会下落实现不同的关节效果。主要是上述的代码非常值得參考与细读。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值