如何在Unity 2D俯视角游戏中实现瞄准射击机制并修复角色转向问题
2D俯视角角色跟随鼠标转向修复方案
配置检查项(80%的问题都是这里导致的)
- 打开角色的
Rigidbody2D组件面板,检查Constraints下的Freeze Rotation Z没有被勾选,勾选后代码修改旋转不会生效 - 确认脚本的
cam字段已经拖拽赋值了场景中的主摄像机,空引用会导致鼠标坐标转换错误,转向逻辑失效 - 检查角色对象上是否挂载了其他控制旋转的脚本,若存在移动时修改朝向的代码,直接删除对应逻辑即可
代码优化方案
你现有代码的转向逻辑本身是正确的,以下是调整后的更稳定的版本,修复了斜向移动速度异常的问题:
using System.Collections; using System.Collections.Generic; using UnityEngine; public class script1 : MonoBehaviour { public float moveSpeed; public Rigidbody2D rb; public Camera cam; private Vector2 moveDirection; private Vector2 mousePos; void ProcessInputs() { float moveX = Input.GetAxisRaw("Horizontal"); float moveY = Input.GetAxisRaw("Vertical"); // 增加归一化处理,避免斜向移动速度比单方向快 moveDirection = new Vector2(moveX, moveY).normalized; } void Update() { ProcessInputs(); mousePos = cam.ScreenToWorldPoint(Input.mousePosition); } void FixedUpdate() { Move(); RotateToMouse(); } void Move() { rb.velocity = moveDirection * moveSpeed; } void RotateToMouse() { Vector2 lookDir = mousePos - rb.position; float angle = Mathf.Atan2(lookDir.y, lookDir.x) * Mathf.Rad2Deg - 90f; rb.rotation = angle; } }
内容的提问来源于stack exchange,提问作者Lucky Doug
相关产品推荐
相关产品推荐

