2016-08-19 4 views
0

나는 내 선수가 잠시 앞으로 뛰어 오르려고 노력해 왔고, 나는 갇혀있다. 나는 다른 대답을보고 그것들을 시도했지만, 내가 그것을 원했던 방식대로 작동시키지 못했습니다. 나는 여러 가지 방법을 시도해 왔지만 그 중 누구도 그들이하는 일을하지 않고있다. 대부분의 경우 반송 거리는 같지 않았고 때로는 플레이어가 땅에 떨어졌을 때 플레이어가 앞으로 미끄러지 듯 내가 원하는 것이 아닙니다. 나는 Crossy 도로에서와 같이 내 캐릭터 점프를하고 싶다. 다음은 내가 시도한 한 가지입니다.어떻게 플레이어를 점프시킬 수 있습니까?

using UnityEngine; 
using System.Collections; 

public class MovePlayer : MonoBehaviour 
{ 
    Vector3 endPos; 
    int numBackwards = 0; 
    bool jumping = false; 
    public Rigidbody rigidBody; 
    //public Collider theCollider; 

    void Start() 
    { 
     rigidBody = GetComponent<Rigidbody>(); 
    } 

    // Update is called once per frame 
    void Update() 
    { 
     rigidBody.freezeRotation = true; 

     endPos = gameObject.transform.position; 
     if (!jumping) 
     { 
      if (Input.GetButtonDown("up") && gameObject.transform.position == endPos) { 
       if (numBackwards < 0) 
       { 
        numBackwards++; 
       } 
       else 
       { 
        UpdateScore.score++; 
       } 
       transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World); 
       transform.Translate(Vector3.forward * 110 * Time.deltaTime, Space.World); 
      } 
      else if (Input.GetButtonDown("down") && gameObject.transform.position == endPos) 
      { 
       transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World); 
       transform.Translate(-Vector3.forward * 110 * Time.deltaTime, Space.World); 
       numBackwards--; 
      } 
      else if (Input.GetButtonDown("left") && gameObject.transform.position == endPos) 
      { 
       transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World); 
       transform.Translate(Vector3.left * 110 * Time.deltaTime, Space.World); 
      } 
      else if (Input.GetButtonDown("right") && gameObject.transform.position == endPos) 
      { 
       transform.Translate(Vector3.up * 50 * Time.deltaTime, Space.World); 
       transform.Translate(Vector3.right * 110 * Time.deltaTime, Space.World); 
      } 
     } 
    } 

    void OnCollisionEnter(Collision other) 
    { 
     if (other.gameObject.CompareTag("Ground")) 
      jumping = false; 
    } 

    void OnCollisionExit(Collision other) 
    { 
     if (other.gameObject.CompareTag("Ground")) 
      jumping = true; 
    } 
} 

거의 모든 점프 크기가 ​​다르기 때문에 이러한 방식으로 작동하지 않았습니다.

public float distance;  
public float fspeed; 
public float uspeed; 

//PRIVATE 
private Rigidbody rigidBody; 


void Awake() 
{ 
    rigidBody = GetComponent<Rigidbody>(); 
    rigidBody.freezeRotation = true; 
} 

void FixedUpdate() 
{ 
    if (Physics.Raycast(transform.position, -Vector3.up, distance + 0.1F)) 
    { 
     if (Input.GetKeyDown(KeyCode.UpArrow)) 
     { 
      rigidBody.AddForce(new Vector3(0, uspeed, fspeed)); 
     } 

     if (Input.GetKeyDown(KeyCode.DownArrow)) 
     { 
      rigidBody.AddForce(new Vector3(0, uspeed, -fspeed)); 
     } 

     if (Input.GetKeyDown(KeyCode.LeftArrow)) 
     { 
      rigidBody.AddForce(new Vector3(fspeed, uspeed, 0)); 
     } 

     if (Input.GetKeyDown(KeyCode.RightArrow)) 
     { 
      rigidBody.AddForce(new Vector3(-fspeed, uspeed, 0)); 
     } 
    } 
} 

이 중 하나를 작동하지 않았다 플레이어가 착륙 할 때 앞으로 밀어 것 : 나는 시도 또 한가지이 있었다. 내가 시도한 마지막 것은 점프와 유휴 상태의 애니메이션을 사용하는 것이 었는데, 왜 작동하지 않는지 알 수 없었지만 작동하지 않았다. 제가 알고 싶은 것은 슬라이딩없이 매번 동일한 거리로 점프 할 수없는 가장 좋은 방법은 무엇인지, 또는 내가 원하는 방식대로 작동하도록 이전의 방법을 수정하는 방법은 무엇입니까?

답변

2

ForceMode을 사용하십시오. Impulse은 점핑 캐릭터에 적합하며, 질량을 사용하는 것처럼 사실적으로 보입니다. 그리고 그것은 계속되지 않습니다. 더 많은 효과를 얻으려면 더 낮은 값이 필요합니다. 빈 원인 Force가 연속 ForceMode 등의 기본이 될 수있는 강제 모드 매개 변수를 떠나

if (Input.GetKey(KeyCode.UpArrow)) 
{ 
    rigidBody.AddForce(new Vector3(0, uspeed, fspeed), ForceMode.Impulse); 
} 

. 관성보다 슬라이딩이 더 많이 발생합니다.

지상을 만질 때 관성 미끄럼 방지 속도를 무시한 경우.

void OnCollisionEnter(Collision other) 
{ 
    if (other.gameObject.tag == "Ground") 
    { 
     jumping = false; 

     rigidBody.velocity = Vector3.zero; 
    }   
} 

입력이 이미 공기에 점프 배제 전에 !jumping 확인.

+0

나는 이것이 작동하지 않는 이유를 알 수 있습니까? –

+0

무슨 일입니까? –

+0

그냥 움직이지 않는 것 –

관련 문제