U3D 物理引擎

 Input 类(人机交互)

 

键盘:
可通过Input实现外部设备控制场景内游戏物体实现相关功能
GetKey:按住键盘上某一个键时返回bool值:true
GetKeyDown:按下某一个按键后的第一帧返回bool值:true
GetKeyUp:按键按下后松开时返回bool值:true
Input.GetAxis ("Horizontal");
Horizontal Vertical horizontal vertical
获得摇杆的水平方向移动的值,对应到键盘上的A,D键或←,→方向键
Input.GetAxis ("Vertical");
获得摇杆的垂直方向移动的值,对应键盘上的W,S键或上下方向键.
float h = Input.GetAxis ("Horizontal");
float v = Input.GetAxis ("Vertical");
transform.Rotate (new Vector3 (0, h, 0));
transform.Translate (new Vector3 (0, 0, v));
鼠标:
mousePosition : 获取鼠标在屏幕上的位置
屏幕坐标系:屏幕左下角为(0,0)点,Game界面
视口坐标系: 屏幕左下角为(0,0)点,右上角为(1,1)点 以摄像机为参照
三维直接坐标系:以(0,0,0)为原点
GetMouseButtonDown(value):鼠标按下后的第一帧返回true
GetMouseButtonUp(value):鼠标松开后的第一帧返回true
GetMouseButton(value):鼠标按下期间一直返回true
当value = 0 是表示鼠标左键
value = 1 是表示鼠标右键
value = 2 是表示鼠标滚轮键按下
GetAxis("Mouse X") 得到一帧内鼠标在水平方向上的移动距离
GetAxis("Mouse Y") 得到一帧内鼠标在垂直方向上的移动距离
GetAxis("Mouse ScrollWheel") 获取鼠标滚轮的值

双击:
float clickCount = 0;
float timer = 0;
bool isClick = false;
bool DoubleClick ()
{
if (Input.GetMouseButtonDown (0)) {
clickCount++;
if (clickCount == 2) {
clickCount = 0;
timer = 0;
//双击操作执行
return true;
}
return false;
}
if (clickCount == 1) {
timer += Time.deltaTime;
if (timer > 0.3f) {
timer = 0;
clickCount = 0;
return false;
}
}
return false;
}

将鼠标点击位置(视口坐标)转化为世界坐标
//1.获得鼠标在屏幕中的位置
Vector3 mousePos = Input.mousePosition;
//2.将屏幕坐标中的鼠标点,转换世界坐标中的鼠标点
//ViewportToWorldPoint:表示将视口坐标转化为世界坐标
Vector3 mouseWorldPos =
Camera.main.ViewportToWorldPoint
(new Vector3 (mousePos.x / Screen.width,
mousePos.y / Screen.height, 10f));
//3.将转化的世界坐标赋值给Cube
transform.position = mouseWorldPos;

通过鼠标滚轮来控制摄像机的远近
//1.获取摄像机的视口范围
float fileOfView = Camera.main.fieldOfView;
//2.使用鼠标滚轮改变fileOfView
fileOfView -= Input.GetAxis ("Mouse
ScrollWheel");
//3.控制摄像机远近的范围
fileOfView = Mathf.Clamp (fileOfView, 10f, 60f);
//4.将改变后的值赋值给摄像机
Camera.main.fieldOfView = fileOfView;

 

将创建好的物理材质拖入Collider组件中的Material中

射线:
创建射线: Ray ray =new Ray();
射线的属性:origin 射线发射的原点
direction 射线发射的方向
射线碰撞的应用(射线检测):
使用Physics类方法Raycast方法实现射线的碰撞检测功能
bool Raycast(Ray ray(发射的射线) , out RaycastHit hitInfo(碰撞信息));

从主相机到鼠标点击位置创建一条射线
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

//创建射线通过传入射线的反射起点和发射方向
Ray ray = new Ray (transform.position, transform.forward);
//发射射线,第一个参数表示要发射的射线,
//第二个参数表示射线碰到物体的射线信息,
//第三个参数表示射线发射的距离
//如果射线发射成功会返回bool值true
bool result = Physics.Raycast (ray, out hitInfo, 10f);

发射射线使用类:Physics
存储射线碰撞信息类:RaycastHit
1、Ray Camera.main.ScreenPointToRay(Vector3 pos) 返回一条射线Ray从摄像机到屏幕指定一个点
2、Ray Camera.main.ViewportPointToRay(Vector3 pos) 返回一条射线Ray从摄像机到视口(视口之外无效)指定一个点
3、Ray 射线类
4、RaycastHit 光线投射碰撞信息
5、bool Physics.Raycast(Vector3 origin, Vector3 direction, float distance, int layerMask)
当光线投射与任何碰撞器交叉时为真,否则为假。
bool Physics.Raycast(Ray ray, Vector3 direction, RaycastHit out hit, float distance, int layerMask)
在场景中投下可与所有碰撞器碰撞的一条光线,并返回碰撞的细节信息()。
bool Physics.Raycast(Ray ray, float distance, int layerMask)
当光线投射与任何碰撞器交叉时为真,否则为假。
bool Physics.Raycast(Vector3 origin, Vector3 direction, RaycastHit out hit,float distance, int layerMask)
当光线投射与任何碰撞器交叉时为真,否则为假。

原文地址:https://www.cnblogs.com/zpy1993-09/p/11736271.html