You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity角色跟随鼠标位置但始终朝向相机的实现问题求助

问题分析与解决方案

你的问题出在朝向逻辑错误:当前代码让角色朝向自身的移动方向(r_transform.position - r_LastPosition),也就是鼠标引导的移动路径方向,自然会一直对着鼠标方向。要实现始终朝向相机,需要替换这段朝向逻辑。

修改步骤

  1. 删除错误的朝向代码块
    把这段让角色朝向移动方向的代码删掉:
if (r_transform.position != r_LastPosition)
{
    r_transform.forward = Vector3.Lerp(r_transform.forward, (r_transform.position - r_LastPosition).normalized,
        speed);
}
  1. 添加朝向相机的逻辑
    在设置角色位置之后,计算相机到角色的水平方向,让角色平滑转向这个方向:
// 计算相机到角色的方向,忽略Y轴高度差(避免角色抬头/低头)
Vector3 cameraDirection = _camera.transform.position - r_transform.position;
cameraDirection.y = 0f;

// 平滑转向相机方向,rotationSpeed是你定义的转向速度参数
r_transform.forward = Vector3.Lerp(r_transform.forward, cameraDirection.normalized, Time.deltaTime * rotationSpeed);
  1. 变量区分(可选)
    建议把移动速度和转向速度拆成两个变量(比如moveSpeed和rotationSpeed),避免原speed变量混淆用途。

修改后完整代码示例

if (MoveByTouch) 
{   
    float deltaTime = Time.deltaTime;    
    float moveSpeed = runSpeed * deltaTime;
    r_Zpos += moveSpeed;            
    Vector3 mousePos = Input.mousePosition;
    mousePos.z = r_Zpos;
    Vector3 pos =  _camera.ScreenToWorldPoint(mousePos);
    r_XPos = Mathf.Lerp(r_XPos, pos.x, deltaTime * swipeSpeed);
}
r_transform.position = new Vector3(r_XPos, 0f, r_Zpos);

// 朝向相机的逻辑
Vector3 cameraDirection = _camera.transform.position - r_transform.position;
cameraDirection.y = 0f;
// 这里可自定义rotationSpeed值(比如5f),控制转向快慢
r_transform.forward = Vector3.Lerp(r_transform.forward, cameraDirection.normalized, Time.deltaTime * 5f);

r_LastPosition = r_transform.position;

关键说明

  • 忽略Y轴高度差是为了保证角色始终在水平面上朝向相机,不会因相机上下移动导致角色倾斜。
  • 用Vector3.Lerp做平滑转向可以避免角色突然转头,提升操作手感。

内容的提问来源于stack exchange,提问作者user21596799

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 10:52:41