「Unity」カテゴリーアーカイブ

Photonで、生成されたゲームオブジェクトを追う

たぶん、名前が重複してうまく動きません。生成時に名前を変更するのが必用。

using Photon.Pun;
using Photon.Realtime;
using UnityEngine;

// MonoBehaviourではなくMonoBehaviourPunCallbacksを継承して、Photonのコールバックを受け取れるようにする
public class SampleScene : MonoBehaviourPunCallbacks
{

    //follow_camスクリプトがついているGameObjectをインスペクターでセットする用
    public GameObject myCam;
    //作成されたオブジェクトを入れる
    GameObject instanceObj;

    //follow_camスクリプトをanotehrScriptとして読み込む
    [SerializeField] private follow_cam anotherScript;

    private void Start()
    {
        // PhotonServerSettingsに設定した内容を使ってマスターサーバーへ接続する
        PhotonNetwork.ConnectUsingSettings();
    }

    // マスターサーバーへの接続が成功した時に呼ばれるコールバック
    public override void OnConnectedToMaster()
    {
        // "room"という名前のルームに参加する(ルームが無ければ作成してから参加する)
        PhotonNetwork.JoinOrCreateRoom("room", new RoomOptions(), TypedLobby.Default);
    }

    // マッチングが成功した時に呼ばれるコールバック
    public override void OnJoinedRoom()
    {
        // マッチング後、ランダムな位置に自分自身のネットワークオブジェクトを生成する
        var v = new Vector3(Random.Range(-3f, 3f), Random.Range(-3f, 3f));

        //生成し、instanceObjに入れる※オンライン対戦させると同じ名前になるので、名前を変更する必用があるかも?
        instanceObj = PhotonNetwork.Instantiate("car_prefab", v, Quaternion.identity);

        //myCamにアサインされているgameobjectのfollow_camスクリプトをanotherScriptとする
        anotherScript = myCam.GetComponent < follow_cam > ();
        //anotherScript(実際にはfollow_cam)の変数のTaget(型はTransform)に、37行目で生成したinstanceObjのTransform(型を合わせる)をセットすする
        anotherScript.Target = instanceObj.transform;
    }



}

 

WaypointAgent.cs のスクリプト

以下Gitよりダウンロードできます。

https://gist.github.com/tsubaki/7e22cec8527c534e4c7a

右上のRawを押すとソースがでてきますので、提示されたファイル名WaypointAgent.cs で保存

バックアップ


using UnityEngine;
using System.Collections;
using UnityStandardAssets.Utility;

[RequireComponent(typeof(WaypointProgressTracker))]
public class WaypointAgent : MonoBehaviour
{
    private WaypointProgressTracker tracker = null;

    [SerializeField, Range(0, 10)]
    protected float speed = 1;

    void Start()
    {
        tracker = GetComponent&lt;WaypointProgressTracker&gt;();
    }

    void Update()
    {
        Vector3 targetPosition = tracker.progressPoint.position + tracker.progressPoint.direction;
        transform.position = Vector3.MoveTowards( transform.position, targetPosition, speed * Time.deltaTime);
    }
}

解説動画

UnityでGoogle Cloud Natural Languageにアクセスする

APIキーが見えるのであくまでも実験用です※PHPだからクライアントには見えないか,,

流れ

Google Cloud Natural LanguageのAPIキーを取得

(がんばってとってください)

  1. 作成するとこんな画面がでてきます
  2. HTTPリファラかIPアドレス制限(サーバのIPアドレス)を使用します
  3. PHPファイルを作成します(test2.php)
<?php
if(isset($_POST["comment"])){
$comment = $_POST["comment"];
$url = 'https://language.googleapis.com/v1/documents:analyzeSentiment?key=(ここに自分のAPIキーを入れる)';
$document = array('type' =>'PLAIN_TEXT','language' =>'ja','content' =>$comment);
$postdata = array('encodingType' => 'UTF8', 'document' => $document);
$json_post = json_encode($postdata);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_post);
$result = curl_exec($ch);
curl_close($ch);
 
$result_array = json_decode($result,true);
    
echo $result_array[documentSentiment][score];
 
}
?>

サーバにアップロードし,そのページまでのURLを確認します

 

Unit側のC#ファイルを作成します

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;//<--追加
//using System;

public class test2 : MonoBehaviour
{

    public Text ResultText_;
    public Text InputText_;
    public string ServerAddress;//サーバアドレスをエディタで入力する


