物理材质与射线

物理材质
1.物理材质能够刚给物体添加摩擦力和弹力
2.物理材质只能够添加到带有Collider的对象上

射线
虚拟射线能够检查所碰撞到的物体
使用Physics类的Raycast方法实现射线碰撞检测功能

比如鼠标点击地面让任务行走,子弹发射出来有没有打中敌人等等。


public class PlayerController : MonoBehaviour {
    //在场景中鼠标点击地面后角色可以移动到目标位置
    //1.获取鼠标点击时的目标点
    //2.让角色移动到目标位置
    public float speed;
    private Vector3 target;
    private bool isOver = true; //移动是否结束
    // Use this for initialization
    void Start () {

    }

    // Update is called once per frame
    void Update () {
        //1.获取鼠标点击时的目标点
        //使用射线来实现
        //a .创建射线
        //Ray ray = new Ray();
        //不能是一个普通的射线,需要是从摄像机发出的射线
        //Input.mousePosition 获取屏幕坐标鼠标的点击位置。
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            // b. 发射射线
            RaycastHit hitinfo = new RaycastHit();
            if (Physics.Raycast(ray, out hitinfo))
            {
                //获取碰撞点的位置
                //是否与地面发生碰撞
                if (hitinfo.collider.name == "Plane")
                {
                    target = hitinfo.point;
                    target.y = 0.5f;//保证角色不陷入地地下
                    isOver = false;
                }
            }

        }

        //2.让角色移动到目标位置
        MoveTo(target);
    }

    // 让角色移动到目标位置
    private void MoveTo(Vector3 tar)
    {
        // 当前是否结束
        if (!isOver)
        {
            Vector3 v1 = tar - transform.position;
            transform.position += v1.normalized * speed * Time.deltaTime;
            //速度快的话会引起晃动
            if (Vector3.Distance(tar, transform.position) <= 0.1f)
            {
                isOver = true;
                transform.position = tar;
            }
        }

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值