うにty生活

UnityChanを生活させたい

Unityちゃんにスマホ持たせてあげた #23

f:id:tubakihimeLoveHate:20190601140004p:plain


どうもラブヘイトです!

少しづつ家を豪華にしていけたらいいなと思ってオブジェクト作ってます

一人暮らし始めたてみたいな感じですね笑

 

今回はUnityちゃんに物を持たせていきます

 

◆オブジェクトの準備

タイトル通りスマホを持たせてあげたいので、用意しました

iphoneXのオリジナルカラーです!もちろんapple非公認です!

f:id:tubakihimeLoveHate:20190601155913p:plain
これもBlenderで作成したものです

 今回はこのスマホをUnityちゃんに持たせていきます

もしこの記事を見ながら進めていくという人はとりあえずCubeで代用してください

 

◆オブジェクトを持たせる

手の動きと一緒にするのは簡単で、持たせたいオブジェクトをUnityちゃんの手の子にすれば完了です

f:id:tubakihimeLoveHate:20190601195453p:plain

◆位置調節

位置を調整します

f:id:tubakihimeLoveHate:20190601195441p:plain

 

毎回位置を合わせるのは面倒なので、後ほどスクリプトにしていきます

◆ポイント

手の子にした時には自動で持ち物オブジェクトの原点を掴むような形になるので、銃や武器などをそのまま持たせた場合は原点(中心)を持ってしまいます

 

回避方法としては

オブジェクトを作る際、持つ位置を原点にして作成する。もしくは

Unity側で簡単にできるのは1つGameObject挟むことです

handmesh

  |__GameObject

                   |___iphoneX(持たせたいもの)

 

どちらにせよ、後者の方法だと手を動かさなくてもiphoneを自在に動かすことができて他のものも持たせられるので汎用的です

f:id:tubakihimeLoveHate:20190602191433g:plain

f:id:tubakihimeLoveHate:20190602191532p:plain

原点の表示がおかしいですが、このようにGameobjectが原点となって棒を回転させることが可能になっています。RectTransformの擬似pivotみたいな役割をしてくれてます

スクリプト作成

スクリプトの前に準備が2つあります

1つ目の準備はまずScene上で一度iphoneXを持たせていい感じに調節します

f:id:tubakihimeLoveHate:20190602193048p:plain

2つ目に調節し終わったiphoneをprefabとして

”Resources/Prefab/”フォルダに置いておきます

f:id:tubakihimeLoveHate:20190602194826p:plain

 

なぜかというと、スケールは持たせたいオブジェクトによって違うからです。本来以下のスクリプトでInstantiateをした場合スケールを設定しなければいけませんが、最初の準備でiphoneXPrefabにスケールが設定されているため書かなくて良いのです

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

public class hand : MonoBehaviour {
 
  //手のオブジェクトを設定
    public GameObject targethand;
    public Vector3 offset;
  //調節用
    [SerializeField]
    float controlX = 90;
    [SerializeField]
    float controlY;
    [SerializeField]
    float controlZ;

    private string path = "Prefab/iphoneX";

    // Use this for initialization
    void Start () {
        offset = new Vector3(controlX,controlY,controlZ);
        HoldInHand();
    }
    
    // Update is called once per frame
    void Update () {
        
    }

    public void HoldInHand(string path=""){
        GameObject obj = Instantiate(Resources.Load<GameObject>(this.path),targethand.transform);
        obj.transform.SetParent(targethand.transform);
        obj.transform.eulerAngles = offset;
    }
}

◆他にも色々

f:id:tubakihimeLoveHate:20190602183712p:plain

こんな風に細長いものも持たせられるようになったので、あとあと武器やら追加した時でもすぐに持たせることができます!

 

◆自撮りUnityちゃん

f:id:tubakihimeLoveHate:20190602183334p:plain

 

を、撮る私笑

f:id:tubakihimeLoveHate:20190602183516p:plain

 

ということで今回は以上です