AddForceAtPosition
cube0.AddForceAtPosition(Vector3.forward*5,target.transform.position);
force:给cube0一个力,控制cube0的移动;
position:cube0和所给点的连线力得大小,这个力跟移动方向有夹角,会造成cube0旋转;
cube0.AddRelativeForce(Vector3.forward);
//以cube0自身坐标系来进行移动,比如向前运动,就是向自身的正前方运动;
cube1.AddForce(Vector3.forward);
//以世界坐标系为参考系运动,比如向前运动,就是向世界的z轴方向运动;
射线
new Ray(cube0.transform.position,Vector3.forward);
射线 : 第一个参数是射线的起始点; 第二个参数是射线的方向
Physics.Raycast(myray)
物理射线检测:返回值是bool类型,根据返回值只能确定当前射线有没有碰撞到其他碰撞体。
RaycastHit hit;
Physics.Raycast(myray,out hit)
返回值只能返回是否碰撞到其他碰撞体;但是out出来一个hit值,这个hit值是我们需要的;
当我们射线碰撞到一个游戏物体的碰撞体后,返回一个hit值,这个对象包含信息部分如下:
public Collider collider{get;} //碰撞体
public float distance{get;set;} //碰撞体和射线起始点的距离
public Vector3 normal{get;set;} //碰撞点所在平面的法向量
public Vector3 point{get;set;} //实际碰撞到的点的世界坐标位置
public Rigidbody rigidbody{get;} //碰撞到的游戏物体的刚体
public Transform transform{get;} //碰撞到的游戏物体的Transform组件
Physics.Raycast(Ray ray,out RaycastHit hit,float maxDistance,int layerMask);
//该API可用于测试射线多层检测的情况,注意参数layerMask,当实际用于射线多层检测时,其参数最好写成1<<LayerMask.NameToLayer("layerMaskName")以避免出现计算机实际检测多层情况与预期检测多层情况不符,使用该API示例如下:
Physics.Raycast(myray,out hit,100,(1<<LayerMask.NameToLayer("Cube3"))+(1<<LayerMask.NameToLayer("Cube2"));
延迟函数
Destroy(object,float time); //time时间之后销毁object类型
Invoke 延迟执行函数,通过方法名延迟调用对应函数;
注意:当此脚本或者当前脚本所在的游戏物体失活,延迟函数依然会执行;
但是当前脚本或者游戏物体被销毁,延迟函数就不会执行。
Invoke("TestInvoke",2);
void TestInvoke(){
Debug.Log("Awake TestInvoke");
} //2秒之后唤醒TestInvoke方法
取消延迟函数:CancelInvoke();
如果不传参数,那么就会取消当前代码内的所有延迟函数;
如果传参数,就是取消对应函数延迟调用;
例:
if(Input.GetKeyDown(KeyCode.D)){
CancelInvoke("TestInvoke");
} //按下D键,取消TestInvoke函数的延迟调用
延迟重复调用 InvokeRepeating(string methodName,float time,float repeatRate);
time时间后调用methodName方法,每隔repeatRate秒后再调用一次;
例:InvokeRepeating("TestInvoke",2,1); //2秒之后调用TestInvoke方法,每隔1秒后再调用一次
该系列专栏为网课课程笔记,仅用于学习参考。



















