3D TPS 사격 게임을 하고 싶은 분의 일기입니다.

5640 단어 UnityC#
개시하다
이 기사는 내가 유니티에서 3D TPS 사격 게임을 만드는 과정을 보존하기 위해 쓴 것이다.
프로그램을 작성하는 과정에서 제가 참고했던 것들을 써서 같은 일로 정체된 사람들을 도와주고 싶습니다.
하고 싶은 거.

위에 그림처럼 인상적인 걸 만들고 싶어요!비록 그렇긴 하지만, 나는 이 그림이 그림이 없어야 모두에게 전달할 수 있다고 생각하기 때문에 간단하게 설명해 드리겠습니다.
생물이 거의 멸종된 세계에서 나는 곳곳에 나타난 적을 쓰러뜨리면서 중요한 물건을 가지고 여행하는 놀이를 만들고 싶다!
그렇게 말하지만 경박하고 단순하게 넓은 세계에서 움직이는 게임을 만들 수 있다고 생각하지 않아서 첫 번째 목표로 삼았어요.
나는 시작부터 끝까지 적을 쓰러뜨리면서 중요한 물건을 나르는 게임을 만들고 싶다.
진보적
객체는 임시로 배치되지만 다음 작업을 수행할 수 있습니다.
운영 구상은 PS4 디렉터에서 수행합니다.
- 모바일 유저
- 플레이어를 따라 플레이어를 중심으로 회전하는 카메라
- 총에서 마젤 섬광까지 겨냥한 전방에 물체가 있으면 맞은 곳에 효과가 있다

PS4 컨트롤러 설정 정보
PS4 컨트롤러를 사용하려면 먼저 컨트롤러의 조작을 분배해야 한다.
그러므로 아래 두 편의 문장을 참고하도록 허락해 주십시오.
Unity에서 PS4 컨트롤러(DuelShock4) 사용
일주일 지연 게임 공방 Unity PS4 컨트롤러 사용 방법
플레이어 및 카메라
여기에 유저와 카메라에 대한 처리 프로그램을 적으세요.여기서 이쪽 기사를 참고하게 해주세요.
Unity에서 카메라의 방향을 기준으로 이동하는 방법 및 회전에 따른 카메라 설치
- 모바일 유저
여기서 이동은 컨트롤러의 왼쪽 방망이로 할 수 있다.

    float inputHorizontal;
    float inputVertical;
    Rigidbody rb;

    float moveSpeed = 3f;

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

    void Update() {
        inputHorizontal = Input.GetAxisRaw("Horizontal Stick-L");
        inputVertical = Input.GetAxisRaw("Vertical Stick-L") * -1;
    }

    void FixedUpdate() {
        // カメラの方向から、X-Z平面の単位ベクトルを取得
        Vector3 cameraForward = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized;

        // 方向キーの入力値とカメラの向きから、移動方向を決定
        Vector3 moveForward = cameraForward * inputVertical + Camera.main.transform.right * inputHorizontal;

        // 移動方向にスピードを掛ける。ジャンプや落下がある場合は、別途Y軸方向の速度ベクトルを足す。
        rb.velocity = moveForward * moveSpeed + new Vector3(0, rb.velocity.y, 0);

        // キャラクターの向きを進行方向に
        if (moveForward != Vector3.zero) {
            transform.rotation = Quaternion.LookRotation(moveForward);
        }
    }
카메라 조작
여기서 카메라 이동은 컨트롤러의 오른쪽 방망이로 할 수 있다.

    public new GameObject targetObj;
    Vector3 targetPos;
    float speedX = 200.0f;
    float speedY = 200.0f;
    float angleLimitUp;
    float angleLimitDown;
    float stickInputX = 0f;
    float stickInputY = 0f;
    bool stickFlag_h = false;
    bool stickFlag_v = false;
    float r = 0f;
    float myPositionY;

    void Start () {
        targetPos = targetObj.transform.position;
        r = Mathf.Abs(targetPos.z - this.transform.position.z);
        angleLimitUp = targetPos.y + r*Mathf.Sin(80.0f * Mathf.Deg2Rad);
        angleLimitDown = targetPos.y +  r*Mathf.Sin(-45.0f * Mathf.Deg2Rad);
    }

    void Update() {
        Transform myTransform = this.transform;
        // targetの移動量分、自分(カメラ)も移動する
        transform.position += targetObj.transform.position - targetPos;
        targetPos = targetObj.transform.position;

        //Rスティックが左に倒されたら右回転
        if(Input.GetAxis("Horizontal Stick-R") < 0){
            stickFlag_h = true;
            stickInputX = Input.GetAxis("Horizontal Stick-R");
            // targetの位置のY軸を中心に、回転(公転)する
            transform.RotateAround(targetPos, Vector3.up, stickInputX * Time.deltaTime * speedX);
        }
        //Rスティックが右に倒されたら左回転
        if(Input.GetAxis("Horizontal Stick-R") > 0){
            stickFlag_h = true;
            stickInputX = Input.GetAxis("Horizontal Stick-R");
            // targetの位置のY軸を中心に、回転(公転)する
            transform.RotateAround(targetPos, Vector3.up, stickInputX * Time.deltaTime * speedX);
        }
        //Rスティックが上に倒されたら下回転
        if(Input.GetAxis("Vertical Stick-R") < 0){
            stickFlag_v = true;
            stickInputY = Input.GetAxis("Vertical Stick-R");
            myPositionY = myTransform.position.y;
            if(myPositionY > angleLimitDown){
                // カメラの垂直移動
                transform.RotateAround(targetPos, transform.right, stickInputY * Time.deltaTime * speedY);
            }
        }
        //Rスティックが下に倒されたら上回転
        if(Input.GetAxis("Vertical Stick-R") > 0){
            stickFlag_v = true;
            stickInputY = Input.GetAxis("Vertical Stick-R");
            myPositionY = myTransform.position.y;
            if(myPositionY < angleLimitUp){
                // カメラの垂直移動
                transform.RotateAround(targetPos, transform.right, stickInputY * Time.deltaTime * speedY);
            }
        }
        stickFlag_h = false;
        stickFlag_v = false;
    }
무기 동작
이번에는 실제로 총에서 총알을 발사하는 것이 아니라 효과로 표현하는 것을 고려했다.
총과 마젤 섬광으로 조준한 전방에 물체가 있으면 맞은 곳에 효과가 있다.
여기서 이쪽 기사를 참고하게 해주세요.
총알 발사 처리 방법 & 효과 추가 방법
무기 동작에 관한 절차는 줄곧 참고 보도였기 때문에 여기에 기재하지 않는다.효과가 변경됩니다.
금후
요컨대
플레이어의 3D 모형을 만들어 걷는 애니메이션!
지금은 카메라를 향해 가로로 이동하면서 정면으로 총을 쏘는 상황에서도 게이머들은 옆으로 향하고 위화감만 있기 때문에 이런 불협화감을 없애기 위해 모형을 만들어 애니메이션을 만들고 싶다.

좋은 웹페이지 즐겨찾기