トーフメモ

主にゲーム制作

Unity

マウスが重なっているUIオブジェクトを取得する【Unity】

やること EventSystemを参照してマウスが指示している位置に重なっているUIオブジェクトを取得します! 取得するオブジェクトは、EventSystemのInspecterの下部にあるWindowのpointerEnterでも確認できます。 手順 まずUnityEngine.EventSystemsをusingしま…

Image(Canvas)の座標変更でハマった話【Unity】

小一時間悩んだのでメモとして残します。 やりたいこと スクリプトからCanvas下に作ったImageの座標を任意の位置に変更する。 失敗例 以下のパターンだとずれました。 transform.position= new Vector2((100,100)); transform.localPosition= new Vector2((1…

UnityでYoutubeの動画を再生する

はじめに 注意点 動作環境 制作フロー VideoLibraryをUnityに組み込む VideoLibraryを使って動画データの取得 各種パッケージ 動画情報取得からの動画取得 動画の再生 動画データの後始末 ゲームオブジェクトの設定 実行すると 終わりに はじめに Youtube、…

ファイル読み込みを自分で呼び出して認識させる【Unity】

起こった問題 Unity実行中に、System.IO.Fileクラスで作成したファイル、フォルダや、その他方法で作成したデータをAssetフォルダ上に置いて使用するとします。ですが、Unityエディタ上ではすぐ認識されず、Unity側の認識を待たなければResources.Loadなどで…

GOTO文は使いよう【UnityC#】

そもそもGOTO文とは ラベルを記述した場所に処理を飛ばすことができる記法です。 例 private IEnumerator Start () { A: Debug.Log("ループするよ"); yield return new WaitForEndOfFrame(); goto A; } 上みたいなのだとwhile(true)と同じような動作をします…

エディタ拡張で偽ブラクラを作る【Unity】

無限にウィンドウが開いたり、ホラー画像がでかでかと出たり、明らかにいたずらで作ったwebページ。 うっかりリンクを踏んだら最後。 このwebページをブラクラ(ブラウザクラッシャー)といい、1990年代から、2000年代あたりに多くありました。(今もどこかにあ…

【Unity】エディタ拡張で音楽をながす方法 

EditorWindowを作成してその中で音を出したい! コンポーネントを作るんじゃなく、直接呼び出したい! 調べました! AudioUtility 既につよいスクリプトを作っている人がいたので、これを利用して実装します。 このAudioUtility内のメソッドを使ってAulidcli…

3秒でわかる「リフレクション」【UnityC#】

リフレクションとは メタデータを見てみる まずはメタデータを取得する対象のクラスを定義します。 実際にメタデータを取得するスクリプトを書きます! ここでのポイント リフレクションをするために含めます。 「TestClass」クラスを取得します。 これらの…

3秒でわかる「フラグメントシェーダー」【Unity】

フラグメントシェーダーとは 画面に投影される予定のピクセルの色データを加工するシェーダーです! 頂点シェーダーで加工したデータが別の工程を経た後、画面に投影される分のピクセルデータに変換されます。 そのピクセルデータを受け取り、再計算すること…

3秒でわかる「頂点シェーダー」【Unity】

頂点シェーダーについて

3秒でわかる!「カスタムコルーチン」【Unity】

カスタムコルーチンとは 自分で実装するコルーチンです! 作り方 分指定で待ってくれるコルーチンを作ります。 (1)クラスを定義 public class WaitForMinutes{ } (2)CustomYieldInstructionを継承 using UnityEngine; public class WaitForMinutes : CustomY…

シーンファイルの正体【Unity】

Unityを使っているとき、ほぼ確実に使う「シーンファイル」。 拡張子は.unityで、シーンを保存すると作成されます。けどこれ何を保存してるんだろう・・・ シーンの情報が入っているんだろうけど・・・ ・・・気になったので調べました! 今回使用したUnity…

C#からPythonを実行する方法【Unity】

UnityとPythonをつなげてやりたいことがあります。 Pythonで機械学習して、Unityで作ったゲームの中で使う、そんな感じのことがしたいのです。 なのでまずはPythonをどうやって実行するか、というところが課題でした。 調べてみると案外あっさり見つかったの…

3秒でわかる!「デリゲート」【UnityC#】

デリゲートとは メソッドへの参照 です! クラスみたいに参照して使えます。 書き方 自分でデリゲートを定義するやり方と、.NET Frameworkクラスライブラリに定義されてるAction、Funcを使うやりかたがあります。 自分で定義 delegateという修飾子を使うこと…

【Unity】エディタ拡張でゲームを作る

エディタ上で動くゲームをつくりました。かんたんなシューティングです。 ゲーム制作に疲れたときに遊べるのでおすすめです(?) youtu.be 制作のポイント Event.current OnGUIがどのイベントで呼ばれているか取得できる&キー入力などを検知できる EditorGUI.D…

【Unity】ArgumentException: Getting control 1's position in a group with only 1 controls when doing repaint が出たときの対処法

Unityでエディタ拡張を作っていた時の話。 以下のようなエラーが出ました。ArgumentException: Getting control 1's position in a group with only 1 controls when doing repaint Abortingこのエラーは「OnGUI()の仕組み」が大きくかかわっていそうです。 …

【UnityEditor】EditorGUILayout.LabelFieldの文字をスクリーン中心に置きたい

少し苦労したのでメモ書き。 GUILayout.Spaceを使って位置を中心にずらします。 さらにGUIStyleを設定してalignmentを中心にずらします。 void OnGUI(){ GUILayout.Space(position.size.y / 2); GUIStyle myStyle = new GUIStyle(); myStyle.alignment = Tex…

【UnityEditor】オリジナルのエディタ画面(EditorWindow)の作りかた

HierarcyビューやInspectorビューなどのことを、EditorWindowと言います。 EditorWindowは自分で作ることができ、その中にいろんな機能を作ることができます。 つくりかた EditorWIndowクラスを継承したクラスを作成します。 EditorWIndowクラスを使うために…

【UnityC#】例外クラスを自作する

C#には例外処理があらかじめ色々定義されています。なんとかExceptionとか、ほにゃららExceptionとか。 特定のシチュエーションでの例外を自分で定義したい!となった時のために例外クラスの自作について調べました。 以下のコードではボールオブジェクトの…

【Unity】画面を超高速で切り替えて二重スクロールを作る

はじめに みなさんは、「地球解放軍ジアース」というゲームをご存知でしょうか? ゲームボーイの残像を利用して二重スクロールを作ったゲームとして有名です。 でも、あくまでゲームボーイの特性を利用したものなので、「地球解放軍ジアース」はスーパーゲー…

【Unity】マテリアルの色をスクリプトから変更する

ちょっとしたメモ CubeやSphereのマテリアルの色はスクリプトから変更できます。 Block.cs using UnityEngine; public class Block : MonoBehaviour { private Material material; private void Init () { material = GetComponent<Renderer>().material; } private vo</renderer>…

【UnityC#】Invokeを使い倒してみた

UnityにInvokeというおもしろそうな関数がありました。 .netのControl.Invokeとは別物です。 Invokeとは 関数の実行タイミングを遅らせることができます。 Invoke(関数の名前,実行するタイミング); 実装してみた youtu.be世紀末にいそうな人が一定の間隔で地…

【UnityTestRunner】テストケースをScriptableObjectで定義してみた

前回 tofgame.hatenablog.com 今回やること テストケースをScriptableObjectで作ります。 まずScriptableObjectを作成します。 TestCase_Move.cs using UnityEngine; [CreateAssetMenu(menuName ="TestCase/Move")] public class TestCase_Move : Scriptable…

【Unity】ScriptableObjectを使ってみた

ScriptableObjectの作り方について備忘録。まずScriptableObjectを継承したクラスを作ります。 [CreateAssetMenu]を付与してエディタ上でScriptableObjectを作成できるようにします。 BallData.cs using UnityEngine; [CreateAssetMenu(menuName ="Scriptabl…

【Unity】テスト(Unity Test Runner)を使ってみる

前回 tofgame.hatenablog.com今回は実際にどういう風に運用するのがいいのかを考えてみます。変数として以下のものを使います。 private Vector2Int pos = new Vector2Int(0,0); private float moveY = 1; private int fieldSize = 10; テストを行うために初…

【Unity】テスト(Unity Test Runner)を試す

使用したバージョン 2018.3.7f1 概要 Unityでテストコードを作ってみます docs.unity3d.com 手順 1 テストフォルダ、ファイルを作るこのとき、NUnit等を使用するためのアセンブリファイルが作成されます。2 テストスクリプトを作るデフォルトのスクリプトが…

【UnityC#】コルーチン内で入力待ちする

コルーチンの中で入力待ちをしたいと思ったので調べました。 (1)WaitUntil 条件が一致するときに待機を抜ける便利なやつです。 docs.unity3d.com 例えば、下記のように扱います。 IEnumerator WaitUntilTest () { yield return new WaitUntil(() => { return…

【Unity】データセーブロードをするためにJsonUtilityを使ってみた

Unityでのセーブロードの話 今まではcsvファイルにデータを読み書きしていました。 でもcsvだとなんか重い・・・? というわけで、Jsonファイルに読み書きをしようと思い試してみました。 DataManager.cs using System.Collections.Generic; using UnityEngi…

【Unity】【Android】「アプリはインストールされていません。」で苦戦した話

UnityでAndroid向けにビルドしたら・・・ keystoreファイルを作成しビルド、作成したapkファイルを自分のandroid端末にインストールしたところ、 「アプリはインストールされていません。」 と表示されアプリのインストールに失敗しました。 解決策 僕の場合…