Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.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_Rigid Bodies_Unity5 - Fatal编程技术网

C# 尽管施加了力,但没有移动

C# 尽管施加了力,但没有移动,c#,unity3d,rigid-bodies,unity5,C#,Unity3d,Rigid Bodies,Unity5,此代码适用于电梯式平台,当玩家站在平台上时,它会通过向其施加力来“提升”玩家 问题是,当力产生时,当电梯移动时,刚体(玩家)不会移动。代码是用C#编写的,使用Unity 5。在代码中,玩家被指定为公共“rb”,并包含一个刚体。 动画是向上移动电梯的简单动画剪辑。有什么想法吗?感谢您的时间和提前回答 电梯是动态的,玩家不是 using UnityEngine; using System.Collections; /*This script activates when the player s

此代码适用于电梯式平台,当玩家站在平台上时,它会通过向其施加力来“提升”玩家

问题是,当力产生时,当电梯移动时,刚体(玩家)不会移动。代码是用C#编写的,使用Unity 5。在代码中,玩家被指定为公共“rb”,并包含一个刚体。 动画是向上移动电梯的简单动画剪辑。有什么想法吗?感谢您的时间和提前回答

电梯是动态的,玩家不是

using UnityEngine;
using System.Collections;

 /*This script activates when the player steps on the elevator, as it takes them up a floor.*/

public class ElevatorMovementScript : MonoBehaviour 
{
    private bool elevatorUp = false;
    public Animation anim;
    public int elevatorDelay = 5;
    public int force = 800;
    public Rigidbody rb;

    // Use this for initialization
    void Start () 
    {
        anim = GetComponent<Animation>();
    }   
    // Update is called once per frame
    void Update () 
    {

    }
    /*Checks if the player has stepped onto the elevator. If the player has, it waits five seconds, and then pushes the player up.*/
    void OnTriggerStay(Collider other) 
    {
        if (other.gameObject.tag == "Player" && !elevatorUp) 
        {
            Invoke("AnimationPlay",elevatorDelay);
            elevatorUp = true;
        }
    }
    /*Plays the animation of the player going up. Used for the 'Invoke' method.*/
    void AnimationPlay()
    {           
        rb.AddForce(transform.up * force);
        Debug.Log (transform.up * force);
        anim.Play ("Up");
    }
}
使用UnityEngine;
使用系统集合;
/*当玩家踏上电梯时,这个脚本就会激活,因为电梯会把他们带上一层楼*/
公共类电梯移动脚本:MonoBehavior
{
专用bool升降器上升=错误;
公共动画;
公共电梯延时=5;
公共警力=800;
公共刚体;
//用于初始化
无效开始()
{
anim=GetComponent();
}   
//每帧调用一次更新
无效更新()
{
}
/*检查玩家是否已踏上电梯。如果玩家已踏上电梯,则等待五秒钟,然后将玩家推上电梯*/
void OnTriggerStay(碰撞器其他)
{
if(other.gameObject.tag==“Player”&&&!elevatorUp)
{
调用(“动画播放”,电梯延迟);
升降器上升=真;
}
}
/*播放播放器向上移动的动画。用于“调用”方法*/
void AnimationPlay()
{           
rb.AddForce(transform.up*force);
Debug.Log(transform.up*force);
动画播放(“Up”);
}
}

该脚本似乎位于电梯的游戏对象上,在这种情况下,该行:

rb.AddForce(transform.up * force);
将尝试对电梯施加力,而不是对玩家施加力。您必须跟踪玩家的刚体,或者以某种方式在
AnimationPlay
中按需获取它

你说的

玩家被指定为公共“rb”


但是
rb=GetComponent()
将忽略这一点,并使用附加到
ElevatorMovementScript
所附加的游戏对象的刚体。

您是否尝试更改
force
的值?在许多情况下,如果刚体不移动,那是因为力的大小太小。如果它真的是一个移动的平台,你可能应该使用运动学刚体而不是施力。这将使平台表现得像一个平台。@Venkataxiomstudios-我将力设置为500,然后设置为5000000,它没有影响。@31eee384-平台和玩家都有刚体组件,且“IsKinetic”设置为true。平台仍然会在播放器中移动。如果IsKinetic是真的,那么addforce在allI将没有任何效果。我在提交问题后不久就取出了该部分,因为我看到它将组件更改为电梯。现在这并不能解决问题,但对我来说,这是朝着正确方向迈出的一步。谢谢您的输入。@user3280790您能用当前代码和游戏对象信息编辑这个问题吗?(哪些游戏对象有哪些组件,哪些刚体是运动学的,等等)完成。感谢您的持续帮助。