20220116のUnityに関する記事は8件です。

【Unity】Unity側の値をCSVへ書き出す(Android実機も)

Unity側の値をCSVへ出力する方法についてです。 今回はUnity上での書き込みと、Android実機への書き込みも行います。 環境 Windows10 Unity Hub 2.4.5 Unity 2020.3.25f1 Android Studio 2020.3.1 Unity上での書き込み まずはじめにUnity上でCSVファイルの書き込みを行います。 GameObjectの準備 まずはGameObjectの準備を行います。 以下の3つ作成いたします。 Cube > F Cube > J Empty > SaveCsv 適当に配置してOKです。 Scriptの作成 以下のように作成します。 SampleSaveCsv using System.IO; using System.Text; using UnityEngine; // csvに保存するためのコード // SaveCsvへアタッチ public class SampleSaveCsv : MonoBehaviour { // System.IO private StreamWriter sw; // Start is called before the first frame update void Start() { // 新しくcsvファイルを作成して、{}の中の要素分csvに追記をする sw = new StreamWriter(@"SaveData.csv", false, Encoding.GetEncoding("Shift_JIS")); // CSV1行目のカラムで、StreamWriter オブジェクトへ書き込む string[] s1 = { "F", "J", "time" }; /** * s1の文字列配列のすべての要素を「,」で連結する * @see https://docs.microsoft.com/ja-jp/dotnet/api/system.string.join?view=net-6.0#System_String_Join_System_String_System_String___ */ string s2 = string.Join(",", s1); /** * s2文字列をcsvファイルへ書き込む * @see https://docs.microsoft.com/ja-jp/dotnet/api/system.io.streamwriter.writeline?view=net-6.0#System_IO_StreamWriter_WriteLine_System_String_ */ sw.WriteLine(s2); } // Update is called once per frame void Update() { // Enterキーが押されたらcsvへの書き込みを終了する if (Input.GetKeyDown(KeyCode.Return)) { /** * @see https://docs.microsoft.com/ja-jp/dotnet/api/system.io.streamwriter.close?view=net-6.0#System_IO_StreamWriter_Close */ sw.Close(); } } public void SaveData(string txt1, string txt2, string txt3) { string[] s1 = { txt1, txt2, txt3 }; string s2 = string.Join(",", s1); sw.WriteLine(s2); } } ちなみに「StreamWriterクラス」は、C#のクラスです。 公式ドキュメント new StreamWriter の第二引数にboolean値を渡していますが、 これは「true」だと同階層に同じファイル名があると既存のファイルへ新しい値だけを上書きします。 「false」だと値は全て新しくファイル自体を上書きします。 SampleF using System.IO; using UnityEngine; // Fキーを検出するコード // Fへアタッチ public class SampleF : MonoBehaviour { private float time; GameObject saveCsv; SampleSaveCsv sampleSaveCsv; // Start is called before the first frame update void Start() { /** * SaveCsvのスクリプトを参照する * @see https://docs.unity3d.com/ja/current/ScriptReference/GameObject.Find.html */ saveCsv = GameObject.Find("SaveCsv"); /** * コンポーネントを返す * @see https://docs.unity3d.com/ja/current/ScriptReference/GameObject.GetComponent.html */ sampleSaveCsv = saveCsv.GetComponent<SampleSaveCsv>(); } // Update is called once per frame void Update() { // Fキーが押されたら、csvに「F」と「いつ押されたか」という情報が書き加えられる time += Time.deltaTime; if (Input.GetKeyDown(KeyCode.F)) { sampleSaveCsv.SaveData("F", " ", time.ToString()); } } } SampleJ using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine; // Jキーを検出するコード // Jへアタッチ public class SampleJ : MonoBehaviour { private float time; GameObject saveCsv; SampleSaveCsv sampleSaveCsv; // Start is called before the first frame update void Start() { /** * SaveCsvのスクリプトを参照する * @see https://docs.unity3d.com/ja/current/ScriptReference/GameObject.Find.html */ saveCsv = GameObject.Find("SaveCsv"); /** * コンポーネントを返す * @see https://docs.unity3d.com/ja/current/ScriptReference/GameObject.GetComponent.html */ sampleSaveCsv = saveCsv.GetComponent<SampleSaveCsv>(); } // Update is called once per frame void Update() { // Jキーが押されたら、csvに「J」と「いつ押されたか」という情報が書き加えられる time += Time.deltaTime; if (Input.GetKeyDown(KeyCode.J)) { sampleSaveCsv.SaveData(" ", "J", time.ToString()); } } } それぞれへアタッチ 先程、作成した3つのScriptを以下のようにアタッチします。 SampleF.cs > F SampleJ.cs > J SampleSaveCsv.cs > SaveCsv PC上で動作確認 では、「Play」ボタンを押してキーボードの「FかJ」をタイピングしてみて下さい。 最後に「Enter」キーを押します。 プロジェクトフォルダ直下に「SaveData.csv」というファイルが作成され、以下のように1行目がタイトル、2行目からはどのボタンをいつ押したかが入力されています。 Android実機への書き出し 続いてはAndroidへの書き出しを行います。 今のままのコードでは書き出しはされません。 Android用にコードを記述する必要があります。 端末ごとに処理を分ける方法 詳細は以前書いたこちらの記事をご参考下さい。 SampleSaveCsvの修正 Start内を以下のように修正します。 void Start() { #if UNITY_ANDROID // 新しくcsvファイルを作成して、{}の中の要素分csvに追記をする(Androidの処理) string FilePath = @"/SaveData.csv"; sw = new StreamWriter(Application.persistentDataPath + FilePath, false, Encoding.GetEncoding("utf-8")); #endif #if UNITY_EDITOR // 新しくcsvファイルを作成して、{}の中の要素分csvに追記をする(Unity上での処理) sw = new StreamWriter(@"SaveData.csv", false, Encoding.GetEncoding("Shift_JIS")); #endif // CSV1行目のカラムで、StreamWriter オブジェクトへ書き込む string[] s1 = { "F", "J", "time" }; /** * s1の文字列配列のすべての要素を「,」で連結する * @see https://docs.microsoft.com/ja-jp/dotnet/api/system.string.join?view=net-6.0#System_String_Join_System_String_System_String___ */ string s2 = string.Join(",", s1); /** * s2文字列をcsvファイルへ書き込む * @see https://docs.microsoft.com/ja-jp/dotnet/api/system.io.streamwriter.writeline?view=net-6.0#System_IO_StreamWriter_WriteLine_System_String_ */ sw.WriteLine(s2); } 解説をすると、Application.persistentDataPath は機種依存のファイルパスで実機へ正しく書き込むために必要になります。 GameObjectの追加 以下のように適当にButtonを配置します。 AddButtonのScriptを作成 今回はButtonをクリックしたタイミングでデータを追加したいと思います。 AddButton using UnityEngine; public class AddButton : MonoBehaviour { private float time; GameObject saveCsv; SampleSaveCsv sampleSaveCsv; // Start is called before the first frame update void Start() { saveCsv = GameObject.Find("SaveCsv"); sampleSaveCsv = saveCsv.GetComponent<SampleSaveCsv>(); } public void onClick() { time += Time.deltaTime; // テキストデータも適当です sampleSaveCsv.SaveData("B", " ", time.ToString()); } } AddButtonへアタッチ では、AddButtonへアタッチします。 AddButtonオブジェクトへAddButton.csをアタッチ Inspectore > Button の「On Click()」へAddButton.csのイベントを設定(以下図参照) SDカードへ書き込みをする場合は設定が必要 もしSDカードへ書き込みを行う場合、Unity側で少し設定が必要です。 Edit > Project setting > Player > Other Settings の下の方に 「Write Permisson」という項目があります。 こちらの項目を「External(SDCard)」へ変更します。 Android実機で動作確認 では、実機とPCを繋いで「Build And Run」をしてみましょう。 buildされたら、「Add Button」を何度かタップしてみます。 データの確認 データの確認ですが、保存先が端末によって異なります。 以下は一例になります。 「内部ストレージ/メモリーカード」 > 「Android」 > 「data」 このフォルダまで来るとインストールされているパッケージが沢山あると思います。 自分で作ったパッケージネームを探します。 パッケージネームはUnity側の、 Edit > Project Settings > Player > Other Settings の 「Package Name」から確認できます。 次のフォルダで「cache」と「files」があると思いますので、 「files」を選択します。 すると、「SaveData.csv」が保存されています。 これでAndroid実機へのcsv書き込みもできました。 まとめ ファイルの書き込みには StreamWriter を使う #if で端末の判定を行い実機によるpathを使い分ける Androidの保存先pathは Application.persistentDataPath を使う 以上ご拝読有難うございました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Unity】Android実機のログを確認する方法

