🐳
Engineering Wiki
  • 🖐️Welcome
  • 📚백엔드 로드맵
    • 메인페이지
  • Spring
    • spring boot
      • security
        • security 기본
        • filter
        • JWT
      • 스프링 핵심 원리
        • 객체지향 설계와 스프링
        • 스프링IoC컨테이너와 bean
      • IntelliJ
        • Spring boot 생성 및 git clone
        • Spring boot 프로젝트 생성
      • vscode
        • Spring boot 프로젝트 생성
      • scheduling
        • 스케쥴링 설정시 에러 상황
      • paging
      • 에러 핸들링
        • ErrorCode생성 및 ExceptionHandler로 에러처리
        • Security & JWT 에러처리
        • spring cloud sleuth
      • 로그 핸들링
        • logback
        • HttpRequestServlet 래핑
      • gradle
        • hidetake.ssh 키파일 설정
      • maven
        • maven tomcat
      • lib
        • lombok
        • tiles
      • API 부하테스트 툴 K6
      • JPA
        • Mybatis / JPA 차이
      • Mybatis
    • spring batch
      • batch
        • Spring Batch 기본개념
  • FRONT
    • vue
      • Spring boot & Vue.js 설치 및 연동
      • Spring boot & Vue.js 웹개발 세팅
      • vue의 기본구조 실행순서
      • SPA 이해
  • JAVA
    • 환경설정
    • 자바의 정석
      • generics
  • DATABASE
    • mongoDB
      • 정규표현식을 사용해 대소문자 구분없이 검색
      • mongoDB export import
      • MAC 설치 및 실행
    • MYSQL
      • dbeaver 데이터 내보내기 불러오기
      • [에러] 스프링 mysql 8 연결 에러
      • MAC M1 mysql 설치
      • GROUP BY 정리
      • 테이블 명세서 빠르게 생성
  • AWS
    • IAM
    • 설치&명령어
      • eb 설치 & 명령어
      • CLI 설치 & 명령어
    • sam
      • SAM 개념
      • SAM Lambda S3이벤트 트리거, MongoDB 접근코드
      • SAM intellij 배포
    • peering
      • mongodb atlas AWS vpc peering
      • MongoDB & Lambda VPC peering ,endpoint설정
    • 쉘스크립트
      • 도커 컨테이너 중단시 슬랙 리포팅 및 재실행
  • DOCKER
    • 설치&명령어
      • Docker 기초
      • Docker Container 유용한 명령어
    • MAC관련 문제
      • 이미지 빌드 관련 문제상황
      • MAC M1 도커 실행 원리
      • [에러] docker: Error response from daemon: Mounts denied:
  • ELK
    • 세팅
      • 로드벨런서에 logstash 세팅
      • Elastic Beanstalk + Elastic Cloud + docker 설정
      • ElasticCloud + filebeat + logstash + docker 설정 (버전8.5.0)
      • ELK 적용 사례, 로그수집(filebeat/logstash) 설명
    • logstash
      • Logstash는 로그를 왜 message라는 field로 저장할까?
      • logstash health check
    • filebeat
      • filebeat 아키텍쳐
  • unity
    • 유니티 기본
      • 캐릭터 이동
      • 카메라
  • WORDPRESS
    • 워드프레스 기본
  • git
    • GIT 개념
      • 라이프사이클
    • 명령어
      • defult 브랜치 main 으로 변경
      • 첫번째 커밋 삭제(브런치삭제) 후 원격저장소에 강제 push
      • git 원격저장소에 remote 방법(vscode로 진행)
      • git gh
      • git reset
      • git rebase
  • MAC
    • 개발 환경세팅
      • 맥 초기 개발세팅
    • 유용한내용
      • app store 다운로드 없이 웹에서 Xcode 다운
      • ubuntu iso 설치 usb 만들기
      • 응용프로그램 에러
      • 잠김 파일
  • CS
    • data structure & algorism
      • 자료구조의 정의 및 종류
  • 방통대
    • 대학수학의 이해
      • 1강. 수학의 기초(1)
    • 딥러닝
      • 1강.신경망의 개요
  • NODE
    • 개발기록
      • 인스타그램 API 활용하여 게시물 슬랙에 리포팅
