我正试图在我的游戏中实现一个跟随鼠标方向的弓. 还有许多教程也展示了它是如何做到的,它们都是完全相同的. 问题是,光标必须绕着不是游戏对象的中心旋转.在视频中的可见性更好:https://streamable.com/iyhz87 是的,我确信我的游戏对象实际上没有向下移动到光标所在的位置.

这是我使用的代码:

void FixedUpdate()
{
    Vector2 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
    float rotZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;

    transform.rotation = Quaternion.Euler(0, 0, rotZ + offset);
}

推荐答案

你的旋转或查看代码的弓是完美的工作,什么你可能面临的是某种偏移错误,try 设置弓的位置转换一些单位以上,以固定枢轴在中心的精灵.准确地说,偏移量是类似于,Vector3(0,spriteHeight/2,0);并将其添加到您正在进行弓变换的任何地方,跟随玩家变换.

或者如果弓是childplayertry 这个代码,看看:


void Start(){
    offsetY = GetComponent<SpriteRenderer>().sprite.rect.height / 2;
    this.transform.localPosition = new Vector3(0,offsetY,0);

}
void FixedUpdate()
{
    Vector2 difference = Camera.main.ScreenToWorldPoint(Input.mousePosition) - transform.position;
    float rotZ = Mathf.Atan2(difference.y, difference.x) * Mathf.Rad2Deg;

    transform.rotation = Quaternion.Euler(0, 0, rotZ + offset);
}

支持并接受答案,如果它有效

Csharp相关问答推荐

为什么xslWriter不总是按照xslWriterSet中指定的格式格式化该文档?

为什么EF Core 6会针对null验证Count(*)?

属性getter和setter之间的空性不匹配?

我需要两个属性类吗

在多对多关系上不删除实体

C++/C#HostFXR通过std::tuple传递参数

System.Net.Http.HttpClient.SendAsync(request)在docker容器内的POST方法30秒后停止

从.Net 6 DLL注册和检索COM对象(Typelib导出:类型库未注册.(异常来自HRESULT:0x80131165))

DbContext-传递自定义配置选项

如何实现有条件的自定义Json转换器隐藏属性

使用动态键从请求体反序列化JSON

未在Windows上运行的Maui项目

Blazor Server/.NET 8/在初始加载时调用异步代码是否冻结屏幕,直到第一次异步调用完成?

流畅的验证--如何为属性重用规则?

如何读取TagHelper属性的文本值?

在ObservableCollection上使用[NotifyPropertyChangedFor()]源代码生成器不会更新UI

C#-如何将int引用获取到byte[]

除非首先访问使用的终结点,否则本地API上的终结点不起作用

PowerShell:如何[引用]数组中的元素?

C# -根据列表所包含的值的数量组织列表- C#