Unityで開発をしていて、Androidの実機を動かしている時のログを確認したい時があると思います。 今回はそのログを簡単に確認する方法についてです。 環境 Windows10 Unity Hub 2.4.5 Unity 2020.3.25f1 Android Studio 2020.3.1 Android Logcatをインストール Unity2019からPackage Managerに公式のツールが加わっています。 Windows > Package Manager へ移動して、 左上のPackagesを「Unity Registry」にします。 すると「Android Logcat」という項目があるので、 それをインストールするだけです。 あとはPCと実機を繋いで「Build And Run」をするとAndroid Logcatが起動して以下のようにログが出力されます。 ログの出力を止めたい時は、「Disconnect」をクリックするだけです。 以上、ご拝読有難うございました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Unity】別プロジェクトのGameObjectを完全再利用する

完全に個人用メモです。 A_project で使用した GameObject を再利用して、 B_project でも使えるようにする方法。 GameObjectの設定等を含めてexportする Unityの 「Assets」 > 「Export Package」 で再利用したい項目にチェックを付ける。 「Export」をクリック。 任意の名前で保存。 「hoge.unitypackage」が生成される。 新規プロジェクト側でimportする Unityの 「Assets」 > 「Import Package」 > 「Custom Package」 から先程exportしたファイルを選択。 すると、新規プロジェクト側で完全な状態で再利用が可能になります。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Unity】実機のカメラ映像をUI上に表示させる(Android向け)

