Unity 3D中如何根据鼠标位置水平翻转2D角色?
问题解决与优化方案
先修复现有代码的错误
你遇到的CS0201错误,是因为误用了比较运算符==做赋值操作,正确应该用赋值运算符=。修改rotateSword脚本里的这两行:
// 原错误代码 swordRight == true; // 改为 swordRight = true; // 原错误代码 swordRight == false; // 改为 swordRight = false;
同时还要补全几个必要细节:
- 在
rotateSword类里把swordRight声明为public,比如public bool swordRight;,确保CharacterFlip能访问到它。 CharacterFlip里的charDirection方法需要被触发,比如在Update里调用:
private void Update() { charDirection(); }
- 原判断条件有重叠(
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
相关产品推荐
相关产品推荐