    // Update is called once per frame
    void Update()
    {
        
    }

    void Start()
    {
        ResultText_.text = "";//画面表示を消す

    }

    //UIのボタンにアサインするスクリプト
    public void SendSignal_Button_Push()
    {
        StartCoroutine("post_data");//ボタン押されたらコルーチンを開始
    }



    private IEnumerator post_data()
    {
        WWWForm form = new WWWForm();
        form.AddField("comment", InputText_.text); //Input Field等から渡された変数をcommentのタグ付けして内容を送信
        WWW post = new WWW(ServerAddress, form);
        yield return post;//データの戻りを待つ
        Debug.Log(post.text);//コンソールに表示(この出力内容はPHPで変更可能)
        ResultText_.text = post.text;
    }




    }

Unityでの操作

  1. Unityで空のGameObjectを作成し,test2.csを貼り付けます
  2. PHPへのURLを入力します
  3. GameObject>UI>InputFiledGameObject>UI>Textを作成し,下図のように割り当てます
  4. GameObject>UI>Buttonを作成し,Inspectorからボタンを押せるようにします
  5. InputFieldはMuli Line Newlineの設定します
  6. Unityを再生し,文字を入力すると,感情が帰ってきます
  7. 「課題が終わらない」は-0.2でした

 

スクリプトのなんとなく対応みたいなの

Android版をビルドする(2019版)

こちらを参考にhttps://docs.unity3d.com/jp/540/Manual/android-GettingStarted.html

ソフトウェアのバージョン確認とインストール

  • AndroidビルドにはAndroidSDKが必要
  • 2つのライブラリの場所をUnityのPreferenceで指定する
    • AndroidSDKダウンロード
    • AndroidStudioを起動する
    • 起動画面の Configure>SDK Managerを選択
    • Appearance & Behaviour> System Settings>Android SDKを選び,利用したいバージョンを選択し,Applyを押す(自動でSDKがダウンロードし展開される)※画像では5.0を選択している
    • 次に,上部に表示されたパスを覚える(Ctrl+Cキーでコピーする)

Unityでの作業

  1. Unity>Edit>Preferncesを選択.External ToolsのAndroid>SDKの欄に上記のパスを入力
  2. JDKダウンロード(Unityから JDK****/Contents/Home のパス指定)JDK8が無難(JDKの欄が空欄でなければここは飛ばしてもうまく行くようです)
  3. JDKの欄のBrowseを押し, コンピュータ>ローカルディスク(Cドライブ)>ProgramFiles(x86)>Java>Jdk1.8.0_151 のフォルダを選択しフォルダーの選択ボタンを押す
  4. JDKの項目はそのまま,NDKの項目も空にする
  5. Build Settings>PlatformAndroidを選択
  6. Switch Platform をクリック(数分から数時間かかる)
  7. Switchがうまくいかない場合,Hドライブを使用しているかドライブに空きが無い可能性があります.最低でも256MBの空きがあるドライブで制作してください
  8. PlayerSettingsをクリック
  9. Bundle Identifierを設定(com.companyname.productname)このcompanynameは自由に決めてください,productnameはアプリ名にしてみる
  10. Minimum API Levelを設定する.なお提出用アプリはこの設定をAndroid5.0で作成してください
    例)com.iml.coin
  11. Buildをクリック
  12. 保存先を訪ねられるので,半角英数字でアプリ名を入力し保存をクリック,保存先はUnityのプロジェクトフォルダ内が無難です
  13. ビルド完了を待つ(20〜30分かかる場合もある)
  14. ビルド開始後はかなり待たされても強制終了などはしない方がいい.プロジェクトごと壊れることもある
  15. ○○○.apkが作成される.これがアプリ本体
  16. Androidの場合は,直接アプリをAndroid内に保存できる
  17. USBケーブルなどで接続し実機にコピー,Android側でファイルを見るアプリなどでコピーしたアプリを探し,インストールする

エラー時

Androidのビルド設定で,最小と最大の値をどうするか,ELSの設定はどうするか,テクスチャの圧縮は何が良いか,などいろいろ組み合わせがありますのでいろいろ試してみてください.

作成したボタンが異常に小さい!CanvasにComponent>Layout>CanvasScalerを入れる

Switchがうまくいかない場合,Hドライブを使用しているかドライブに空きが無い可能性があります.最低でも256MBの空きがあるドライブで制作してください

