我制作了一个自上而下的射击游戏,敌人在跟踪玩家.如果他们碰你,他们会用AddForce英镑推你.我已经做到了,但只是在特定的方向上.问题是,如果敌人是从玩家的右边来的,他们仍然会把你推到右边,而不会推到他们来自的相反方向.我试着探测敌人的旋转,以增加他们所看到的地方的力量.以下是原始脚本,但它只能向右推:

public Rigidbody2d playerrb;
public GameObject enemy;
float force = 2f;

void OnCollisionEnter2D(Collision2D collision){
    playerrb.AddForce(transform.right * force, ForceMode2D.Impulse);
}

以下是我try 过的:

public Rigidbody2d playerrb;
public GameObject enemy;
float force = 2f;

void OnCollisionEnter2D(Collision2D collision){
    playerrb.AddForce(enemy.transform.rotation * force, ForceMode2D.Impulse);
}

推荐答案

我会使用玩家和敌人之间的差向量

public Rigidbody2d playerrb;
public GameObject enemy;
float force = 2f;

void OnCollisionEnter2D(Collision2D collision){
    var direction = (playerrb.position - enemy.transform.position).normalized;
    playerrb.AddForce(direction * force, ForceMode2D.Impulse);
}

Csharp相关问答推荐

ASP.NET Core:如何在IPageFilter中注入ApplicationDbContext

迭代C#List并在数据库中 for each 元素执行SELECT语句—更有效的方式?

Microsoft. VisualBasic. FileIO. FileSystem. MoveFile()对话框有错误?

`Task`只有在C#中等待时才会运行吗?

. net依赖注入如何避免服务类中的新

从应用程序图API调用访问所有者字段

如何在WPF的树视图中显示一个对象的两个或多个属性,其中只有一个是分层项?

单行上的ReSharper数据标注

.NET:从XPath定位原始XML文档中的 node

为什么此名称不再被识别?名称不存在于当前上下文中?

如何在Akka.NET中重新启动执行元时清除邮箱

C#LINQ子字符串

为什么我不能从我的异步任务方法中返回异步任务方法?

为什么ReadOnlySpan;T&>没有Slice(...)的重载接受Range实例的?

我找不到ASP.NET Web应用程序(.NET框架).已 Select .NET框架项目和项模板以及此组件(&Q;)

C#如何获取字符串中引号之间的文本?

如何在C#中从MongoDB IPipelineStageDefinition中获取聚合命令的字段/选项?

是否在异步方法中避免Span<;T>;.ToArray()?

如何获取我在SQL中输入的值

不寻常的C#语法