Physics.Raycast:光线投射
参数:
origin:射线起始点
direction:射线方向
distance:射线长度
layerMask:只选定Layermask层内的碰撞器,其它层内碰撞器忽略。
Returns
bool - True when the ray intersects any collider,otherwise false.
当光线投射与任何碰撞器交叉时为真,否则为假。
下面通过实现这个小例子来试验一下:点击哪里就向哪里移动
using UnityEngine;
using System.Collections;
public class capsule : MonoBehaviour {
public CharacterController cc;
public float speed;
public Camera camera;
public Vector3 targetPosition;
void Start () {
targetPosition=this.transform.position;//把初始的位置赋值给当前坐标
cc=this.gameObject.GetComponent<CharacterController>();
}
//定义射线方法:
void getHitPoint(){
Ray ray;//创建一个新的射线,
RaycastHit hit;//光线投射碰撞qi
if(Input.GetMouseButtonDown(0)){//如果我点击了屏幕之后才能触发射线
ray=camera.ScreenPointToRay(Input.mousePosition);//屏幕位置转射线
if(Physics.Raycast(ray,out hit,100)){//光线投射--当光线投射与任何碰撞器交叉时为真,100射线距离
// Debug.Log (hit.point);
if(hit.collider.gameObject.name=="Terrain"){
targetPosition=hit.point;
//Debug.Log(targetPosition);
}
}
}
}
void walk(){
Vector3 v= Vector3.Normalize(targetPosition-this.transform.position);
cc.SimpleMove(v*speed*Time.deltaTime);//简单移动方法。
}
void Update () {
// Vector3 v=new Vector3(0,0,10*speed*Time.deltaTime);
// if(Input.GetKey(KeyCode.A)){
// cc.SimpleMove(v);
// }
walk();
getHitPoint();
}
}