유니티:캐릭터 이동: 두 판 사이의 차이

학교의 모든 지식. SMwiki
둘러보기로 이동 검색으로 이동
잔글편집 요약 없음
잔글 (→‎점프)
29번째 줄: 29번째 줄:




== 점프 ==
==점프==
단발적인 조작이기에, Update에 두는 편이 좋다. 아래와 같은 형식으로 코딩한다.<syntaxhighlight lang="c#">
단발적인 조작이기에, Update에 두는 편이 좋다. 아래와 같은 형식으로 코딩한다.<syntaxhighlight lang="c#">
if(Input.GetButtonDown("Jump"))//점프키를 받으면..
if(Input.GetButtonDown("Jump"))//점프키를 받으면..
     rigid.AddForce(벡터.up * jumpPower, 모드) //위에 jumpPower를 미리 정의해주어야 한다.
     rigid.AddForce(벡터.up * jumpPower, 모드) //위에 jumpPower를 미리 정의해주어야 한다.
    애니메이션객체.SetBool("애니매개변수값", 변경할값);
      
      
      
      
</syntaxhighlight>점프에 해당하는 애니메이션도 넣어주어야 할 것이다.
</syntaxhighlight>점프에 해당하는 애니메이션도 넣어주어야 할 것이다.
=== 점프의 끝 ===
점프가 끝나고 애니메이션을 끝내주고 기본적인 Idle상태로 돌려주어야 한다. 일반적으로 onCollisionOn을 사용하지만, 레이캐스트도 가능하다.<syntaxhighlight lang="c#">
void FixedUpdate()
    //시작점, 방향, 레이의 색을 정해준다.(없어도 됨. 보기 쉽게 만들어준 것일 뿐)
    Debug.DrawRay(rigid.position, Vector3.down, new Collor(색값)); //에디터 상에서만 Ray를 그려주는 함수이다.
   
    //해당 거리 안에 들어오면 collider에 내용물이 담긴다.
    RaycastHit rayHit=Physics.Raycast(rigid.position, Vector3.down, 거리, LayerMask.Getmast("Floor"));
        //그러나, 레이는 한 오브젝트에 맞으면 관통이 안된다.
        //이 문제를 해결하기 위해 레이어를 이용한다. Floor 등의 이름으로 레이어를 만든다.
        //마지막 인자는 닿은 레이어를 반환한다는 의미이다.
    if(rayHit.collider != null){
        if(rayHIt.distance <길이f){
            애니메이션객체명.SetBool("애니매개변수", false); //땅에 닿았으니 점프관련 변수를 바꿔준다.
        }
</syntaxhighlight>캐릭터가 아래로 내려올 때에만 레이를 쏘게끔 만들어도 괜찮겠다. if(rigid.velocity.y<0) 등으로.
<br />
=== 무한 점프 막기 ===
점프가 무한정 되는 상황을 막기 위해 다른 처리가 더 필요해진다.
맨 위의 Input 부분에 if의 조건으로 <code>&& !애니객체.GetBool("애니매개변수")</code> 를 넣어주어 점프상태가 아님을 파악하여 점프키를 먹도록 하는 게 좋겠다.

2020년 9월 8일 (화) 23:24 판

틀:유니티

  1. 유니티:개요
  2. 유니티:기본 조작
    1. 유니티:에셋스토어
  3. 유니티:카메라
  4. 유니티:오브젝트
    1. 유니티:데이터 입력받기
    2. 유니티:오브젝트 이동(오브젝트 조작)
    3. 유니티:힘으로 오브젝트 이동
    4. 유니티:충돌 이벤트
    5. 유니티:오브젝트 작성 tip
    6. 유니티:프리팹
  5. 유니티:코딩기초
    1. 유니티:C sharp 코딩 편의기능
    2. 유니티:MonoBehaviour
    3. 유니티:이벤트 메서드
    4. 유니티:컴포넌트 조작하기
  6. 유니티:UI
  7. 유니티:게임 내 화면
  8. 유니티:플레이어
    1. 유니티:모델
    2. 유니티:캐릭터 이동
    3. 유니티:애니메이션
    4. 유니티:주인공 시점
  9. 유니티:맵
    1. 유니티:투명한 벽 만들기
    2. 유니티:내비게이션
  10. 유니티:씬
  11. 유니티:몬스터
  12. 유니티:아이템
  13. 유니티:음향
    1. 유니티:배경음
    2. 유니티:효과음
  14. 유니티:빌드
  15. 유니티:VR
    1. 유니티:VR:UI
    2. 유니티:VR:VR로 변환
  16. 유니티:팁

개요

스크립트를 만든다.

public변수로 두면 인스펙터에서 편집할 수 있다.

public  class Move : MonoBehaviour{
    public float maxSpeed;
    Rigidbody rigid;
    
    void FixedUpdate(){
        float h=Input.GetAxisRaw("Horizontal");
        rigid.AddForce(벡터, 모드)
        if(rigid.velocity.x > masSpeed)//우측에 대한 스피드.
            rigid.velocity=new Vector3(masSpeed, rigid.velocity.y);
        else if(rigid.velocity.x < masSpeed*(-1))//좌측에 대한 스피드
        ...

일반적으로 타이밍이 중요한 단발적인 키 입력은 Update에서 다룬다.(프레임이 더 촘촘해)

현실적인 움직임.

rigidbody에서 Linear Drag는 공기저항의 역할을 한다.(접촉하지 않을 때의 저항)


애니메이션 조작

방향에 따라 캐릭터가 바라보는 곳을 바꾸게끔 만들어야 한다.


점프

단발적인 조작이기에, Update에 두는 편이 좋다. 아래와 같은 형식으로 코딩한다.

if(Input.GetButtonDown("Jump"))//점프키를 받으면..
    rigid.AddForce(벡터.up * jumpPower, 모드) //위에 jumpPower를 미리 정의해주어야 한다.
    애니메이션객체.SetBool("애니매개변수값", 변경할값);

점프에 해당하는 애니메이션도 넣어주어야 할 것이다.

점프의 끝

점프가 끝나고 애니메이션을 끝내주고 기본적인 Idle상태로 돌려주어야 한다. 일반적으로 onCollisionOn을 사용하지만, 레이캐스트도 가능하다.

void FixedUpdate()
    //시작점, 방향, 레이의 색을 정해준다.(없어도 됨. 보기 쉽게 만들어준 것일 뿐)
    Debug.DrawRay(rigid.position, Vector3.down, new Collor(색값)); //에디터 상에서만 Ray를 그려주는 함수이다.
    
    //해당 거리 안에 들어오면 collider에 내용물이 담긴다.
    RaycastHit rayHit=Physics.Raycast(rigid.position, Vector3.down, 거리, LayerMask.Getmast("Floor"));
        //그러나, 레이는 한 오브젝트에 맞으면 관통이 안된다.
        //이 문제를 해결하기 위해 레이어를 이용한다. Floor 등의 이름으로 레이어를 만든다.
        //마지막 인자는 닿은 레이어를 반환한다는 의미이다.
    if(rayHit.collider != null){
        if(rayHIt.distance <길이f){
            애니메이션객체명.SetBool("애니매개변수", false); //땅에 닿았으니 점프관련 변수를 바꿔준다.
        }

캐릭터가 아래로 내려올 때에만 레이를 쏘게끔 만들어도 괜찮겠다. if(rigid.velocity.y<0) 등으로.


무한 점프 막기

점프가 무한정 되는 상황을 막기 위해 다른 처리가 더 필요해진다.

맨 위의 Input 부분에 if의 조건으로 && !애니객체.GetBool("애니매개변수") 를 넣어주어 점프상태가 아님을 파악하여 점프키를 먹도록 하는 게 좋겠다.