Gradle prewarm failedが出た場合>Build SystemをGradleからInternalに変更

バーチャルYoutuberになりたい

ふとバーチャルYoutuberのアプリを作りたくなったのでリソースを探すけど,詳しい説明が無かったのでメモ

必用なもの

iPhoneX以降,Unity2018.2以降,XCODE

 

Unity Packageを以下からダウンロードしインストール

https://github.com/Unity-Technologies/facial-ar-remote/releases

新規Unityプロジェクトを立ち上げる

 

【ビルドの設定】

  1. UnityをiOSビルドに変更
  2. faical-ar-remote>Remote>Scene>Clientを起動
  3. File>Build Settings>Player Settingsを起動
  4. other settingsのBundle Identifierを設定
  5. Target minimum iOS version を11.3以上にする
  6. Camera Usage Description に AR Face Tracking と入力
  7. Requires ARKit にチェックを入れる
  8. Scripting Define Symbols に ARKIT_1_5 と入力

 

【まずiPhoneアプリを作成】

  1. final-ar-remote>Remote>Scene>Clientを開いているか確認
  2. ビルドし,XCODEでアプリ化しデバイスにインストール
  3. 作成されたアプリを起動

【サンプルシーンを開いて確認】

  1. iPhoneとMacが同じルータ内に接続されているか確認
  2. final-ar-remote>Examples>Scenes>SlothBlendShapesを開く
  3. SlothBlendShapesのHierarchyのStreamReaderのInspectorのNetworkStreamのPortをiphoneアプリにポートと同じにする
  4. 再生ボタンをクリック
  5. ConsoleにIPアドレスが出る(2つIPアドレスが出る時はWifiと有線LANが見えているのでどちらか切るといいかも)
  6. iPhoneのアプリにConsoleに表示されたIPアドレスを入力
  7. iPhoneのアプリでConnectを押す

 

facialが動きます.お疲れ様でした.

 

参考サイト

https://github.com/Unity-Technologies/facial-ar-remote

https://blogs.unity3d.com/jp/2018/08/13/facial-ar-remote-animating-with-ar/

https://qiita.com/Yuzu_Unity/items/91fc2b6f8ebe0fc0e839

https://qiita.com/syoyo/items/f0ad3eb4ed3387ee6462

 

 

 

iOS版アプリをビルドする-2019加筆

ソフトウェアのバージョン確認とインストール,AppleIDの作成

  • 2019年12月現在,iOSビルドに必要なソフトウェア
  • XCODE11.2が必用
  • インストール要件
    • macOS 10.14.4 以降(アップルメニュー>このMacについて で確認可能.必要ならソフトウェアアップデート を実施)
    • ソフト容量8GB(インストールにはもっと必用)
    • AppleIDが必要(作成済みであればスキップ)

Unityでの作業

  1. File>Build Settings>PlatformiOSを選択
  2. Switch Platform をクリック(場合によっては数十分から数時間かかる)
  3. Game画面のAspect Ratioを調整する
  4. Canvasを選択し,CanvasのCanvas Scalerを調整する.
  5. ボタンの大きさも調整する
  6. File>Build SettingsPlayer Settingsをクリック
  7. Bundle Identifierを設定(com.yourcompanyname.productname)例−> com.(半角英数字で社名).(半角英数のアプリ名)
  8. Symlink unity librariesとDevelopment Buildのチェックを外す
  9. Buildをクリック
  10. ビルド完了を待つ(20〜30分かかる場合もある)※ビルドエラーが出た場合はエラーを解決してからビルドする
  11. ビルドエラーが出てもBuild Succeedと表示されることがあるので注意.Consoleを確認し赤の!項目が出ていないか確認