実機に掲載されているカメラの映像をUnityのUI上に表示させてみます。 この記事ではAndroidのみとなります。 環境 Windows10 Unity Hub 2.4.5 Unity 2020.3.25f1 Android Studio 2020.3.1 WebCamTextureクラス カメラの映像をUI上に表示させるために使うクラスは、WebCamTextureクラス です。 この WebCamTextureクラス は、Web カメラで映し出した映像を、テクスチャとして扱うクラスです。 UnityEngine/継承:Texture となっており、以下のように使用できます。 // WebCamTextureのインスタンスを生成 webCam = new WebCamTexture(); // RawImageのテクスチャにWebCamTextureのインスタンスを設定 rawImage.texture = webCam; UI側の準備 では、カメラ映像を表示させるための準備を行います。 まずは、UnityでUIの準備からです。 RawImageの追加 カメラの映像を投影するためのRawImageを追加します。 Hierarchy > 追加したい任意の場所を右クリック > UI > Raw Image pic.twitter.com/EAm8gdJH6I— たく (@5HdM6WlLVaazBV7) January 16, 2022 ディスプレイいっぱいになるように調節 今回ディスプレイいっぱいにカメラ映像を写したいので、設定をします。 RawImageの親要素をクリック > Inspector > Add Component から、 「Horizontal Layout Group」を追加します。 そして、以下のようにします。 Control Child Size: ✓Width ✓Height Use Child Scale: Width Height Child Force Expand: ✓Width ✓Height pic.twitter.com/e6QhiwjeR3— たく (@5HdM6WlLVaazBV7) January 16, 2022 Scriptの作成 続いては、Scriptを作成します。 任意の場所で右クリック > Create > C# Script 今回のファイル名は「WebCam」とします。 pic.twitter.com/dt4RiGEMFD— たく (@5HdM6WlLVaazBV7) January 16, 2022 そして、WebCam.csファイルを以下のようにします。 WebCam.cs using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class WebCam : MonoBehaviour { public RawImage rawImage; WebCamTexture webCam; void Start() { // WebCamTextureのインスタンスを生成 webCam = new WebCamTexture(); // RawImageのテクスチャにWebCamTextureのインスタンスを設定 rawImage.texture = webCam; // カメラ表示開始 webCam.Play(); } } アタッチ これで準備が整ったので、アタッチしていきます。 カメラ映像を表示させたい RawImage へ WebCam.cs をドラッグ&ドロップなどでアタッチします。 そして、GameObject rawImage; には同じ要領で RawImage をアタッチします。 pic.twitter.com/jBHKhbn4ad— たく (@5HdM6WlLVaazBV7) January 16, 2022 実機で動作確認 Androidでの環境構築とbuild方法については以下の記事をご参照下さい。 Build And Run をしてカメラの画像が表示されればOKです。 Androidの場合、カメラの向きが横向きになるケースが多いのですが、その場合は以下の記事が参考になりましたので貼っておきます。 まとめ 実機のカメラ映像をUIに表示させるには、WebCamTextureクラス を使う GameObjectのテクスチャにWebCamTextureのインスタンスを設定する WebCamTextureのインスタンス.Play() でカメラ表示が開始される
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Unity プロジェクト6 「フィッシングゲーム」 INDEX

