Unity에서 자체 중력을 사용하지 않고 점프하는 방법
5515 단어 unity
//
if (Input.GetButtonDown("Jump") &&nextJump) //
if (currentBaseState.fullPathHash == walkingState||
currentBaseState.fullPathHash == runningState||
currentBaseState.fullPathHash == standingState)//
{
nextJump = false;//
GameManager.isJumping = true;//
if (GameManager.isStanding)
{
jumpV_x = 0;// 0
GameManager.isStanding = false;// ,
}
if (GameManager.isWalking)
{
jumpV_x = Haxis * moveSpeed;
GameManager.isWalking = false;
}
if (GameManager.isRunning) //
{
jumpV_x = Haxis * moveSpeed;
jumpVelocity = GameManager.jumpVelocity * GameManager.jumpMultiple;//
GameManager.isRunning = false;
}
}
점프 상태 ==true 시 프레임마다 상응하는 세로, 수평 거리 이동
private void LateUpdate()
{
transform.Translate(Vector3.right * Time.deltaTime * moveSpeed * Haxis); //
if (GameManager.isJumping) //
{
jumpHight += jumpVelocity * Time.deltaTime * jumpSpeed;
jumpVelocity = jumpVelocity - 9.8f * Time.deltaTime * jumpSpeed;
currentPosition.y = jumpHight;
currentPosition.x = privousPosition.x + Time.deltaTime * jumpV_x; //
transform.position = currentPosition;
}
착지 후 점프 상태에서 탈퇴, 다음 점프를 허용, 점프 속도의 전역 변수를 다음 점프를 위해 초기값으로 회귀
void OnCollisionEnter(Collision collider)
{
//
if (collider.gameObject.tag == "Ground")
{
nextJump = true;
GameManager.isGround = true;
GameManager.isJumping = false;
//
moveSpeed = GameManager.moveSpeed;
jumpVelocity = GameManager.jumpVelocity;
jumpHight = 0;
jumpV_x = 0;
Debug.Log("ground!");
}
}
void OnCollisionExit(Collision collider)
{
//
if (collider.gameObject.tag == "Ground")
GameManager.isGround = false;
Debug.Log("offground!");
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Unity 최적화1. 프레임마다 처리하는 것을 최대한 피한다. 예를 들면: 5프레임당 한 번 처리로 변경할 수 있습니다. 2. 정시 반복 처리는 InvokeRepeating 함수로 이루어집니다. 예를 들어 0.5초 동안 시작한 후 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.