Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 统一角色控制器推动另一个角色控制器(我有脚本)_C#_Unity3d - Fatal编程技术网

C# 统一角色控制器推动另一个角色控制器(我有脚本)

C# 统一角色控制器推动另一个角色控制器(我有脚本),c#,unity3d,C#,Unity3d,我偶然发现了一个问题。我已经修改了一个影响脚本,我在论坛中找到了这个脚本,它让玩家使用方块碰撞器作为触发器推开另一个玩家。问题是,影响相当不一致。方向有时没有意义(玩家被推到另一个方向),力从很强到很轻,我真的不知道是什么让它这样做的。这是我附加到游戏对象的代码: void FixedUpdate () { //p2 being player 2 character controller if (impact.magnitude > 0.2f) p2.Move

我偶然发现了一个问题。我已经修改了一个影响脚本,我在论坛中找到了这个脚本,它让玩家使用方块碰撞器作为触发器推开另一个玩家。问题是,影响相当不一致。方向有时没有意义(玩家被推到另一个方向),力从很强到很轻,我真的不知道是什么让它这样做的。这是我附加到游戏对象的代码:

void FixedUpdate () {
   //p2 being player 2 character controller
    if (impact.magnitude > 0.2f)
        p2.Move (impact * Time.deltaTime);

    impact = Vector3.Lerp (impact, Vector3.zero, 5 * Time.deltaTime);
    pos = (p2.GetComponent<Transform> ().transform.position - transform.position);
}

//adds impact force
public void AddImpact(Vector3 dir, float force)
{
    dir.Normalize ();
    if (dir.y < 0)
        dir.y = -dir.y;

    if (dir.y > 0)
        dir.y = 0;

    impact += dir.normalized * force / mass;
}

public void OnTriggerEnter(Collider col)
{
    AddImpact (pos, 20);
}
void FixedUpdate(){
//p2是玩家2角色控制器
如果(冲击强度>0.2f)
p2.移动(影响*时间增量时间);
impact=Vector3.Lerp(impact,Vector3.zero,5*Time.deltaTime);
pos=(p2.GetComponent().transform.position-transform.position);
}
//增加冲击力
公共无效附加影响(矢量3方向,浮动力)
{
dir.Normalize();
如果(方向y<0)
dir.y=-dir.y;
如果(方向y>0)
方向y=0;
冲击+=方向标准化*力/质量;
}
公共对撞机(对撞机列)
{
额外影响(位置20);
}

每当播放动画时,我也会使用(.enabled)及时激活动画代码。谁能告诉我这有什么问题吗?我盯着代码分析看了两天,似乎都看不懂。任何帮助都将不胜感激

我怀疑您的
AddImpact()
方法中存在问题

您当前的代码将首先标准化
dir
,归零
dir.y
,然后使用
dir
计算一个力,并将其添加到
impact
。但是,当您在最后一行计算
dir.normalized*力/质量
时,
dir
的大小不能保证为1-它在[0,1]的范围内,这意味着您添加到
impact
的向量的大小在[0,力/质量]范围内的任何地方都会发生变化。这就是为什么你的力量变化如此之大

错误在您的逻辑中-当您规格化
dir
时,您正在规格化向量,y值仍然处于潜在的非零值。当您有效地设置
dir.y=0
时,会导致
dir
的大小下降未知量,因为您通过删除向量的一个维度缩短了向量

我建议将您的方法修改为以下内容:

public void AddImpact(Vector3 dir, float force)
{
    dir.y = 0;
    dir.Normalize ();
    impact += dir.normalized * force / mass;
}
通过仅在设置
dir.y=0
后对矢量进行规格化,现在保证在力计算中使用
dir
的幅值为1


希望这有帮助!如果您有任何问题,请告诉我。

是否打算在
AddImpact()中dir.y总是以零结尾?我可能弄错了,但在当前代码中,如果dir.y为负,则切换符号,使其为零或正,如果大于零,则最终为零。与
dir.y=0相同