Mac,Xcode及びiPhoneでの作業

  1. iPhoneをMacに接続しiPhoneのロックを解除しておく
  2. ビルドで作成されたフォルダ内のUnity-iPhone.xcodeproj をダブルクリック(XCODEが起動する)
  3. (iPhone側)このコンピュータを信頼をタップ
  4. (iPhone側)パスコード入力
  5. 読み込みやiPhoneの情報を取得するなどに時間がかかる
  6. (Xcode)Unity-iPhoneのビルド先を自分のiPhoneにする
  7. (Xcode)Targets>Unity-iPhoneを選択し,Signing&Capabilitiesの項目でAutomatically Signingを選択
  8. (Xcode)Budle Identitfie>AppleIDを追加
  9. (Xcode)Apple IDの認証などがあります
  10. Signing Certificate でDevelopment選択
  11. 再生ボタンをクリックしビルドを実行(ビルド振興画面が表示される)
  12. 実機にインストール直前,パスワード入力が求められるが,今ログインしているMacのパスワードを入力する
  13. しばらく後に実機にインストールされる
  14.  (追記)-libiphoneが無いといったエラーが出る場合,ビルドしたディレクトリのLibraryフォルダ内に該当のライブラリがあるか確認(600MB前後のファイル)これは,Bulid SettingsのSymlink unity librariesのチェックを外していないとおきる
  15. Could not Lunch(アプリをスタートできない)といったエラーが出るが,これはiPhone側でこのユーザを承認していない為である(そこで,次↓の項目を実施する)
  16. (iPhone側)設定>一般>プロファイルとデバイス管理 で自分のAppleIDのデベロッパAPPを承認する
  17. 終了時,共用Macの場合必ずAppleIDを削除しておきましょう

 

取得してSE再生,壁に当たってSE再生

スクリプトのみ

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class destroy_SE : MonoBehaviour
{
    public AudioClip impact;//音のファイル読み込み
    public AudioClip wallhit;
 
    AudioSource audioSource;//音の再生装置
 
    private void Start()
    {
        audioSource = GetComponent<AudioSource>();
    }
 
    //当たって消すパタン
    private void OnTriggerEnter(Collider other)
    {
 
        if(other.gameObject.tag == "wall")//タグがwallなら
        {
            //audioSource.PlayOneShot(wallhit, 0.7F);//impactを音量0.7で再生
 
        }
        else
        {
            Destroy(other.gameObject);
            audioSource.PlayOneShot(impact, 0.7F);//impactを音量0.7で再生
        }
        
 
        //点数を加算
 
 
 
        //加算した点数をUIに反映
 
    }
    //壁
    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.tag == "wall")//タグがcollision なら
        {
            audioSource.PlayOneShot(wallhit, 0.7F);//wallhitを音量0.7で再生
 
        }
    }
 
}

 

はじめてのUnity2019−変更箇所

はじめてのUnityのチュートリアルサイト変更に伴い,取りこぼしている点について補足します.

変更後のサイト−>https://learn.unity.com/project/yu-zhuan-gashi?language=ja

 

この後の作業は以下の通りです

UIを作成>UI用のスクリプトを作成>ゲーム実行

続きを読む はじめてのUnity2019−変更箇所

Maya->Unity2019(4)

 

スクリプトの適用

chair.csは削除します.スクリプトを選択し,chairの歯車のアイコンからremove componentを選択して削除します.

 

次に,回転に対応したスクリプトを作成する.ファイル名はmove1.cs

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

[RequireComponent(typeof(CharacterController))]
public class move1 : MonoBehaviour
{

	public float speed = 3.0F;
	public float rotateSpeed = 3.0F;
	public float gravity = 10f;
	public float jumpPower = 5;

	private Vector3 moveDirection;
	private CharacterController controller;

	void Start()
	{

		// コンポーネントの取得
		controller = GetComponent<CharacterController>();//キャラクターコントローラを取得し,変数contorllerに収納

	}

	void Update()
	{

		if (controller.isGrounded)//接地していれば
		{

			// 回転
			transform.Rotate(0, Input.GetAxis("Horizontal") * rotateSpeed, 0);

			// キャラクターのローカル空間での方向
			moveDirection = transform.transform.forward * speed * Input.GetAxis("Vertical");

			// ジャンプ
			if (Input.GetButtonDown("Jump")) moveDirection.y = jumpPower;

		}
		else
		{

			// ジャンプ落下
			moveDirection.y -= gravity * Time.deltaTime;

		}

		//移動させる
		controller.Move(moveDirection * Time.deltaTime);

	}

}

 

このスクリプトをイスのモデルにアサインします.

 

Maya->Unity2019(3)

Animation Controllerの設定

  1. Assets>Create>AnimationControllerAnimationControllerを作成する.名前は何でもかまわない
  2. 作成したAnimationControllerをダブルクリックする
  3. Animation Controller画面が開かれる
  4. アセット内のイスの中にTake001というアニメーションファイルが入っているので,Animation Controllerにドロップする(勝手にEntryと接続される)
  5. ChairのAnimator作成したAnimation Controllerを入れる
  6. その際,Apply Rootmotionにチェックを入れること
  7. 再生してみる