yu00’s blog

プログラミングに関する備忘録です

BlenderとUnityで山に囲まれたSkyboxを作る

はじめに Blenderで山に囲まれたSkyboxを作り、 Unityで表示する方法について説明します。 Blender アドオンの有効化 以下アドオンを有効にします Edit>Preferences>Add-ons Add Mesh ANT Landscape Node Wrangler Dynamic Sky 山と地面を作る Shift+A>Empty…

Unity ShaderLabで流れる雲を作る

はじめに UnityのShaderLabを使って流れる雲を作る方法を説明します。 UVスクロールを使うことで雲がアニメーションします。 ノーマルマップを使うことで影をつけます。 テクスチャを作る 雲のテクスチャ 雲のテクスチャを作成します。今回はGIMPで作成しま…

VRChatワールド開発テスト環境構築の例

VRChatの開発ツール導入ではなく、UdonSharpで開発・テストする上での ノウハウをまとめた記事になります。 独学なのでこれが正しい・最適とは限らないことに注意です。 VRChatの説明ですが、ほかのプラットフォームでも使えるはずです。 方針 Unityはクラッ…

Blenderで板ポリの木を作りUnityで表示する

はじめに BlenderやUnityでは簡単に木を作ることができますが、 重いという問題点があります。そこで、木を板ポリにすることで 軽くする方法を説明します。 板ポリを十字に配置することで回り込みにもある程度対応します。 手順 Blenderで木を作る Edit > Pr…

UnityのRigidbodyでCharacterController風動作を作る

はじめに UnityのCharacterControllerは便利ですが、 リアルな挙動ができるなどRigidbodyを使う方が自由度が高く 利点がある場合もあります。 そこでRigidbodyを使いCharacterControllerの機能をいくつか実装することで 両方の利点を生かす方法を考えます 方…

UnityでRigidbodyを使いホーミング弾を作る

はじめに Unityで3Dホーミング弾を作ります。 Rigidbodyを使いリアルな挙動を目指します。 方針 Rigidbody.AddForce、ForceMode.Forceを使う ターゲットの方向に力を与える PIDを使い速度が一定になるように制御を行う 力は最大値以上にならないようにする …

Unityで高度計を作る

はじめに Unityで飛行機のコックピット風の高度計を作る方法を説明します 考え方 高度20mをステップ0、高度25mをステップ1のように 高度をステップで表します。 求めるのはキャンバス0地点から現在のステップまでのステップ transStepです。 presentStep : …

VRChatでレティクルを作る

はじめに 通常のゲームでレティクルを表示する時は 2Dスクリーン上に投影する方法がありますが、 VRでは360°画面のためこの方法が使えません。 この記事ではVRChat UdonSharpを使い レティクルを表示する方法を説明します。 考え方 プレイヤーの頭(Head)の周…

UnityEditor拡張でパスからC#スクリプトをAddComponentする

コード 以下はCubeゲームオブジェクトにAddComponentScriptPathScriptスクリプトを AddComponentする例です。 using System.Collections; using System.Collections.Generic; using UnityEditor; using UnityEngine; public class AddComponentScriptPathEdi…

UdonSharpのボタンクリックイベントをUnityEditor拡張で登録する

コード 以下はゲームオブジェクトCanvasのコンポーネントEditorButtonScript の関数OnClickを、ゲームオブジェクトButtonのボタンクリックイベントに 登録するコードです。 #if UNITY_EDITOR using UnityEngine; using UnityEditor; using UnityEditor.Event…

UdonSharpのイベント同期で複数の引数を渡す

はじめに VRChat UdonSharpの同期手法であるSendCustomNetworkEvent は関数に引数を渡すことができません。 そこで、変数同期を使い疑似的に、複数引数を持つ関数を 同期する手法について説明します。 コード 以下は関数SendMyEvent1, SendMyEvent2を同期す…

Blender Python API Tips

検証 Blender Version : 3.2.1 コマンドラインからスクリプトを実行する sample.blendを起動し、sample.pyを実行する例です "C:\Program Files\Blender Foundation\Blender 3.2\blender.exe" sample.blend --python sample.py import bpy def _override_cont…

MixamoアニメーションをBlenderで調整しUnityで読み込む

はじめに Mixamoは大量の3Dモデルのアニメーションが無料で利用できるサイトです。 またMixamo公式からControl Rig(IK)を設定するBlenderアドオンが公開されており、 簡単にアニメーションを作成できます。 今回はMixamoアニメーションを自作のモデルに適用…

UnityボーンポーズをBlenderで読み込む(Unity,Blender座標変換まとめ)

はじめに Unityでつけたボーンポーズを出力して、 Blenderのボーンポーズに適用するスクリプトを作成しました。 Blenderのボーンウェイトの調整の時、 Unityの物理演算で設定されたポーズにしたかったのが目的です。 手順 以下方針で行います。 Unityのボー…

座標変換まとめ

はじめに CGや画像処理で必要になる座標変換について説明します。 座標変換は同次変換行列という形式で表すことで、 すべて行列の掛け算で行うことができます。 表記 座標Aから見た点pの座標がである時、 次のように表記します。 移動 座標Aから見た座標Bへ…

