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

Unity 3D中如何根据鼠标位置水平翻转2D角色?

问题解决与优化方案

先修复现有代码的错误

你遇到的CS0201错误,是因为误用了比较运算符==做赋值操作,正确应该用赋值运算符=。修改rotateSword脚本里的这两行:

// 原错误代码
swordRight == true;
// 改为
swordRight = true;

// 原错误代码
swordRight == false;
// 改为
swordRight = false;

同时还要补全几个必要细节:

  1. 在rotateSword类里把swordRight声明为public,比如public bool swordRight;,确保CharacterFlip能访问到它。
  2. CharacterFlip里的charDirection方法需要被触发,比如在Update里调用:
private void Update()
{
    charDirection();
}
  1. 原判断条件有重叠(swordDirection.y >=0和<=0.01会同时命中0的情况),建议调整为:
if (swordDirection.y >= 0)
{
    swordRight = true;
}
else
{
    swordRight = false;
}

更简便的直接方案(无需依赖剑的脚本)

直接在角色翻转脚本里获取鼠标位置,对比角色的世界坐标X值,就能判断鼠标在角色左侧还是右侧,直接完成翻转:

public class CharacterFlip : MonoBehaviour
{
    private void Update()
    {
        // 获取鼠标的世界位置(Z值与角色保持一致,确保在同一平面判断)
        Vector3 mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        mouseWorldPos.z = transform.position.z;

        // 对比鼠标与角色的X坐标,决定翻转方向
        if (mouseWorldPos.x > transform.position.x)
        {
            // 鼠标在右侧,角色朝右
            transform.localScale = new Vector3(1, 1, 1);
        }
        else
        {
            // 鼠标在左侧,角色朝左
            transform.localScale = new Vector3(-1, 1, 1);
        }
    }
}

这个方案更直接高效,完全独立实现需求,不需要依赖剑的旋转逻辑。

内容的提问来源于stack exchange,提问作者Its the lag

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 11:52:35