游戏开发小结——单击用在 Unity中的移动系统
2024-01-07 17:36:53
游戏开发小结——单击用在 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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!