博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Unity 3D】学习笔记三十六:物理引擎——刚体
阅读量:7287 次
发布时间:2019-06-30

本文共 2107 字,大约阅读时间需要 7 分钟。

物理引擎就是游戏中模拟真是的物理效果。如两个物体发生碰撞,物体自由落体等。在unity中使用的是NVIDIA的physX,它渲染的游戏画面很逼真。

刚体

刚体是一个很很中要的组件。

默认情况下,新创的物体是不具备物理效果的,而刚体组件能够给物体加入一些常见的物理属性。比方说:质量。摩擦力。碰撞等。

假设对象加入了刚体组件。那么它将感应物理引擎中的一切物理效果。

简单的使用下

首先穿件一个游戏对象,接着在hierarchy视图中选择创建的游戏对象。然后在unity导航菜单条中选择component——physics——rigidbody就可以。以下将创建3个立方体。将其放置在凌空地面上。

并给当中的一个立方体加入刚体。执行后发现红色的立方体感应了物理效果,掉下来了。而其它的两个依然停留在原地。

刚体的属性:

mass:质量。数值越大物体下落越快,尽量不超过10,不然会显得不真实。

drag:阻力。数值越大物体速度减慢就越快。

angular drag:角阻力。数值越大自转速度减慢就越快。

use gravity:是否使用重力。

is kinematic:是否受物理影响。

interpolate:设置图像差值。

collision detection:碰撞监測。

constrains:冻结,停止某个轴向感应物理引擎的效果

freeze position:冻结X轴。Y轴,Z轴,方向。

freeze rotation:冻结X轴。Y轴。Z轴,旋转。

物理管理器

在物理管理器中,能够设置整个项目全部的物理效果。比方说重力。反弹力,速度等。

在菜单导航栏中。选择edit——project setting——physics就可以打开physics manager。

例如以下图:

gravity:重力,默认下物体受Y轴向下的重力为9.8 N,可改动三个轴的受力方向。

default material:默认物理材质。

bounce threshold:反弹值。

sleep velocity:睡眠速度,当速度低于睡眠速度时,它保持精巧状态。

sleep angular velocity:睡眠角速度,当角速度低于睡眠速度时。自身不旋转。

max angular velocity:最大角速度。

min penetration for penalty:用于物体与物体之间碰撞后最小穿透力。

solver iteration count:迭代数量,默认值为7.

raycasts hit triggers:是否启动命中触发器。

layer collision matrix:图层碰撞矩阵。

刚体组件能够受力的作用,比方给刚体一个向X轴的力,那么刚体将沿着X轴向前运动。unity中力的方式有两种:普通的力,须要设定力的方向和大小。目标位置力。须要设置目标点的位置,该物体将朝向这个目标位置施加力。

接下来做一个样例来说明。共放置两个球对象。点击普通力后,小球像被踢了一脚。

点击位置力。小球将被施加一个朝向目标的力。

代码:

using UnityEngine;using System.Collections;public class Script_06_02 : MonoBehaviour{		//施加普通力的对象	GameObject addFrceObj = null;	//施加目标位置力的对象	GameObject addPosObj = null;	//目标对象	GameObject cubeObj = null;		// Use this for initialization	void Start () 	{		//获取施加普通力的对象		addFrceObj = GameObject.Find("Sphere0");		//获取施加目标位置力的对象		addPosObj = GameObject.Find("Sphere1");		//获取目标对象		cubeObj= GameObject.Find("Cube");	}		void OnGUI() {				if(GUILayout.Button("普通力",GUILayout.Height(50)))		{			//施加一个力。X轴方向力度为1000,Y轴方向力度为1000			addFrceObj.rigidbody.AddForce (1000, 0, 1000);		}				if(GUILayout.Button("位置力",GUILayout.Height(50)))		{			//施加一个位置力。物体将会朝向这个位置发力移动。力的模式为冲击力。

Vector3 force = cubeObj.transform.position - addPosObj.transform.position; addPosObj.rigidbody.AddForceAtPosition(force,addPosObj.transform.position,ForceMode.Impulse); } } }

执行:

你可能感兴趣的文章
Android HandlerThread简介
查看>>
win下 bundle install 显示json安装错误解决办法
查看>>
白话经典算法系列之五 归并排序的实现
查看>>
执行原因【菜鸟笔记】Ubuntu系统shellscript中 关于for循环以及declare出错的原因
查看>>
基于.net开发chrome核心浏览器【四】
查看>>
PHP header() 函数
查看>>
javascript构造函数与原型
查看>>
ActiveMQ应用笔记二:Producer与Consumer模板代码
查看>>
JavaFx初探
查看>>
Android创建启动画面
查看>>
微软职位内部推荐-SDE II
查看>>
laravel里面使用event
查看>>
Swift游戏实战-跑酷熊猫 06 创建平台类以及平台工厂类
查看>>
Hadoop第13周练习—HBase作业
查看>>
Android 数字签名学习笔记
查看>>
BW常用事务码Tcode
查看>>
eclipse package,source folder,folder区别及相互转换
查看>>
setImageResource和setImageDrawable区别
查看>>
HDMI介绍与流程
查看>>
模型的实现
查看>>