2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Unityちゃんを車に乗せる

Last updated at Posted at 2022-01-01

unityちゃんライセンス.png

概要

オープンワールド型のゲームを制作するため,Unityちゃんを使用し,車のオブジェクトを乗り降りするシステムを構築しました。 また,車のオブジェクトは,UnityのStandard AssetsのCarオブジェクトに自分で制作したカーモデルを貼り付けたものを使用しました。

一つのオブジェクトにまとめる

車のオブジェクト(Car),Unityちゃん(unitychan),車のfbxモデル(Car_model)を一つのゲームオブジェクト(今回は,Mineという名前にしました)にまとめます。 初期状態として,車のオブジェクトのみ非表示としておきます。 また,車のオブジェクトにはCarCamera,UnityちゃんにはMain Cameraという名前でそれぞれオブジェクト内にカメラを設置しました。 ![Mineオブジェクト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1312991/641f8914-0835-e38e-1d66-3c8e346981a0.png)

※このテストでは,どちらのオブジェクトもHierarchyで生成したMain Cameraを使用しましたが,
Unirtちゃんの方は,下の写真のように,
Assets➡unity-chan!➡Unity-chan!Model➡Prefabs➡for Locomotion
のフォルダ内にあるMain Cameraを使用し,CamPos,FrontPos,JumpPos,LookAtPosもUnityちゃんのオブジェクト内に付け加えた方が,ジャンプした時などにエラーが出ないようになります。(エラーが出ても,ゲーム自体はストップしませんでしたが…)

取り直し.png

流れ

乗る時の大まかな流れは,キーボードのZキーを押して,Unityちゃんと車のfbxモデルの距離がある値(今回は5未満とした)より小さければ,車のfbxモデルの位置に車のオブジェクトを配置・表示し,Unityちゃんと車のfbxモデルは非表示にします。 降りるときは,Xキーを押して,車のオブジェクトの位置に,Unityちゃんと車のfbxモデルを配置し, Unityちゃんと,車のfbxモデルを表示,車のオブジェクトは非表示にします。

プログラム

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

public class Change : MonoBehaviour
{
int car = 0;

Vector3 posA;
Vector3 posB;

void Start()
{
    
}


void Update()//Update関数内に記述
{
    //事前に二つのオブジェクトの座標を取得
    posA = transform.Find("unitychan").position;
    posB = transform.Find("Car_model").position;


    //乗る時
    if (Input.GetKey(KeyCode.Z))//Zキーを押す
    {
        if (car == 0)
        {

            if (Vector3.Distance(posA, posB) < 5)
            {
                //車のfbxモデル位置に車のオブジェクトを配置
                transform.Find("Car").position = transform.Find("Car_model").position;

                //車のオブジェクトのローテーションに車のfbxモデルのローテーションを代入(あまり必要ないかも)
                transform.Find("Car").rotation = transform.Find("Car_model").rotation;

                //車のオブジェクトを表示
                transform.Find("Car").gameObject.SetActive(true);

                //Unityちゃんと車のfbxモデルを非表示に
                transform.Find("unitychan").gameObject.SetActive(false);
                transform.Find("Car_model").gameObject.SetActive(false);
                car = 1;
            }         
        } 
    }


    //降りる時
    if (Input.GetKey(KeyCode.X))//Xキーを押す
    {
        if (car == 1)
        {
            //車のオブジェクトの位置にUnityちゃんを配置
            transform.Find("unitychan").position = transform.Find("Car").position;

            //車のオブジェクトの位置に車のfbxモデルを配置
            transform.Find("Car_model").position = transform.Find("Car").position;

            //unityちゃんのローテーションに車のオブジェクトのローテーションを代入(こっちは重要)
            transform.Find("unitychan").rotation = transform.Find("Car").rotation;

            //車のfbxモデルのローテーションに車のオブジェクトのローテーションを代入(こっちは重要)
            transform.Find("Car_model").rotation = transform.Find("Car").rotation;

            //車のオブジェクトを非表示に
            transform.Find("Car").gameObject.SetActive(false);

            //Unityちゃんと車のfbxモデルを表示
            transform.Find("unitychan").gameObject.SetActive(true);
            transform.Find("Car_model").gameObject.SetActive(true);
            car = 0;
        }
    }
}

}


このプログラムをMineオブジェクトにドラッグしました。


<h1>結果(gifファイル)</h1>
乗る時
![車乗るgif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1312991/b62b3aad-8832-3687-a508-93cb8e5f23ed.gif)

降りる時
![降りるgif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1312991/ceffdae7-deb0-9ca2-59a7-519795e65a1d.gif)

<h1>おわり</h1>
一応,できたつもりですが,少ない知識の中で作成したので,もっと楽な方法があると思います。興味がある方は,他も調べてみてください。

<h1>参考させていただいたWebサイト</h1>
Unityオブジェクトの表示・非表示切り替え【非表示オブジェクトの読み込みも】
https://your-3d.com/unity-set-active/

【Unity C#】オブジェクト間の距離を取得する
https://futabazemi.net/unity/object_distance/



2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?