游戏开发小结——单击用在 Unity中的移动系统

发布时间:2024年01月07日

游戏开发小结——单击用在 Unity中的移动系统

目标是每当按下鼠标左键时将游戏对象移动到鼠标的位置。

设置场景

我在场景中放置了一个代表玩家的球体,并添加了一个地板。我确保项目中有一个动作地图资源,为玩家分配了一个地图,并给它一个名为“Move”的动作,绑定到鼠标左键。

在这里插入图片描述

该球体包含鼠标移动脚本和碰撞器。
地板还包含一个碰撞器,我创建了一个名为 Floor 的图层。

在这里插入图片描述

鼠标移动脚本
现在场景已经设置完毕,是时候编辑鼠标移动脚本了。

首先创建字段和对输入操作映射的引用。

[SerializeField]LayerMask _mask; 
GameActions input; 
Vector3 movetowards; 
Vector3 targetPosition; 
float stopingDistance;

接下来,我启用了玩家动作图并调用了执行的事件。

private void Awake() 
    { 
        input = new GameActions(); 
    } 
    private void OnEnable() 
    { 
        input.Player.Enable(); 
        input.Player.ChangeColor.performed += MoveObject; 
    }
订阅该事件后,我创建了一种根据鼠标位置发射光线的方法,使用 ScreenPointToRay(Mouse Position) 将其从视口位置转换为世界位置。如果射线击中地板层,则收集击中点向量,将其存储在目标位置,并计算要移动的向量。
 private void MoveObject(InputAction.CallbackContext context) 
    { 
        Ray _ray = Camera.main.ScreenPointToRay(Mouse.current.position.ReadValue()); 
        if (Physics.Raycast(_ray, out RaycastHit _hit, Mathf.Infinity, _mask)) 
        { 
            mousePosition = _hit.point; 
            Vector3 currentPosition = transform.position; 
            movetowards = (mousePosition - currentPosition).normalized; 
        } 
    }
我在更新方法中比较了目标位置和游戏对象位置之间的距离。如果距离超过0.6f,则将游戏对象的位置平移到目标位置,直到满足距离条件。

在这里插入图片描述

文章来源:https://blog.csdn.net/qq_37270421/article/details/135328826
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。