Unity의 우주선 컨트롤러

이 튜토리얼에서는 Unity에서 우주선 컨트롤러를 만드는 방법을 보여 드리겠습니다.

의 시작하자!

단계

  • 새로운 GameObject를 생성하고 호출하세요. "Spaceship"
  • 우주선 모델을 "Spaceship" 객체 내부로 이동하고 위치를 (0, 0, 0)으로 변경합니다.
  • 새 스크립트를 만들고 이름을 "SC_SpaceshipController"로 지정한 후 그 안에 아래 코드를 붙여넣습니다.

SC_SpaceshipController.cs

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

[RequireComponent(typeof(Rigidbody))]

public class SC_SpaceshipController : MonoBehaviour
{
    public float normalSpeed = 25f;
    public float accelerationSpeed = 45f;
    public Transform cameraPosition;
    public Camera mainCamera;
    public Transform spaceshipRoot;
    public float rotationSpeed = 2.0f;
    public float cameraSmooth = 4f;
    public RectTransform crosshairTexture;

    float speed;
    Rigidbody r;
    Quaternion lookRotation;
    float rotationZ = 0;
    float mouseXSmooth = 0;
    float mouseYSmooth = 0;
    Vector3 defaultShipRotation;

    // Start is called before the first frame update
    void Start()
    {
        r = GetComponent<Rigidbody>();
        r.useGravity = false;
        lookRotation = transform.rotation;
        defaultShipRotation = spaceshipRoot.localEulerAngles;
        rotationZ = defaultShipRotation.z;

        Cursor.lockState = CursorLockMode.Locked;
        Cursor.visible = false;
    }

    void FixedUpdate()
    {
        //Press Right Mouse Button to accelerate
        if (Input.GetMouseButton(1))
        {
            speed = Mathf.Lerp(speed, accelerationSpeed, Time.deltaTime * 3);
        }
        else
        {
            speed = Mathf.Lerp(speed, normalSpeed, Time.deltaTime * 10);
        }

        //Set moveDirection to the vertical axis (up and down keys) * speed
        Vector3 moveDirection = new Vector3(0, 0, speed);
        //Transform the vector3 to local space
        moveDirection = transform.TransformDirection(moveDirection);
        //Set the velocity, so you can move
        r.velocity = new Vector3(moveDirection.x, moveDirection.y, moveDirection.z);

        //Camera follow
        mainCamera.transform.position = Vector3.Lerp(mainCamera.transform.position, cameraPosition.position, Time.deltaTime * cameraSmooth);
        mainCamera.transform.rotation = Quaternion.Lerp(mainCamera.transform.rotation, cameraPosition.rotation, Time.deltaTime * cameraSmooth);

        //Rotation
        float rotationZTmp = 0;
        if (Input.GetKey(KeyCode.A))
        {
            rotationZTmp = 1;
        }
        else if (Input.GetKey(KeyCode.D))
        {
            rotationZTmp = -1;
        }
        mouseXSmooth = Mathf.Lerp(mouseXSmooth, Input.GetAxis("Mouse X") * rotationSpeed, Time.deltaTime * cameraSmooth);
        mouseYSmooth = Mathf.Lerp(mouseYSmooth, Input.GetAxis("Mouse Y") * rotationSpeed, Time.deltaTime * cameraSmooth);
        Quaternion localRotation = Quaternion.Euler(-mouseYSmooth, mouseXSmooth, rotationZTmp * rotationSpeed);
        lookRotation = lookRotation * localRotation;
        transform.rotation = lookRotation;
        rotationZ -= mouseXSmooth;
        rotationZ = Mathf.Clamp(rotationZ, -45, 45);
        spaceshipRoot.transform.localEulerAngles = new Vector3(defaultShipRotation.x, defaultShipRotation.y, rotationZ);
        rotationZ = Mathf.Lerp(rotationZ, defaultShipRotation.z, Time.deltaTime * cameraSmooth);

        //Update crosshair texture
        if (crosshairTexture)
        {
            crosshairTexture.position = mainCamera.WorldToScreenPoint(transform.position + transform.forward * 100);
        }
    }
}
  • SC_SpaceshipController 스크립트를 "Spaceship" 개체에 연결
  • 새로운 GameObject를 생성하고 이름을 "CameraPosition"로 지정하고 "Spaceship" 객체 내부로 옮깁니다.
  • Main Camera를 "CameraPosition" 객체 내부로 이동하고 위치를 (0, 0, 0)으로 변경합니다.
  • 결과에 만족할 때까지 "CameraPosition" 개체 위치를 조정하세요.

  • 기본 카메라를 "Spaceship" 개체 외부로 이동합니다.
  • SC_SpaceshipController에서 Camera Position, Main Camera 및 Spaceship Root(우주선 모델의 변환이어야 함) 변수를 할당합니다.

  • 새 UI 캔버스를 만듭니다(GameObject -> UI -> Canvas).
  • Canvas 개체 -> UI -> 이미지를 마우스 오른쪽 버튼으로 클릭합니다.
  • 새 이미지의 정렬을 왼쪽 상단으로 변경

  • 이미지에 아래 스프라이트를 할당하세요.

공상 과학 십자선

  • 마지막으로 새로 생성된 이미지를 SC_SpaceshipController의 Crosshair Texture에 할당합니다.

우주선 컨트롤러가 준비되었습니다. 주변을 둘러보려면 마우스를 사용하고, Z축을 따라 회전하려면 A/D를 사용하고, 가속하려면 마우스 오른쪽 버튼을 사용하세요.

추천 기사
Unity용 비행기 컨트롤러
Unity용 3D 웜 컨트롤러 튜토리얼
Unity용 리지드바디 기반 유성 플레이어 컨트롤러
Unity용 하향식 플레이어 컨트롤러 튜토리얼
Unity용 헬리콥터 컨트롤러
Unity의 2D 플랫폼 게임 캐릭터 컨트롤러에 이중 점프 지원 추가
Unity용 자동차 컨트롤러