Unity에서 # 나침반 같은 이동 방법 구현

3657 단어 게임 제작C#Unity

기사 내용



Unity에서 # 나침반 같은 이동 방법을 구현하는 방법에 대해
구체적으로는
  • 화면 스 와이프로 캐릭터를 중심으로 카메라가 회전합니다.
  • 화면 하단의 조이 스택을 조작한 방향으로 캐릭터를 달리게 한다.

  • 이런 녀석을 구현할 수 있으면 OK 같은 느낌입니다.
    그건 그렇고, 다음과 같이 작동합니다.

    UnityChan 움직이고 있습니다 ... 여가이므로 Qitta 나중에 쓰자 피 c. 라고 r. 코 m/엔 lQ기 X3기 — 타이타로 (@kotaro_sakata)


    필자에 대해서



    KNCT 학생. 동급생에서 위대한 September 17, 2019에서 영감을 받아 시험에 써 보았습니다.

    솔직히 첫 투고로 게다가 여가 시간에 써 보았으므로, 세세한 곳은 많게 봐 주세요.

    어디까지나 어떤 코드 썼을까라는 기사이므로, 상당히 생략하고 있는 곳은 많습니다.

    하지만 코드 잘못하거나 뭔가 더 좋은 방법이 있다면 알려주세요.



    환경



    Unity 2019.1.2f1

    JetBrains Rider 2019.1.2



    자산



    Standard Assets (CrossPlatformInput 당 여러 가지 사용)



    캐릭터 중심으로 카메라 회전



    우선 간단한 분들로부터 합니다. 보통으로 생각하면 이쪽도 상당히 어려울 것 같은 느낌은 합니다만, 거기는 Unity입니다. 그런 함수를 사용할 수 있습니다



    public void RotateAround (Vector3 point, Vector3 axis, float angle);

    요점은 제 1 인수에 중심의 좌표, 제 2 인수에 회전시키고 싶은 축, 제 3 인수에 각도를 대입하는 함수입니다.

    이렇게 하면 원하는 좌표를 중심으로 회전할 수 있습니다.



        public Vector3 position;
        void LateUpdate()
        {         
            transform.RotateAround(position,Vector3.up,CrossPlatformInputManager.GetAxis("Mouse X")*5);
        }
    


    이 코드를 카메라에 붙입니다. position에는 Unity의 에디터에서 회전의 중심이 되는 캐릭터를 넣어 둡시다.



    Unity 에디터 측에서는 CrossPlatformInput 안에 있는 CarTiltControls를 사용합시다. CarTiltControls 안에 있는 LookUpAndDownTouchpad를 이용합니다.

    @ 군조

    CarTiltControls에 연결된 Touch Pad의 Control Style을 Swipe로 설정하면 카메라가 스와이프로 회전할 수 있습니다.



    카메라를 스와이프하여 회전하는 방법은 이상입니다.



    화면 하단의 조이 스택을 조작한 방향으로 캐릭터를 달립니다.



    이 구현은 초보자의 나에게는 느렸다.



    조이스틱을 조작한 방향으로 달릴 때 두 가지 고려해야 할 사항이 있습니다.



    • 카메라도 회전하고 있으므로 카메라의 각도를 더한다.
    • 각도를 구하는 함수 Vector3.Angle()는 각도는 알지만 회전한 방향은 모른다.


    이 니 포인트를 근거로 한 다음 구현 된 코드는 다음과 같습니다



    void Update()
        {
            Horizontal = CrossPlatformInputManager.GetAxis("Horizontal");
            Vertical = CrossPlatformInputManager.GetAxis("Vertical");
    
            vec3 = new Vector3(Horizontal,0,Vertical);//ジョイステックの方向ベクトル作成
            forward = new Vector3(0,0,1);//基準となる方向ベクトル
            cameraforward = obj.transform.forward.normalized;//カメラの方向ベクトル
    
            angle2 = Vector3.Angle(forward, cameraforward);//カメラと基準ベクトルの角度を求める
            if (forward1.x < 0) angle2 *= -1;//左右の調整
    
            if(vec3.magnitude>1)  vec3=vec3.normalized;//ベクトルの正規化
    
            float angle = Vector3.Angle (vec3,  forward);//ジョイスティックと基準ベクトルの角度を求める
            if (vec3.x < 0) angle *= -1;//左右の調整
    
            transform.rotation = Quaternion.AngleAxis(angle+angle2,transform.up);//キャラの回転
            transform.Translate(0,0,vec3.magnitude*Time.deltaTime*5);//移動
        }
    


    코멘트를 붙이는 법이 잘못되었습니다.

    12시 방향에 대해 카메라와 조이스틱이 얼마나 회전하고 있는지를 계산하여 더합니다.

    MobileSingleStickControl 안에 있는 MobileJoystick를 이용하고 있습니다.





    끝입니다...

    여가요...

    여름방학을 만끽할 수 없었습니다...


    좋은 웹페이지 즐겨찾기