Skip to content

Instantly share code, notes, and snippets.

using System;
using UnityEngine;
using System.Collections.Generic;
using System.Diagnostics;
using Debug = UnityEngine.Debug;
namespace P8.Container {
@green224
green224 / ExportBakedFBX.py
Created June 7, 2019 18:27
Blenderでアニメーション付きモデルをちゃんとFBX出力するアドオン
"""
アニメーションを全BakeしてFBX出力をするアドオン
そのままのFBX出力ではスケーリングしたボーンの子ボーンを
Constraintsで回転させた場合に正常なモーションを出力できない
BakeしようにもデフォルトのBake処理は1アニメーションずつしかBakeできず
Bake時にConstraintsを削除する必要があるため手作業で全Bakeするのはとても大変
このアドオンではそれらのBake処理から出力までを一括して行う
使い方
@green224
green224 / FSM.cs
Last active February 10, 2020 17:14
using System;
namespace P8.StateMachine {
public static class FSM< ImplMachine, ImplState >
where ImplMachine : FSM< ImplMachine, ImplState >.Machine
where ImplState : FSM< ImplMachine, ImplState >.State
{
public abstract class Machine {

【C#】プロパティの多いクラスのデバッグ表示でStackOverFlow

自動生成したクラスなど、プロパティが非常に多いクラスを、Watch式などでデバッグ中に表示した際に、StackOverflowが起きる事がある。
例えばこういうコード

// ShaderのSwizzle operator相当の事をしたい
public Int4 xxxx { get=>new Int4(x,x,x,x); }
public Int4 xxxy { get=>new Int4(x,x,x,y); }
public Int4 xxxz { get=>new Int4(x,x,x,z); }
public Int4 xxxw { get=>new Int4(x,x,x,w); }
public Int4 xxyx { get=&gt;new Int4(x,x,y,x); }

【C#】Enumerableのデバッグ表示でEnumerableが解放されない問題

IEnumerableを継承したクラスを、Watch式などでデバッグ中に表示した際に、GetEnumeratorが自動で呼ばれてしまう。
例えばこういうコード

// ShaderのSwizzle operator相当の事をしたい
class A : IEnumerable {
	public IEnumerator GetEnumerator { ~~~ }
}

これを含む自作クラスをWatchすると、IEnumerable用のデバッグ表示機能により、要素羅列のために自動でGetEnumeratorが呼ばれる。

@green224
green224 / SwingTwistBone.py
Last active August 22, 2020 10:43
BlenderでボーンをSwing-Twist分解するリギングを行うためのアドオン
"""
振り(swing)と捻じれ(twist)にボーンを分解してリグを組むための
機能を追加するアドオン
Swing-Twist分解は腕や足などのボーンによく使用されるが
デフォルトの機能のみではこれをリギングできない
CopyRotationでEulerXZ/Yに分解する
 → Swing-Twistではないので角度が大きくなると破綻する
DampedTrack & CopyRotation
 → 一見再現できているように見えるが実行順の影響か
@green224
green224 / ExportSplitFBX.py
Created March 11, 2020 14:07
モデルを、NLAトラックごとに分離して出力するアドオン
"""
アニメーションをFBX出力をするアドオン
そのままのFBX出力ではConstraintsやDriverを複数使用した場合に
反映が1フレーム遅延した結果正常なモーションを出力できない事がある
このアドオンではモーションをそれぞれ1フレーム目の姿勢で何度か再計算してから開始する事で
なるべくいい感じにモーションが出力されるようにする
使い方
1.File->Export Split Anim FBX を選択する
@green224
green224 / ExportBakedFBX_v2.py
Last active November 15, 2022 05:27
アニメーション付きFBXを正しく出力するためのBlenderアドオン
"""
アニメーションを全BakeしてFBX出力をするアドオン
そのままのFBX出力には複数の問題がある
一部のConstraintsやDriverなどで姿勢の反映が1フレーム遅延するタイプのものが正常に出力できない
スケーリングしたボーンの子ボーンをConstraintsで回転させた場合に正常なモーションを出力できない
また組み込みのActionベイク処理は諸々正常にベイクを行わないため
この問題に対する解決法として使用することができない
このアドオンでは正しくBakeして出力を行う
# Blender用のボーンに対するこまごました操作
import bpy
D = bpy.data
# 選択ボーンの回転順を一括変更する
bones = bpy.context.selected_pose_bones
for bone in bones:
bone.rotation_mode = 'XZY'
@green224
green224 / IzUVTools.py
Created May 29, 2020 14:18
UV展開用のこまごました機能集
"""
UV展開用のこまごました機能集
ショートカットキー
i: 選択頂点を整列
"""
import bpy
import os
import subprocess