2014-07-11 1 views
0

내 플레이어가 계속해서 화면 아래쪽으로 떨어지는 경우 플레이어가 다른 게임 개체와 상호 작용할 때 해당 게임 개체를 파괴하고 플레이어가 계속 떨어지고 싶습니다.gameObject와 접촉하면 플레이어가 움직이지 않습니다.

하지만 플레이어가 다른 게임 개체를 친 순간에 게임 개체는 파괴되지만 플레이어는 떨어지는 것을 멈 춥니 다. 내가 뭘 잘못하고 있는지 조언 해주세요.

//Script attached to player: 

//x-axis movement speed 
    public float playerMoveSpeed = 0.2f; 
    //how much force to act against the gravity 
    public float upForce = 9.0f; 
    //horizontal control 
    private float move; 

    // Update is called once per frame 
    void Update() 
    { 
     //player left right x-axis movement control 
     move = Input.GetAxis("Horizontal") * playerMoveSpeed; 
     transform.Translate(move, 0, 0); 
    } 

    void FixedUpdate() 
    { 
     //to fight against the gravity pull, slow it down 
     rigidbody.AddForce(Vector3.up * upForce); 
    } 


//Script attached to gameObject to be destroyed on contact with player 

void OnCollisionEnter(Collision col) 
    { 
     //as long as collide with player, kill object 
     if (col.gameObject.tag == "Player") 
     { 
      Destroy(gameObject); 
     } 
    } 

답변

0

먼저 하나가 당신의 문제를 해결해야한다, 두 번째는 여러분의 인생을 더 쉽게 만들 수 있습니다 :

1) 마크 "트리거"로 객체 실제 충돌이 발생하지 않도록. 그렇게하면 플레이어가 빠져 나와 속도를 유지해야합니다. 당신은 또한 OnCollisionEnter 대신 OnTriggerEnter를 사용해야합니다.

2) 정말 "힘"이 필요하지 않지만 플레이어를 계속 움직이게하려면 중력을 끌고 rigidbody.velocity를 수동으로 설정할 수 있습니다 (나는 2 차원을 가정합니다. 여기) :

void FixedUpdate() 
{ 
    horizontalVelocity = Input.GetAxis("Horizontal") * playerMoveSpeed; 

    rigidbody.velocity = new Vector3(horizontalVelocity, verticalVelocity, 0.0f); 
} 

오른쪽으로 느껴질 때까지 verticalVelocity 및 horizontalVelocity 값을 가지고 놀아보세요.

또한 Update()에서 무언가를 이동하면 아마도 번역에 Time.deltaTime을 곱해야합니다. 그렇지 않으면 플레이어가 높은 fps에서 더 빠르게 움직입니다. FixedUpdate는 고정 시간 인터벌에서 호출되므로 필요하지 않습니다 (고정 업데이트라고하는 이유).

관련 문제