广告
您当前的位置:首页 > 数字教学 > UNITY教程 > 内容正文

Unity3D简单实现游戏对象跟随鼠标旋转

作者:Emma 时间:2024/3/12 14:05:05 阅读数:394 人阅读
    [SerializeField] LayerMask whatIsGround;
 
    void Update(){
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
 
        Debug.Log(ray);
 
        RaycastHit hitInfo;
 
        if(Physics.Raycast(ray, out hitInfo, 200, whatIsGround)){
            Vector3 target = hitInfo.point;
            target.y = transform.position.y;
            transform.LookAt(target);
        }
解释:  Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); Camera.Main是获取第一个启用且被标记为”MainCamera”的相机。 ScreenPointToRay(Input.mousePosition);   通过MainCamera射出一道无限延伸的射线到Mouse的位置。 Ray类型包含一个Origin(圆点)和一个Direction(方向)两个三位坐标属性,Origin跟随鼠标的移动而改变,Direction始终是朝向MainCamera的方向。 RaycastHit hitInfo; RaycastHit所包含的数据很多,这里主要用的其中的"Point"这一属性。 public static bool Raycast (Ray ray, out RaycastHit hitInfo, floatmaxDistance, int layerMask); Raycast返回一个bool值,判断射线是否与指定的遮罩层(layerMask)碰撞器产生碰撞。 Transform.LookAt(target);

可能会遇到的问题: 通过Debug.Log()输出Ray变量有数值,但是玩家不跟随鼠标移动而转向。 可以通过Debug.Log()检查Physics.Raycast()返回的bool是否为真,如果不是,检查场景内的地板Layer是否标记为对应的layerMask。

以上是《Unity3D简单实现游戏对象跟随鼠标旋转》的内容,希望对您有用。

如果觉得草堂品级网站内容还不错,欢迎将草堂品级推荐给好友。

标签: 鼠标 对象 简单