2016-10-26 3 views
1

먼저 내 질문을 모두 읽어 주셔서 감사합니다 나는 지하철 표면과 같은 게임을 계속 실행하기 위해 노력하고 있습니다. update() 함수를 시작했습니다. payerControl 스크립트 py가 강체가 앞으로 나아갈 수 있도록 강제 실행했습니다. 코드에서 mintiond로 10의 속도로 키보드에서 upArrow를 누를 때 점프 입력을 추가했지만 점프 부울이 true가되기 때문에 문자가 때때로 점프하고 대부분의 시간에 점프하지 않습니다. 1 초도 채 안 간 다음 다시 false로 돌아가므로 점프 과정을 2 초간 유지할 수있는 방법이 있습니까?유니티 5 문자 점핑

문자 제어 코드 :

using UnityEngine; 
using System.Collections; 

public class player : MonoBehaviour { 

    public Animator anim; 
    public Rigidbody rbody; 
    public float verticalJumpPower; 
    public float horizantalJumpPower; 
    public float playerVelocity; 


    // Use this for initialization 
    void Start() 
    { 
     anim = GetComponent<Animator>(); 
     rbody = GetComponent<Rigidbody>(); 
     verticalJumpPower = 50f; 
     horizantalJumpPower = 30f; 
     playerVelocity = 10f; 
    } 

    // Update is called once per frame 
    void Update() 
    { 
     rbody.velocity = new Vector3(rbody.velocity.x,rbody.velocity.y,playerVelocity*Time.deltaTime); 
     rbody.transform.rotation = Quaternion.identity; 

     if(Input.GetKeyDown (KeyCode.UpArrow)) 
     { 
      anim.SetBool("jump",true); 
      rbody.AddForce(new Vector3(0,verticalJumpPower,horizantalJumpPower)); 


     } 
     else 
     { 
      anim.SetBool("jump", false); 
     } 

     if(Input.GetKey(KeyCode.LeftArrow)) 
     { 
      Vector3 currentPosition = rbody.transform.position; 

       Vector3 leftPosition = new Vector3(rbody.transform.position.x+Constants.PLAYER_LEFT_DISTANCE, rbody.transform.position.y,rbody.transform.position.z); 

      rbody.transform.position = Vector3.Lerp(currentPosition,leftPosition,Time.deltaTime); 

     } 

     if(Input.GetKey(KeyCode.RightArrow)) 
     { 
      Vector3 currentPosition = rbody.transform.position; 
      Vector3 rightPosition = new Vector3(rbody.transform.position.x+Constants.PLAYER_RIGHT_DISTANCE, rbody.transform.position.y,rbody.transform.position.z); 
      rbody.transform.position = Vector3.Lerp(currentPosition,rightPosition,Time.deltaTime); 

     } 

     if(Input.GetKey(KeyCode.DownArrow)) 
     { 
      anim.SetBool("isSlide",true); 
      rbody.velocity = new Vector3(0f, 0f,5f); 
      anim.applyRootMotion = false; 
     } 
     else 
     { 
      anim.SetBool("isSlide", false); 
      anim.applyRootMotion = true; 
     } 
    } 

    } 
+0

아마도 필요한 것 는 문자가 접지 된 때를 감지하는 논리이며,'anim.SetBool ("jump", false)'만 설정합니다. 이 체크를 수행하는 방법에 대한 많은 아이디어가 있습니다. 검색하고, 구현하고, 새 코드로이 질문을 업데이트하는 데 문제가 있거나 (크게 다른 경우 새로운 질문을하십시오). 현재이 질문은 너무 광범위합니다. 기본적으로 우리는 여러분의 게임 객체가 설정되는 방법에 대한 가정을하고 논리를 처음부터 작성해야하기 때문입니다. – Serlite

+0

또한 점핑 애니메이션이 정확히 무엇입니까? 캐릭터가 공중에있는 한 놀아야하는 것이거나 캐릭터가 처음 점프를 수행하는 순간입니까? 이는 또한 필요한 솔루션에 영향을 미칩니다. – Serlite

답변

1

GetKeyDown는() 초기 키를 누를 때의 프레임에 true를 돌려줍니다. 지금 나는 일이 기대 이것이다 : 한 우리는 다른 조건에 충돌이 힘이 줄

rbody.velocity = new Vector3(rbody.velocity.x,rbody.velocity.y,playerVelocity*Time.deltaTime); 

는 다음 Z 속도를 재설정 다음 프레임을 점프 애니메이션을 트리거하고 추가를 keyDown의 첫 번째 프레임

else 
    { 
     anim.SetBool("jump", false); 
    } 

애니메이션을 끄십시오. 점프 애니메이션을 2 초 동안 실행하고 이후에 속도를 재설정하는 이벤트를 트리거해야 할 수 있습니다. 또는 효과를 즉시 실행하는 대신 키 누르기로 인해 개체의 상태가 변경되도록 할 수 있습니다 (나중에 플래그를 지우고 속도 및 애니메이션 상태를 재설정해야하는 게임 시간 저장)