MarkdownでTex数式をSVGに変換する(Pandoc+MathJax+Python Selenium)

はじめに Markdown中のTex数式は、Webサイトによってサポートされていなかったり、 方言があったりします。 また、JavaScriptのTex数式変換ツールであるMathJaxがありますが、 レンダリングが遅いという問題があります。 そこで、Tex数式をMathJaxを使い事前…

Pandoc+Python環境構築まとめ

はじめに PandocはMarkdownからHTML変換など、マークアップ言語を 別の形式に変換するツールです。 また、Pandoc filterという仕組みを使用することで、 変換書式を自作することができます。 ここでは、PandocとPython Pandoc filterを 使用するための環境構…

スタイルシート詳細

PyQt5入門 PythonでGUI作成 - yu00’s blog リファレンス:Qt 5.5 > Qt Widgets > The Style Sheet Syntax - スタイルシート詳細 リファレンス2:Qt 5.5 > Qt Widgets > Qt Style Sheets Reference - プロパティ一覧,サブコントロール一覧など スタイルシー…

スタイルシートによるスタイル設定

PyQt5入門 PythonでGUI作成 - yu00’s blog スタイルシート PyQt5でフォントや色を設定するにはスタイルシート を使うと簡単です.スタイルシートはHTML CSSのような形式でスタイルを 設定する機能です.スタイルシートを使うことで, アプリケーション全体に…

QGridLayoutクラス

PyQt5入門 PythonでGUI作成 - yu00’s blog リファレンス:Qt 5.5 > Qt Widgets > C++ Classes > QGridLayout QGridLayoutクラスはマス目に並べるクラスです. マス目に並べる addWidget(widget, row, column) #! /usr/bin/python3 # -*- coding: utf-8 -*- i…

QHBoxLayout・QVBoxLayoutクラス

PyQt5入門 PythonでGUI作成 - yu00’s blog リファレンス:Qt 5.5 > Qt Widgets > C++ Classes > QBoxLayout QHBoxLayout・QVBoxLayoutはウィジェットを 横・縦に並べるクラスです.ここではQHBoxLayoutを例に説明します. 横に並べる addWidget(widget) サン…

QLabelクラス

PyQt5入門 PythonでGUI作成 - yu00’s blog リファレンス:Qt 5.5 > Qt Widgets > C++ Classes > QLabel QLabelクラスは文字または画像を表示するクラスです. QLabelの作成 サンプルコード #! /usr/bin/python3 # -*- coding: utf-8 -*- import sys from PyQ…

QPushButtonクラス

PyQt5入門 PythonでGUI作成 - yu00’s blog リファレンス:Qt 5.5 > Qt Widgets > C++ Classes > QPushButton QPushButtonは普通のボタンです. ボタンの作成 PyQt5.QtWidgets.QPushButton(text, parent=0) 文字がtextのボタンを作成します. サンプルコード …

シグナルとスロット詳細

PyQt5入門 PythonでGUI作成 - yu00’s blog ここではシグナルとスロットについて, 詳しい使い方を説明します. シグナルとスロットを接続する シグナルとスロットを接続(設定)するにはconnect()を使います. connect(slot) シグナルにスロットslotを接続しま…

ウィジェットの自動伸縮の設定

PyQt5入門 PythonでGUI作成 - yu00’s blog レイアウトでウィジェットを配置するとき, ウィジェットは自動的に伸縮します. ここでは自動伸縮の設定について説明します. 自動伸縮するかどうか 自動伸縮をするしないを設定するには, QWidget.setSizePolicy(…

QWidgetクラス

PyQt5入門 PythonでGUI作成 - yu00’s blog リファレンス:Qt 5.5 > Qt Widgets > C++ Classes > QWidget PyQt5ではウェジェットでウィンドウを作成し, その中にボタンやラベルなどの部品を配置していきます. ここではウェジェットの基本的な使い方を説明し…

ドキュメントの読み方

PyQt5入門 PythonでGUI作成 - yu00’s blogPyQt5の多くのクラスや関数はQtをラップしただけなので, PyQt5を使ったプログラムを書く場合Qt本家のドキュメントを 参照することになると思います. ここではQt本家のドキュメントの読み方を説明します. ただ,リ…

イベント処理

PyQt5入門 PythonでGUI作成 - yu00’s blog イベント処理の方法 PyQt5でキーボードやマウスなどのイベントを扱う処理の説明です. ウィジェットでキーボードやマウスの入力などのイベント起こると,それぞれに対応する関数が呼ばれます. 例えばキーボード入…

シグナルとスロット

PyQt5入門 PythonでGUI作成 - yu00’s blog シグナルとスロットとは シグナルとスロットの例として, ボタンを押したときに何か処理をするプログラムを考えます. そのときの流れは次のようになります. ボタンを押す ボタンが押されたというイベントが発行さ…

レイアウトを使った配置

PyQt5入門 PythonでGUI作成 - yu00’s blog レイアウトとは レイアウトはウィジェットを簡単に配置する仕組みです. ウィジェットを横に並べたり,マス目に並べたりできます. ウィジェットの位置は自動的に計算されるので, 自分でピクセルの位置を設定する…