Unity에서 3D 모형을 뛰다.(가져온 3D 모델에 적중력 판정, 1인칭 시점, 시점 이동, 방향 방향)

1. 소개


1.1 경과


여름방학 자유연구라는 이름의 게임.(우리는 이미 여름방학이다!)

1.2 하고 싶은 일


크게 세 가지 문제로 나누다
1. Cinema4D(모델링 소프트웨어, 유료판) 등으로 제작된 3D 모델을 Unity로 가져옵니다.당첨 여부를 판정하다.
2. 카메라에 관해서는 마우스로 FPS 게임처럼 시점을 이동한다(1인칭 시점)
3. 플레이어 대상 방향으로 이동
이렇게 하면 게임을 할 수 있을 것 같아요.

2. 가져온 모델을 판정합니다.


2.1 모델링 소프트웨어 측면의 설정(비교적 중요)


모델링 소프트웨어, 도구는 모두 가능하지만, 나는 대상 파일로 내보낼 수 있다고 생각한다.Blender 제작된 모델이라면 Unity 프로젝트 파일의 상태를 유지해도 읽을 수 있지만 이걸 사용하지 않습니다.객체로 내보내야 합니다.하나의 대상과 하나의 격자로서의 동의.나중에 Unity에 배치할 때 하위 객체만 있으면 됩니다.

파일 형식은 입니다.obj 사용을 권장합니다.(재료가 적용되지 않음)

2.2 2.2 마다 판정


2.2.1 배포 리소스 SAColliderBuilder


이대로 가면 대상이 떨어지니 명중 판정을 해야 한다.하지만 유니티에서 이 판정의 설정은 마음대로 하지 않는다.그곳에서 사용하는 것은 SAColliderBuilder 이 자산이다.리소스 스토어에서 "SACollider Builder"를 검색하면 나와요.Dawnload합시다.

2.2.2 구성 모델

import 디렉토리에 있습니다.obj 파일을 Scene 로 드래그합니다.이럴 때 2.1 이미지면 돼요.하위 객체가 여러 개인 경우 다시 설정합니다.

2.2.3 적응


하위 객체를 선택합니다(2.1의 이미지는 Hierarchy.오른쪽defaultInspector 또는 Mesh Filter 항목이 없으면 내보내기에서 다시 시작합니다.있다면 Mesh Render 적응할 수 있다.선택한 상태SAColliderBuilder의 마지막 부분을 눌러Inspector 검색창에서 Add Component 넣으면 몇 개로 줄어듭니다.그러므로 SA 을 선택하세요.

추가된 어셈블리 SA Mesh Collinder BuilderShape Type, MeshMesh Type 로 설정한 후 Convex Hull 를 눌러 적응을 시작합니다.시간이 좀 걸리니까 조금만 기다려요.

이게 완성이야.모델링 방법에 따라 판정의 범위도 다르다.특히 계단 등은 일부를 잘라낸 느낌으로 모형을 만들면 이상한 충돌 판정이 나온다.하지만 당첨 판정이 생각보다 작지 않아 그물로 채워지지 않는다.

3. 시점 이동


1인칭 시점 (따라가기) 과 마우스 시점 이동을 실현합니다.Process 이 서류를 총결해 봅시다.
CameraSetter.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraSetter : MonoBehaviour
{
    // 追従先
    public GameObject Player;
    // 視点回転スピード
    public float RotateSpeed = 0.1f;

    // 追従先との距離ベクトル
    private Vector3 OffsetVector;
    // 追従先のTransform
    private Transform PlayerTransform;

    void Start()
    {
        // 一番最初に一回だけ呼ばれる。
        // 追従先との距離を覚える。
        OffsetVector = transform.position - Player.transform.position;
        // 追従先のTransformを取る。(カメラが向いた方向に追従先も回転させるため)
        PlayerTransform = Player.GetComponent<Transform>();
    }

    void Update()
    {
        // 追従先との距離を保つ
        transform.position = Player.transform.position + OffsetVector;

        // マウスの回転を感知して回転ベクトル化
        Vector3 angle = new Vector3(
            Input.GetAxis("Mouse X") * 1.0f,
            Input.GetAxis("Mouse Y") * -1.0f,
            0
        );
        // 回転ベクトルをカメラのもとのベクトルに加算
        transform.eulerAngles += new Vector3(angle.y, angle.x);
        // 追従先も加算して回転させる。
        PlayerTransform.transform.eulerAngles += new Vector3(0, angle.x, 0);

    }
}

4. 방향을 향해 전진


W 키를 사용하여 앞으로 이동하고 S 키를 사용하여 뒤로 이동합니다.삼각함수를 사용해서 모르는 사람을 gg라고 합니다.
PlayerSetter.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerSetter : MonoBehaviour {

    // 自分のオブジェクト
    public GameObject Player;
    // X軸への移動スピード
    public float MoveSpeedX = 20.0f;
    // Z軸への移動スピード
    public float MoveSpeedZ = 20.0f;

    // ジャンプの高さ
    private float MoveSpeedY = 10f;
    private Rigidbody rb;

    void Start()
    {
        // プレイヤーオブジェクトの物理演算数を取得。
        rb = Player.GetComponent<Rigidbody>();
    }

    // 毎フレームごとに実行される。
    void FixedUpdate() { 

        // wを押したとき
        if (Input.GetKey(KeyCode.W))
        {
            rb.AddForce(Mathf.Cos(transform.localEulerAngles.y * Mathf.Deg2Rad) * MoveSpeedX, 0, -Mathf.Sin(transform.localEulerAngles.y * Mathf.Deg2Rad) * MoveSpeedX);
        }

        // sを押したとき
        if (Input.GetKey(KeyCode.S))
        {Pla
            rb.AddForce(-Mathf.Cos(transform.localEulerAngles.y * Mathf.Deg2Rad) * MoveSpeedX, 0, Mathf.Sin(transform.localEulerAngles.y * Mathf.Deg2Rad) * MoveSpeedX);
        }

        // スペースを押したとき
        if (Input.GetKeyDown(KeyCode.Space))
        {
            Vector3 go = new Vector3(0, MoveSpeedY, 0);
            rb.velocity = go;

        }
    }
}

5. 적응


카메라를 유저 대상의 눈 위치에 설치하고 CameraSetter.cs 카메라에 설치CameraSetter.cs 유저 대상에 설치합니다.그리고 각자 PlayerSetter.cs 에 맞는 파일을 설정하면 됩니다.아, 유저 대상에게 강체 구성 요소를 추가하는 것을 잊지 마세요.

6. 총결산


그래서 이 정도의 코드를 사용하면 FPS로 대지를 달릴 수 있다.
등장인물의 이동법입니다. Inspector 좋아요?나는 좀 조화롭지 않다고 느낀다.(특히 점프 같은)
누가 알려주면 다행이야.
그럼 여름방학 잘 보내세요!
트위터: https://twitter.com/Cyber_Hacnosuke

좋은 웹페이지 즐겨찾기