Powered by GitBook
On this page
  • 캐릭터의 이동과 애니메이션 처리
  • 애니메이터
  • 플레이어 이동 코드 구현
  1. unity
  2. 유니티 기본

캐릭터 이동

Previous유니티 기본Next카메라

Last updated 9 months ago

캐릭터의 이동과 애니메이션 처리

애니메이터

  • 이동에 대한것만 다룰것이다.

  • 무료에셋 프리팹의 walk와 Run이 기본으로 등록되어 있어 이걸 트리거로 사용할까 했지만 Speed를 등록해 캐릭터의 이동 속도에 따라 걷거나 뛸수있도록 구현하였다.

  • Walk In Place 와 Run In Place 만 확인하면된다.

  • Walk In Place

    • Idle -> Walk In Place 방향의 Conditions에 Speed를 등록하고 Greater를 선택, 0.1로 등록

    • 반대로 Idle <- Walk In Place 방향의 Conditions에 Speed를 등록하고 Less를 선택, 0.1로 등록

    • 이렇게하면 스피드가 0.1이상으로 올라갈때 애니메이터 트리거가 작동하여 걷는 모션을 작동하고 반대로 스피드가 0.1아래로 내려가면 Idle상태로 돌아간다

  • Run In Place

    • Walk In Place와 연결된 방향의 Conditions도 같은 방식으로 등록해주면 된다. 필자는 Speed가 4이상일때 뛰는 모션으로 변경되도록 하였다

    • 걷다가 뛰거나 뛰다가 걷거나 하는건 되는데 처음부터 뛰는모션으로 가는건 같은 방식으로 하면 잘 안되어 좀더 알아봐야할듯하다. 한마디로 Idle -> Run In Place 를 위와 같은 방식으로 Greater, 4로 작성하면 스피드가 올라갈때 Walk 쪽으로 가버려 적용이 되지 않는다.

플레이어 이동 코드 구현

  • Rigidbody 등록하고 일단 중력은 체크해제 하였다.

  • PlayerMovement.cs 작성하여 프리팹 오브젝트에 연결하였다.

    • 유니티 3D 액션게임_송호연 님의 책과 인터넷을 참고해 작성함

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[RequireComponent(typeof(Animator))]
public class PlayerMovement : MonoBehaviour
{
    private Animator avatar;
    private Rigidbody rigidbody;

    public float Speed;
    // Start is called before the first frame update
    void Start()
    {
        avatar = GetComponent<Animator>();
        rigidbody = GetComponent<Rigidbody>();
        Speed = 2f;
    }
    
    //h: Horizontal
    //v: Vertical
    private float h, v;

    public void OnStickChanged(Vector2 stickPos)
    {
        h = stickPos.x;
        v = stickPos.y;
    }
    public void OnKeybordChanged()
    {
        h = Input.GetAxis("Horizontal");
        v = Input.GetAxis("Vertical");
    }
    // Update is called once per frame
    void Update()
    {
        OnKeybordChanged();
        if (avatar)
        {
            avatar.SetFloat("Speed", (Speed*(h*h+v*v)));
            if (rigidbody)
            {
                Vector3 velocity = new Vector3(h, 0, v);
                velocity *= Speed;
                rigidbody.velocity = velocity;
                
                if (h != 0 && v != 0)
                {
                    transform.rotation = Quaternion.LookRotation(velocity);
                }
            }    
        }
        
    }
}
  • OnStickChanged 는 앞으로 방향컨트롤러를 생성하여 방향을 입력받기 위한 것이고 테스트를 위해 OnKeybordChanged를 생성하여 GetAxis로 방향을 입력 받았다.

  • (h*h+v+v)로 연산된 값은 1이 나온다. 애니메이터의 파라미터인 Speed에 전달하여 애니메이션을 실행한다.

  • rigidbody.velocity로 캐릭터의 이동을, transform.rotation으로 방향을 컨트롤한다.