削除予定
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Unity】端末がAndroidかiOSか判断をして個別に処理をする

完全に自分用メモです。 はじめに Unityで開発を進めていると、画像の保存時など端末によって処理を分けるケースが発生します。 今回はその方法を記述いたします。 環境 Windows10 Unity Hub 2.4.5 Unity 2020.3.25f1 Android Studio 2020.3.1 端末を判定する 今回は端末を判定する方法を2種類紹介します。 1つめの方法 using UnityEngine; using System.Collections; public class Terminal : MonoBehaviour { void OnClick() { if (Application.platform == RuntimePlatform.Android) { //端末がAndroidだった場合の処理 } else if (Application.platform == RuntimePlatform.IPhonePlayer) { //端末がiOSだった場合の処理 } else { //その他の端末での処理 } } } 上記のコードの Application.platform == で判定ができます。 右辺の RuntimePlatform.XXXX は他の端末の判定も可能です。 詳しくはUnityのドキュメントを御覧ください。 2つめの方法 続いて2つ目の方法です。 さきほどより簡単な記述です。 using UnityEngine; using System.Collections; public class Terminal : MonoBehaviour { void OnClick(){ #if UNITY_ANDROID // 端末がAndroidだった場合の処理 // Androidの処理 #endif //アンドロイドの処理範囲終わり #if UNITY_IOS // 端末がiOSだった場合の処理 // iOSの処理 #endif //iOSの処理範囲終わり #if UNITY_EDITOR // Unity上での処理 # endif } } ちなみに以下のように記述することもできます。 using UnityEngine; using System.Collections; public class Terminal : MonoBehaviour { void OnClick(){ #if UNITY_ANDROID // 端末がAndroidだった場合の処理 #elif UNITY_IOS // 端末がiPhoneだった場合の処理 #elif UNITY_EDITOR // Unity上での処理 #endif //終了 } } この方法では最後の #endif が必須です。 この #endif がないとエラーになります。 UNITY_IPHONE は非推奨 先程のコードで、 #if UNITY_IOS の代わりに #if UNITY_IPHONE でも動作はしますが、公式ドキュメントでは「非推奨」となっています。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Unity]オリジナルキャラをmixamoで用意したアニメーションで動かす

概要 Mixamoではたくさんのアニメーションが無料でダウンロード出来ます。それを使ってUnity上でオリジナルキャラを動かします。 Blenderで自作したキャラクターが自由に動いた時の感動はひとしおです キャラを用意していなくても、Mixamoで作成したアニメーションデータにはMixamoで用意されたキャラクターがセットになっているのでそれを動かす事もできます。 本文 Mixamo公式HP Mixamo公式HPにログインするためには無料のAdobeアカウントが必要です。 ログインしたらAnimationsタブを押して気に入ったアニメーションを選び、最後にDOWNLOADを押します。 そうすると、ポップアップウィンドウが表示されます。FormatにはFBX for Unity(.fbx)を選んでください。他はそのままで大丈夫です。 Unityを起動する。 用意したプロジェクトのProjectウィンドウへダウンロードしたfbxファイルをドラッグアンドドロップします Projectウィンドウに登録されたfbxファイルを選択して、Inspectorを確認します。 まず、Rigタブを選び、AnimationTypeをHumanoidに変更して最後にApplyを押します。 次にAnimationタブを選び各Root TransformのBake Into Poseにチェックを入れてBasedUponをOriginalに変更します。(Loop Timeでアニメーションを繰り返すように出来ます。お好みでチェックを入れてください) ここでも最後には忘れず、右下にあるApplyを押してください。 ここまで出来たら、fbxをSceneビューにドラッグアンドドロップして画面に登場させます。 次にProjectウィンドウ上で右クリックしてCreate > Animator Controllerを選びます。 作成されたAnimator Controllerをダブルクリックします。 濃いねずみ色の背景部分で右クリックをしてCreate State > Emptyを選ぶとNew Stateが作られるので、それを選択します。 Projectウィンドウ上のfbxファイルの右側にある矢印をクリックして中身を表示します。その中にあるAnimation ClipをInspectorのMotionにドラッグアンドドロップします。 最後に画面上に登場させたキャラクターを選択状態にしてAnimator ControllerをInspectorのAnimator内にあるControllerにドラッグアンドドロップします。 実行ボタンを押すとキャラがアニメーションします。 オリジナルキャラを動かす 自作キャラのPrefabを画面に登場させて 先ほどと同じ手順で(自作キャラが選択状態になってるのを確認してから)Animator Controllerをドラッグアンドドロップすれば 自作キャラが動き出します 補足 自作キャラにはボーンが入ってないと動きません。 Humanoid用のボーンは他の解説サイトで調べて設定してみてください。 補足2 mixamoからダウンロードしたfbxデータの内、アニメーションデータだけが欲しい(キャラクターのデータとかは要らない)場合はAnimation Clipを選択した状態でCommand + D(WindowsならCtrl + D)を押すとAnimation Clip単体が生成されるので、その後にfbxファイルを消せばアニメーションデータだけにする事もできます。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

UnityでAR開発を手軽に体験してみる

今回はUnityでAR開発を手軽に体験してみる方法を記事にいたします。 AR Foundationが公式でGitHubにあげているsampleを動かします。 AR Foundation とは ARFoundation とは、Unity が開発している、AR 開発用のフレームワークです。ARFoundationを使えば、ARCore(Android向け)、ARKit(iOS向け)など、様々なプラットフォーム上で動くARアプリを簡単に開発することができます。 動作イメージ pic.twitter.com/vUJna3xpGr— たく (@5HdM6WlLVaazBV7) January 15, 2022 環境 Windows10 Unity Hub 2.4.5 Unity 2020.3.25f1 Android Studio 2020.3.1 ARFoundation 4.2.0 Android向けの環境構築方法については以下の記事をご参照下さい。 使用Package 今回のsampleで使用されているPackageは以下の通りです。 ARSubsystems ARCore XR Plug-in ARKit XR Plug-in ARKit Face Tracking ARFoundation これらは通常 Unity側の Window > Package Manager から install するのですが、今回はダウンロードしたプロジェクト内に既にあるので不要です。 GitHubからsampleコードをダウンロード 任意の場所に解凍いたします。 Unityで開く Unity Hub のプロジェクトから「リストに追加」で先程ダウンロード解答したフォルダを追加します。 続いて、Unityのバージョンを指定します。 Unityのアップグレード プロジェクトを開こうとすると、以下のように「新しいバージョンのUnityにアップグレードしますか?」と聞かれますので、「確認」をクリックして下さい。 Unity側でbuild あとは、Unity側の 「File」 > 「Build Settings」から、 Androidの「Switch Platform」をクリックしてAndroid向けのbuildにしておきます。 そして、「Build And Run」をクリックします。 ちゃんとAndroid向けの環境構築が正しくできていれば、実機側でsampleのアプリが起動されます。 サンプルで体験できること ARFoundationの機能として顔検出や平面検出などをMenu画面から体験できます。 ただし、Android/iOSのバージョンや機種によっては選択できない(遊べない)ものもあります。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む