1.3D拾取技术 射线是3D世界中的一个点向一个方向发射无终点。在unity3d中我们的射线一旦与其他的碰撞器发生碰撞,射线停止发射。 在游戏制作过程我们可以通过判断射线受否发生碰撞,并且可以判断射线和谁发生了碰撞。应用范围非常广泛,如射击游戏中用来判断是否射中目标 ray(origin:vector,direction:vector3) ray.origin表示射线起点 Ray.direction:表示射线的方向 案例一:从原点发射一条射线
void Update(){ Ray ray=new Ray(Vector3.zero,transform.position); RaycastHit hit; Physics.Raycast(ray,out hit,100); debug.DrawLine(ray.origin,hit.point); }
案例二点击鼠标左键克隆游戏对象
if(Input.GetMouseButtonDown(0)){
Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray,out hit)){
Instantiate(cube,hit.point,Quaternion.identity);
}
}
无线长度:Mathf.Infinity
查找指定名字的层
1<<LayerMask.NameToLayer("cube");
(其中<<左边的1表示开启,不是二进制的往左边移动一位;0表示没有该layer)`
二,角色控制器
Unity3D封装了一个非常好用的组件来实现第一人称视角与第三人称视角游戏开发,我们称之为角色控制器组件,几乎不用写一行代码就可以完成一切的操作-CharacterController(角色控制器)。所以它也是U3D里的一个类,可以控制物体的移动。
CharacterController组件:
属性面板:Slope Limit 角色最大能爬上的倾斜角度,如果想爬上比当前框设置的角度,爬不上去,必须设置该框里面的值更大才能
step offset;能上最高台阶的高度,如果游戏里台阶高度小于该框里的值,角色才能上游戏里的台阶
Skin Width:两个碰撞器可以相互渗透的皮肤宽度
min move distance:移动最小脚步距离
center相对于物体中心点的大小
height:胶囊的高度
Radius:胶囊的半径
游戏对象的角色组件.SimpleMve(new Vector(0,0,0))平面移动,自带碰撞器和重力
游戏对象的角色组件.Move()无重力,带有碰撞器
碰撞监测
void OnControllerColliderHit(ControllerColliderHit hit){}
|