- 投稿日:2020-04-05T17:01:57+09:00
Unityのスクリプトのあれこれ
概要
Unityのスクリプトで使う関数を毎回調べてしまうため、よく使うものをまとめておく。
(随時追加予定)C#関数
配列内をランダムに取得する
string[] words = new string[3] {"a","b","c"}; Debug.Log(words[Random.Range(0, words.Length)]); // b(出力はランダムに変化)ゲームオブジェクトの設定
Prefabをゲームオブジェクトに設定する
あらかじめ、Assetsフォルダ内に「Resources」フォルダを作成し、その中にPrefabをおく。
(以下の例ではResourcesフォルダ内にPrefabsフォルダを作り、その中にobj1というprefabを置いている。)GameObject obj = new GameObject(); obj = (GameObject)Resources.Load("Prefabs/obj1")
- 投稿日:2020-04-05T17:01:57+09:00
Unityのスクリプト関数まとめ
概要
Unityのスクリプトでよく使う関数をまとめておく。
(随時追加予定)C#関数
配列内をランダムに取得する
string[] words = new string[3] {"a","b","c"}; Debug.Log(words[Random.Range(0, words.Length)]); // b(出力はランダムに変化)ゲームオブジェクトの設定
オブジェクトを生成する
// 引数(ゲームオブジェクト, 位置, 回転) Instantiate(gameObj, Vector3.zero, Quaternion.identity);親オブジェクトを設定(子オブジェクトとして生成する)
[SerializeField] private GameObject parentObj; // 親オブジェクト // 子オブジェクトを生成して親オブジェクトの設定する GameObject childObj = Instantiate(obj, Vector3.zero, Quaternion.identity); childObj.transform.parent = parentObj.transform;Prefabをゲームオブジェクトに設定する
あらかじめ、Assetsフォルダ内に「Resources」フォルダを作成し、その中にPrefabをおく。
(以下の例ではResourcesフォルダ内にPrefabsフォルダを作り、その中にobj1というprefabを置いている。)GameObject obj = new GameObject(); obj = (GameObject)Resources.Load("Prefabs/obj1")2D画像の設定(Sprite)
以下の例ではinspectorウインドウでSprite画像を設定し、ゲームオブジェクトに設定
[SerializeField] private Sprite sprite_image; gameObj.GetComponent<SpriteRenderer>().sprite = sprite_image;
- 投稿日:2020-04-05T17:01:57+09:00
Unityのスクリプトまとめ
概要
Unityのスクリプトでよく使う関数をまとめておく。
(随時追加予定)C#関数
✨連想配列
Dictionary(Key, Value)の形で値を保持する。以下は宣言と初期化。
// 初期化① Dictionary<string, int> fruits = new Dictionary<string, int>() { ["apple"] = 100, ["mikan"] = 120 }; // 初期化② Dictionary<string, int> Player = new Dictionary<string, int>() { { "player", 100 }, { "enemy", 200 } };✨切り上げ・切り捨て・四捨五入
切り上げ(正の無限大に向かう)
float num1 = 1.15f; float num2 = -1.25f; Debug.Log(Mathf.Ceil(num1)); // 2 Debug.Log(Mathf.Ceil(num2)); // -1切り捨て
using System; // Math使用時は必要 float num1 = 1.15f; float num2 = -1.25f; // ①負の無限大に向かう Debug.Log(Mathf.Floor(num1)); // 1 Debug.Log(Mathf.Floor(num2)); // -2 // ②0に向かう Debug.Log(Math.Truncate(num1)); // 1 Debug.Log(Math.Truncate(num2)); // -1四捨五入
using System; // Math使用時は必要 float num1 = 1.5f; float num2 = 2.5f; float num3 = -1.5f; float num4 = -2.5f; float num5 = 1.25f; // ①偶数への丸め込み(切り上げの場合は一番近い偶数になる) Debug.Log(Mathf.Round(num1)); // 2 Debug.Log(Mathf.Round(num2)); // 2 Debug.Log(Mathf.Round(num3)); // -2 Debug.Log(Mathf.Round(num4)); // -2 Debug.Log(Mathf.Round(num5)); // 1 // ②通常の四捨五入 Debug.Log(Math.Round(num1, MidpointRounding.AwayFromZero)); // 2 Debug.Log(Math.Round(num2, MidpointRounding.AwayFromZero)); // 3 Debug.Log(Math.Round(num3, MidpointRounding.AwayFromZero)); // -2 Debug.Log(Math.Round(num4, MidpointRounding.AwayFromZero)); // -3 Debug.Log(Math.Round(num5, MidpointRounding.AwayFromZero)); // 1 // ③桁数指定 (第2引数に得たい小数の桁数を指定) Debug.Log(Math.Round(num5, 1, MidpointRounding.AwayFromZero)); // 1.3✨配列内をランダムに取得する
string[] words = new string[3] {"a","b","c"}; Debug.Log(words[Random.Range(0, words.Length)]); // b(出力はランダムに変化)✨文字列をint型へ変換する
using System; int num = Int32.Parse("123");ゲームオブジェクトの設定
✨オブジェクトを生成する
// 引数(ゲームオブジェクト, 位置, 回転) Instantiate(gameObj, Vector3.zero, Quaternion.identity);✨親オブジェクトを設定(子オブジェクトとして生成する)
以下の例ではinspectorウインドウで親オブジェクトをあらかじめ設定
[SerializeField] private GameObject parentObj; // 親オブジェクト // 子オブジェクトを生成して親オブジェクトの設定する GameObject childObj = Instantiate(obj, Vector3.zero, Quaternion.identity); childObj.transform.parent = parentObj.transform;✨オブジェクト名に[Clone]がつかないようにする
ゲームオブジェクト生成時、オブジェクト名に[Clone]がつく。これをつかないようにする。
GameObject obj = Instantiate(gameObj, Vector3.zero, Quaternion.identity); obj.name = gameObj.name;✨プロパティをInspector上からオブジェクトを設定できるようにする
[SerializeField] private GameObject player; // または public Text text;[SerializeField]とした場合、Unityエディタで[CS0649警告]が表示される。
これが邪魔な場合はデフォルトを設定するのが一案としてある。[SerializeField] private GameObject player = default;✨Prefabをゲームオブジェクトに設定する
あらかじめ、Assetsフォルダ内に「Resources」フォルダを作成し、その中にPrefabをおく。
(以下の例ではResourcesフォルダ内にPrefabsフォルダを作り、その中にobj1というprefabを置いている。)GameObject obj = new GameObject(); obj = (GameObject)Resources.Load("Prefabs/obj1")✨2D画像の設定(Sprite)
以下の例ではinspectorウインドウでSprite画像を設定し、ゲームオブジェクトに設定
[SerializeField] private Sprite sprite_image; gameObj.GetComponent<SpriteRenderer>().sprite = sprite_image;UIの設定
✨クリックイベントに引数を設定する
// 単純に引数を記述する、あとはInspectorウインドウで設定する public void onClickButton(GameObject obj) { // 処理を記述 }
- 投稿日:2020-04-05T16:56:13+09:00
【Unity初心者】チュートリアルを終えた人が知るべきこと3つ
対象の方
なんらかのUnityチュートリアルを終えて制作の雰囲気がわかっている方
知るべきこと3つ
他の記事を見る際に以下の点に注意して読むと内容が分かりやすくなるはずです。
次の3つが私がUnityを学ぶうえで、徐々につかんでいった内容になります。1.変数宣言の型にはUnity独自のものがある
変数宣言の型といったらint、float、stringを最初に学習すると思います。
Unityでは、それらも使用しますが、
Unity上で登場する次のものも宣言する必要があります。
型の種類はまだまだあります。
変数宣言の型にはUnity独自のものがたくさんあることを覚えておくだけでOKです。2.メソッドには2種類ある
・C#やUnity側であらかじめ用意されているメソッド
・自分で処理内容を定義するメソッド私は最初、全部のメソッドは用意されたものがあると思っていました。
メソッドは作れる!!あらかじめ用意されているメソッドは今後紹介していきます。
3.初期スクリプトの中身
初期スクリプト全体 & それぞれざっくりの説明
①名前空間
必要な時に随時追加する必要があります。
詳しくは「れー@DKRevel」さんの記事を参考にして下さい。
https://dkrevel.com/makegame-beginner/namespace②クラス宣言
スクリプトの名前が「TEST_script」ってことがわかればOK③スタート関数
「変数の初期値」、「初回に一度きりの処理」を書きます。④アップデート関数
連続的な処理を書きます。
1フレームの時間間隔はPCごとに変わるようです。
(一定の秒数などで処理したい時は、Time.deltatimeでフレーム間の時間を取得する。 詳細割愛)以上、私が最初に教えてほしかった内容でしたー。
- 投稿日:2020-04-05T14:41:07+09:00
【爆速メモ】windowメニューからpackage managerが消えた時
windowメニューからpackage managerが消えた時、
1. 新規でプロジェクトを作成する
2. 新しく作成されたプロジェクト内の[Packages]フォルダのmanifest.jsonファイル内のテキストをコピーする
3. package managerが消えたプロジェクトのmanifest.jsonファイルにペーストするもろもろバックアップは念のためとっておきましょう。
- 投稿日:2020-04-05T11:03:10+09:00
Qiita書き方の初歩 タイトル、コードの書き方 画像の貼り方
記事作成における初歩的な内容をメモ
・タイトル書き方
・コードの書き方
・画像の貼り方
・細かい設定は公式を参照タイトルの書き方
タイトルは先頭に#を付ける
例)#タイトルの書き方コードの書き方
1.コードの範囲指定
コードの始まり:「Shift+@」で入力できる記号(記号の名前わかりません汗)を3回入力
コードの終わり:同じく「Shift+@」で入力できる記号を3回入力
↓こんな感じ
2.コード入力
この記号の中にコードを入力すると
↓このように表示されますprivate float red;3.言語の指定
言語がC#の場合、「Csharp」を次のように記述すると
↓色がついて表示されますprivate float red;4.スクリプト名称の入力
名前を入れたい場合「:」コロンを入力したあと名称を入力
:testを付け足してみると
↓左上に名称が表示されます。testprivate float red;画像の貼り方
貼り方は2種類
①貼りたい画像を記事内にドラック&ドロップ細かい設定は公式を参照
- 投稿日:2020-04-05T09:54:41+09:00
GitLab で Unity の Android アプリを自動ビルドするようにしてみた
GitLab で Unity の Android アプリを自動ビルドするようにしてみた
GitLab で Unity の Androidアプリを自動ビルドするようにしてみました。
最初は、Windows10 で試行錯誤していましたが、GitLab Runner の実行ユーザーがシステムアカウントになるためか、エラーが解消されませんでした。
Mac で試したところ問題なく動いたので、Mac を使うほうがよさそうです。環境
- macOS Catalina 10.15.4
- GitLab CE 12.8.6(Windows10上の仮想サーバーで動かしています)
- GitLab Runner 12.9.0(Mac上で動かしています)
- Unity 2018.4.20f1
フォルダ構成
ファイル/フォルダ 内容 TestProject_Unity/ Unityプロジェクトフォルダ TestProject_Unity/.gitignore Git無視リストファイル TestAutoTest/TestProject_Unity/Assets/Editor/AppBuild.cs ビルド実行メソッドC#ファイル .gitlab-ci.yml GitLab CI 設定ファイル build.sh ビルド用シェルスクリプトファイル README.md 説明ファイル 注意点
Android SDK をインストールしたフォルダに toolsフォルダが入っていないことがあるようです。
toolsフォルダが見当たらないときは、Android Studio から SDKManager を起動して、Android SDK Platform-Tools をインストールしてみてください。
ファイルの内容
TestProject_Unity/.gitignore
/[Ll]ibrary/ /[Tt]emp/ /[Oo]bj/ /[Bb]uild/ /[Bb]uilds/ /Assets/AssetStoreTools* # Autogenerated VS/MD solution and project files ExportedObj/ *.csproj *.unityproj *.sln *.suo *.tmp *.user *.userprefs *.pidb *.booproj *.svd # Unity3D generated meta files *.pidb.meta # Unity3D Generated File On Crash Reports sysinfo.txt # Builds *.apk *.unitypackage # Visual Studio .vs Release/ Debug/.gitlab-ci.yml
stages: - build job_build01: stage: build script: - echo "Start build" - chmod a+x ./build.sh - ./build.sh Android 1.2.3.4 - echo "Finish build" tags: - mac artifacts: paths: - build_*.log - TestProject_Unity/Build/ expire_in: 1 weekTestAutoTest/TestProject_Unity/Assets/Editor/AppBuild.cs
using UnityEditor; using UnityEngine; using UnityEditor.Build.Reporting; using System; using System.Collections.Generic; public class AppBuild : MonoBehaviour { static string[] GetSceneList() { List<string> sceneList = new List<string>(); EditorBuildSettingsScene[] scenes = EditorBuildSettings.scenes; foreach (EditorBuildSettingsScene scene in scenes) { if (scene.enabled) { sceneList.Add(scene.path); } } return sceneList.ToArray(); } static string GetArgument(string name) { string[] arguments = Environment.GetCommandLineArgs(); for (int i = 0; i < arguments.Length; i++) { if (arguments[i].Contains(name)) { return arguments[i + 1]; } } return null; } public static void Build() { string locationPathName = ""; BuildTarget target = BuildTarget.NoTarget; string bundleVersion = GetArgument("/version");; string platformName = GetArgument("/platform"); switch (platformName.ToLower()) { case "android": { locationPathName = "Build/" + platformName + "_" + bundleVersion + ".apk"; } break; default: { locationPathName = "Build/" + platformName + "_" + bundleVersion; } break; } target = (BuildTarget)Enum.Parse(typeof(BuildTarget), platformName); BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions(); buildPlayerOptions.scenes = GetSceneList(); buildPlayerOptions.locationPathName = locationPathName; buildPlayerOptions.target = target; buildPlayerOptions.options = BuildOptions.Development; PlayerSettings.bundleVersion = bundleVersion; BuildReport report = BuildPipeline.BuildPlayer(buildPlayerOptions); BuildSummary summary = report.summary; if (summary.result == BuildResult.Succeeded) { Debug.Log("Build succeeded: " + summary.totalSize + " bytes"); } if (summary.result == BuildResult.Failed) { Debug.Log("Build failed"); } } }build.sh
#!/bin/bash SHELL_PATH=`pwd` PLATFORM=$1 VERSION=$2 UNITY=/Applications/Unity/Hub/Editor/2018.4.20f1/Unity.app/Contents/MacOS/Unity LOGFILE=build_${PLATFORM}.log PROJECT_PATH=TestProject_Unity EXECUTE_METHOD=AppBuild.Build ${UNITY} -batchmode -quit -logFile ${LOGFILE} -projectPath "${SHELL_PATH}/${PROJECT_PATH}" -executeMethod ${EXECUTE_METHOD} /platform ${PLATFORM} /version ${VERSION}まとめ
Unity のビルドはけっこう時間がかかりますね。
開発に専念できるように、自動ビルドする環境を用意してはいかがでしょうか?
- 投稿日:2020-04-05T05:27:56+09:00
オブジェクトを複製しよう(Prehub)
前置き
C#なら一度書けば覚えるのに、Unity関係の機能は何度やっても覚えられない……。(-_-)zzz
ゲームのステージ作るのにPrehub使いたいのになあ。( ;∀;)
このブログは何のためにあるのか、それは覚えるのが面倒なもののメモのためだー!(定期)ここから本編
3分Prehubクッキング
1分目Prehubにしたいオブジェクトを作りましょう。
2分目PrehubにしたいオブジェクトをAsset内にドラック&ドロップしましょう。
3分目Prehubにしたいオブジェクトが青くなったのを確認して、お茶を飲みましょう。
大量生産!大量消費!
prehub.csusing UnityEngine; //最初にステージを生成する public class stagecreate : MonoBehaviour { //スクリプトにPrehubをアタッチする public GameObject fields; void Start() { //Prehubを作成 GameObject field = Instantiate(fields) as GameObject; //ここで位置情報を入力したり、名前を変えたり、後はお好みで。 } }Instantiate関数ってのを使います。Prehubを生成する関数という認識で大丈夫!('ω')
destroy.csusing System.Collections; using System.Collections.Generic; using UnityEngine; public class Control : MonoBehaviour { void Update() { //一定範囲内にいないとこのオブジェクトを破壊する if(this.transform.position.x > 50) { Destroy(this.gameObject); } } //何かに当たったら反応 void OnTriggerStay(Collider other) { //当たったものが"weapon"だったらこのオブジェクトを破壊 if (other.gameObject.name == "weapon") { Destroy(this.gameObject); } } }参考までに作ったPrehubを破壊するオブジェクト。(Prehubである必要は特にない)
Prehubに直接このスクリプトをアタッチすれば動いてくれる。('ω')ノ
たくさんPrehubを破壊する場合はプールという機能を使えばいいらしいけど、勉強不足なので、勉強後にそれについてもメモ書いとこうかなあ(計画倒れになるやつ)Instantiate関数についてはこれが詳しく書いてくれてます。(*^^)v
オブジェクト生成の仕方 Instantiate
https://qiita.com/Teach/items/c28b4fe5ca8dc4c83e26#prefab%E3%81%AEtransform%E3%81%AE%E3%81%BE%E3%81%BE%E3%81%A7%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E5%A0%B4%E5%90%88
- 投稿日:2020-04-05T01:24:32+09:00