Unity整理内容方便初学者查看(第三篇_刚体,碰撞及射线)

来源:互联网 发布:12864与单片机仿真 编辑:程序博客网 时间:2024/06/06 18:59

****刚体****


Rigidbody RB = GetComponent<Rigidbody>();

获取物体的Rigidbody组件(刚体组件)


RB.transform.positon == RB.position;

在游戏中,刚体的位置和它自己本生的位置是一样的.


velocity: 刚体速度属性(是世界坐标系中的,非物体本身坐标系)
RB.velocity = Vector.forward * 速度;
这是给刚体RB添加相对世界坐标系方向上的速度,产生的效果是:

物体就会在这个方向上,按给定速度移动



angularVelocity: 刚体角速度属性 (也是相对世界坐标系)
RB.angularVelocity = Vector3.right*速度;
给刚体RB添加相对于世界坐标系放向上的角速度, 产生的效果是:
物体就会按给定速度在对应的轴向上旋转.



freezeRotation: 冻结旋转
RB.freezeRotation = true;
如果为true则冻结,为False则不冻结.



AddForce (Vector3) :给刚体添加一个力(朝世界坐标系方向)
RB.AddForce (Vector3.forward * 力的大小);
给游戏物体RB的刚体添加相对于世界坐标上某个方向上的力


RB.AddRelativeForce(Vector3.forward * 力的大小);
给当前游戏物体RB施加相对于物体自身当前坐标系的力


在指定点添加相对世界坐标系的一个力
RB.AddForceAtPosition()
给刚体添加相对于世界坐标系中的某个方向的力,这个力可以在刚体的上的任意位置


给当前游戏物体添加一个爆炸力,模拟爆炸效果
AddExplosionForce(爆炸力大小,爆炸点位置,爆炸范围); 
RB.AddExplosionForce(1000,RB.position,1,10);


碰撞爆炸效果常用写法:
Rigidbody RB = coll.gameObject.GetComponent<Rigidbody> ();
RB.AddExplosionForce (6000, RB.position/*(爆炸位置)*/, 3/*(爆炸半径)*/);




添加相对力矩
AddRelativeTorque 给刚体添加一个力矩,相对自身坐标系.---->效果:发生旋转
RB.AddRelativeTorque(Vector3.forward * 1000);



RB.MovePosition(T.position);

使刚体RB移动到T位置.



MeshRenderer组件
A.gameObject.GetComponent<MeshRenderer> ().material.color = Color.green;
改变A的颜色为green;




****碰撞****




//碰撞开始一瞬间被调用
void OnCollisionEnter(Collision coll)
{
if (coll.gameObject.name != "Sphere") {
Debug.Log("碰撞开始一瞬间被调用");
}
}


//一直保持碰撞状态的时候被调用
void OnCollisionStay(Collision coll)
{
if (coll.gameObject.name != "Sphere") {
Debug.Log("一直保持碰撞状态的时候被调用")
}
}


//碰撞发生后分离的一瞬间被调用
void OnCollisionExit(Collision coll)
{
if (coll.gameObject.name != "Sphere") {
Debug.Log("碰撞发生后分离的一瞬间被调用");
}
}




Box Collider组件


****触发效果(OnTrigger)****




void OnTriggerEnter(Collider coll)
{
Debug.Log ("进入触发器的时候调用一次");
}


void OnTriggerStay(Collider coll) 
{
Debug.Log ("处于某个触发器之中的时候持续调用");
coll.isTrigger = false;
}


void OnTriggerExit(Collider coll)
{
Debug.Log ("退出触发器的时候调用一次");
}




****射线****


Ray ray = new Ray (发射原点(origin),发射方向(direction));
创建射线



Ray myRay = new Ray (transform.position/*发射位置*/, transform.forward/*(当前物体正放向)*//*发射方向*/);




使用Physics类的Raycast方法实现射线碰撞检测功能;
bool Raycast(Ray ray(要发射的射线), out RaycastHit hitInfo(碰撞信息));


Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);

从主摄像机到鼠标点击位置创建一条射线





0 0
原创粉丝点击