查看: 3467|回复: 7
打印 上一主题 下一主题

[教程] 【分享】Physics的一些有用函数

[复制链接]

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2013-8-16 03:08:04 |只看该作者 |倒序浏览

Physics 类包括整个场景的物理运算需要使用到的常量,还提供一些很有用的函数。

Class Variables
gravity   场景中所有刚体(rigidbody)所受到的重力加速度,也就是引力。默认应该是9.81好像。
rigidbody的移动速度可以使用rigidbody.AddForce()之类的函数来实现,AddForce就是给刚体增加一个力使它移动。力的公式为 F=ma。 大家要注意的两点就是很多人都在括号里填上的长度为5的向量就以为可以得到每秒5米的加速度,其实不然。 加速度要乘以刚体本身的重量rigidbody.mass才能得到相应的力。 而且这个加速度要记得加上9.81的加速度以抵消重力的影响,否则也无法移动物体。 也就是说如果你想给一个重量为50千克的刚体一个5米每秒的加速度,应该用一个5+9.81=14.81长度的向量乘以rigidbody.mass。 也就是说应该给一个长度为740.5的向量写在AddForce里。

minPenetrationForPenalty 最低的力的影响值,低于这个值的力将不会产生作用,必须为正数,默认值0.05

bounceThreshold 两个碰撞的物体(colliding objects)的相对速度如果低于这个值将不会产生反弹,必须为正数,默认值 2

sleepVelocity 默认的直线速度,小于这个速度的物体将会进入休眠状态,必须为正数,默认值 0.15

sleepAngularVelocity 默认的角速度,低于这个值的物体会进入休眠状态,必须为正数,默认值0.14

maxAngularVelocity 所有刚体的默认最大角速度,必须为正数, 默认值 7

solverterationCount 所有刚体默认求解的迭代次数,跟计算刚体移动的精确度有关系,必须为证,默认值 7

Class Functions
1)static function Raycast (origin : Vector3, direction : Vector3, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool
在origin坐标上建立一个方向为direction,距离为distance的射线,可以与layerMask(层遮罩)之外的所有的collider碰撞;
返回true如果碰撞到任何物体,否则返回false。 distance默认为无限远,layerMast默认为kDefaultRaycastLayers
只与第一个接触到的物体产生碰撞。

static function Raycast (origin : Vector3, direction : Vector3, out hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool
多了一个out hitInfo: RaycastHit, 如果碰撞到物体,具体碰撞数据和被碰撞体都会被记录在RaycastHit上,包括碰撞位置,碰撞位置法线,被碰撞体的Transform节点等信息。其他一样。

脚本:
var explosionPosition: Vector3;
var hit: RaycastHit;
if(Physics.Raycast(transform.position,target.position,hit,100)){
explosionPosition=hit.point;
}

static function Raycast (ray : Ray, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool
static function Raycast (ray : Ray, out hitInfo : RaycastHit, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : bool
直接由一个射线ray来指示位置和方向。其他一样。

2)static function RaycastAll (ray : Ray, distance : float = Mathf.Infinity, layerMask : int = kDefaultRaycastLayers) : RaycastHit[]
static function RaycastAll (origin : Vector3, direction : Vector3, distance : float = Mathf.Infinity, layermask : int = kDefaultRaycastLayers) : RaycastHit[]

与所有在ray这条射线上的物体碰撞并返回所有被碰撞体,RaycastHit[]。 其他同RaycastAll一样。


3)static function Linecast (start : Vector3, end : Vector3, layerMask : int = kDefaultRaycastLayers) : bool
static function Linecast (start : Vector3, end : Vector3, out hitInfo : RaycastHit, layerMask : int = kDefaultRaycastLayers) : bool
从start到end画一条直线,其他与Raycast和RaycastAll类似。 这个通常可以用于检测AI是否能看到目标物体等功能。

4)static function Overlapsphere (position : Vector3, radius : float, layerMask : int = kAllLayers) : Collider[]
检测在position位置的半径radius的球形范围内是否存在可碰撞体并返回所有检测到的collider

5)static function CheckSphere (position : Vector3, radius : float, layerMask : int = kDefaultRaycastLayers) : bool
当任何物体碰到position位置的半径为radius的球形范围时返回true;

6)static function CheckCapsule (start : Vector3, end : Vector3, radius : float, layermask : int = kDefaultRaycastLayers) : bool

当任何物体碰到定义的胶囊体范围时返回true;

7)static function IgnoreCollision (collider1 : Collider, collider2 : Collider, ignore : bool = true) : void
控制collider1和collider2 是否可以碰撞。 ignore=true 两者将不会计算是否碰撞, ignore=false 则计算两者是否有碰撞。
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

12

主题

0

听众

3738

积分

中级设计师

Rank: 5Rank: 5

纳金币
3
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2013-8-16 09:50:10 |只看该作者
很有用,感谢分享
回复

使用道具 举报

40

主题

0

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
279
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2013-8-16 10:57:42 |只看该作者
谢谢楼主分享
回复

使用道具 举报

0

主题

2

听众

6150

积分

高级设计师

Rank: 6Rank: 6

纳金币
62
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

地板
发表于 2013-8-16 21:04:57 |只看该作者
感覺非常實用~
回复

使用道具 举报

0

主题

1

听众

336

积分

设计实习生

Rank: 2

纳金币
12
精华
0

最佳新人

5#
发表于 2013-8-16 23:56:32 |只看该作者
恩 学习啦 都是物理呀
回复

使用道具 举报

0

主题

1

听众

104

积分

设计实习生

Rank: 2

纳金币
1
精华
0

最佳新人

6#
发表于 2013-8-17 14:00:12 |只看该作者
无恶不作,不见不咋
回复

使用道具 举报

7

主题

1

听众

715

积分

初级设计师

Rank: 3Rank: 3

纳金币
259
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

7#
发表于 2013-8-25 12:49:27 |只看该作者
本帖最后由 shotdead 于 2013-8-25 13:06 编辑

谢谢你的分享
回复

使用道具 举报

nts    

3

主题

1

听众

743

积分

初级设计师

Rank: 3Rank: 3

纳金币
7
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

8#
发表于 2013-10-17 15:52:18 |只看该作者
知道的人很多,用好的人不多
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-28 05:44 , Processed in 0.312701 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部