Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9547

Unityちゃんを車に乗せる

$
0
0
概要 オープンワールド型のゲームを制作するため,Unityちゃんを使用し,車のオブジェクトを乗り降りするシステムを構築しました。 また,車のオブジェクトは,UnityのStandard AssetsのCarオブジェクトに自分で制作したカーモデルを貼り付けたものを使用しました。 一つのオブジェクトにまとめる 車のオブジェクト(Car),Unityちゃん(unitychan),車のfbxモデル(Car_model)を一つのゲームオブジェクト(今回は,Mineという名前にしました)にまとめます。 初期状態として,車のオブジェクトのみ非表示としておきます。 また,車のオブジェクトにはCarCamera,UnityちゃんにはMain Cameraという名前でそれぞれオブジェクト内にカメラを設置しました。 流れ 乗る時の大まかな流れは,キーボードのZキーを押して,Unityちゃんと車のfbxモデルの距離がある値(今回は5未満とした)より小さければ,車のfbxモデルの位置に車のオブジェクトを配置・表示し,Unityちゃんと車のfbxモデルは非表示にします。 降りるときは,Xキーを押して,車のオブジェクトの位置に,Unityちゃんと車のfbxモデルを配置し, Unityちゃんと,車のfbxモデルを表示,車のオブジェクトは非表示にします。 プログラム void Update()//Update関数内に記述 { //事前に二つのオブジェクトの座標を取得 posA = transform.Find("unitychan").position; posB = transform.Find("Car_model").position; //乗る時 if (Input.GetKey(KeyCode.Z))//Zキーを押す { if (car == 0) { //Unityちゃんと車のfbxモデルの距離の値が5より小さいければ,実行 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; } } } 結果(gifファイル) 乗る時 降りる時 おわり 一応,できたつもりですが,少ない知識の中で作成したので,もっと楽な方法があると思います。興味がある方は,他も調べてみてください。 参考させていただいたWebサイト Unityオブジェクトの表示・非表示切り替え【非表示オブジェクトの読み込みも】 https://your-3d.com/unity-set-active/ 【Unity C#】オブジェクト間の距離を取得する https://futabazemi.net/unity/object_distance/

Viewing all articles
Browse latest Browse all 9547

Trending Articles