您的位置:首页 > 移动开发 > Unity3D

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

2017-09-24 11:47 567 查看
[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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: