Unity中射线碰撞试验分享:


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();
    }
}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。