Netcode Bootstrap
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
using UnityEngine;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace Rukhanka.Hybrid
|
||||
{
|
||||
public class AimIKAuthoring: MonoBehaviour
|
||||
{
|
||||
public Transform target;
|
||||
public float angleLimitMin;
|
||||
public float angleLimitMax;
|
||||
public Vector3 forwardVector = Vector3.forward;
|
||||
[Range(0, 1)]
|
||||
public float weight = 1;
|
||||
|
||||
public WeightedTransform[] affectedBones;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void OnEnable() { }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0e4319be77ca1d84a993b9434a363e0b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 298480
|
||||
packageName: Rukhanka Animation System 2
|
||||
packageVersion: 2.9.0
|
||||
assetPath: Packages/com.rukhanka.animation/Rukhanka.Hybrid/IK/AimIKAuthoring.cs
|
||||
uploadId: 897522
|
||||
@@ -0,0 +1,45 @@
|
||||
using Unity.Entities;
|
||||
using Unity.Mathematics;
|
||||
using UnityEngine;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace Rukhanka.Hybrid
|
||||
{
|
||||
public class AimIKBaker: Baker<AimIKAuthoring>
|
||||
{
|
||||
public override void Bake(AimIKAuthoring a)
|
||||
{
|
||||
var e = GetEntity(a, TransformUsageFlags.None);
|
||||
|
||||
var aik = new AimIKComponent()
|
||||
{
|
||||
angleLimits = math.radians(new float2(a.angleLimitMin, a.angleLimitMax)),
|
||||
target = GetEntity(a.target, TransformUsageFlags.Dynamic),
|
||||
forwardVector = math.normalize(a.forwardVector),
|
||||
weight = a.weight,
|
||||
};
|
||||
|
||||
AddComponent(e, aik);
|
||||
var aikAffectedBones = AddBuffer<AimIKAffectedBoneComponent>(e);
|
||||
|
||||
for (var i = 0; i < a.affectedBones.Length; ++i)
|
||||
{
|
||||
var ab = a.affectedBones[i];
|
||||
if (ab.bone == null)
|
||||
{
|
||||
Debug.LogWarning($"'{a.name}': Affected bone list contains empty bone reference at index {i}.");
|
||||
continue;
|
||||
}
|
||||
|
||||
var aimedBone = new AimIKAffectedBoneComponent()
|
||||
{
|
||||
weight = ab.weight,
|
||||
boneEntity = GetEntity(ab.bone, TransformUsageFlags.Dynamic)
|
||||
};
|
||||
|
||||
aikAffectedBones.Add(aimedBone);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8666b9be5fee4f74d9eda80824a22de7
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 298480
|
||||
packageName: Rukhanka Animation System 2
|
||||
packageVersion: 2.9.0
|
||||
assetPath: Packages/com.rukhanka.animation/Rukhanka.Hybrid/IK/AimIKBaker.cs
|
||||
uploadId: 897522
|
||||
@@ -0,0 +1,23 @@
|
||||
using UnityEngine;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace Rukhanka.Hybrid
|
||||
{
|
||||
public class DynamicBoneChainAuthoring: MonoBehaviour
|
||||
{
|
||||
public Transform tip;
|
||||
[Range(0, 1)]
|
||||
public float inertia = 1;
|
||||
[Range(0, 1)]
|
||||
public float damping = 0.1f;
|
||||
[Range(0, 1)]
|
||||
public float elasticity = 0.1f;
|
||||
[Range(0, 1)]
|
||||
public float stiffness = 0.1f;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void OnEnable() { }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ed30767c708802945837aff39e198384
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 298480
|
||||
packageName: Rukhanka Animation System 2
|
||||
packageVersion: 2.9.0
|
||||
assetPath: Packages/com.rukhanka.animation/Rukhanka.Hybrid/IK/DynamicBoneChainAuthoring.cs
|
||||
uploadId: 897522
|
||||
@@ -0,0 +1,79 @@
|
||||
using System.Collections.Generic;
|
||||
using Unity.Entities;
|
||||
using UnityEngine;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace Rukhanka.Hybrid
|
||||
{
|
||||
public class DynamicBoneChainBaker: Baker<DynamicBoneChainAuthoring>
|
||||
{
|
||||
public override void Bake(DynamicBoneChainAuthoring a)
|
||||
{
|
||||
if (a.tip == null)
|
||||
{
|
||||
Debug.LogError($"DynamicBoneChainAuthoring '{a.name}': No tip transform defined!");
|
||||
return;
|
||||
}
|
||||
|
||||
var e = GetEntity(a, TransformUsageFlags.None);
|
||||
|
||||
var dbcc = new DynamicBoneChainComponent()
|
||||
{
|
||||
inertia = a.inertia,
|
||||
damping = a.damping,
|
||||
elasticity = a.elasticity,
|
||||
stiffness = a.stiffness,
|
||||
timeAccumulator = 0,
|
||||
prevPosition = a.transform.position
|
||||
};
|
||||
|
||||
AddComponent(e, dbcc);
|
||||
var nodeList = AddBuffer<DynamicBoneChainNode>(e);
|
||||
|
||||
var allBones = GatherChainTransforms(a.transform, a.tip);
|
||||
|
||||
for (var i = 0; i < allBones.Count; ++i)
|
||||
{
|
||||
var currentTransform = allBones[i];
|
||||
var refLocalPos = new BoneTransform()
|
||||
{
|
||||
pos = currentTransform.localPosition,
|
||||
rot = currentTransform.localRotation,
|
||||
scale = currentTransform.localScale
|
||||
};
|
||||
|
||||
var be = new DynamicBoneChainNode()
|
||||
{
|
||||
boneEntity = GetEntity(currentTransform, TransformUsageFlags.Dynamic),
|
||||
prevPosition = currentTransform.position,
|
||||
position = currentTransform.position,
|
||||
referenceLocalPose = refLocalPos,
|
||||
parentIndex = allBones.FindIndex(0, allBones.Count, x => x == currentTransform.parent)
|
||||
};
|
||||
nodeList.Add(be);
|
||||
}
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
List<Transform> GatherChainTransforms(Transform root, Transform tip)
|
||||
{
|
||||
var rv = new List<Transform>();
|
||||
if (tip == null)
|
||||
return rv;
|
||||
|
||||
var curNode = tip;
|
||||
do
|
||||
{
|
||||
rv.Add(curNode);
|
||||
curNode = curNode.parent;
|
||||
}
|
||||
while (curNode != root && curNode.parent != null);
|
||||
|
||||
rv.Reverse();
|
||||
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0c11627453db5f94b9ab9c20f001b93e
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 298480
|
||||
packageName: Rukhanka Animation System 2
|
||||
packageVersion: 2.9.0
|
||||
assetPath: Packages/com.rukhanka.animation/Rukhanka.Hybrid/IK/DynamicBoneChainBaker.cs
|
||||
uploadId: 897522
|
||||
@@ -0,0 +1,18 @@
|
||||
using UnityEngine;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace Rukhanka.Hybrid
|
||||
{
|
||||
public class FABRIKAuthoring: MonoBehaviour
|
||||
{
|
||||
[Range(0, 1)]
|
||||
public float weight = 1;
|
||||
public Transform tip;
|
||||
public Transform target;
|
||||
public int numIterations = 15;
|
||||
public float threshold = 0.00001f;
|
||||
|
||||
void OnEnable() { }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4dc285f22ddcadd458e6484e02e2e7d0
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 298480
|
||||
packageName: Rukhanka Animation System 2
|
||||
packageVersion: 2.9.0
|
||||
assetPath: Packages/com.rukhanka.animation/Rukhanka.Hybrid/IK/FABRIKAuthoring.cs
|
||||
uploadId: 897522
|
||||
@@ -0,0 +1,71 @@
|
||||
using Unity.Entities;
|
||||
using UnityEngine;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace Rukhanka.Hybrid
|
||||
{
|
||||
public class FABRIKBaker: Baker<FABRIKAuthoring>
|
||||
{
|
||||
public override void Bake(FABRIKAuthoring a)
|
||||
{
|
||||
if (a.target == null)
|
||||
{
|
||||
Debug.LogError($"'{a.name}': IK target is not set.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (a.tip == null)
|
||||
{
|
||||
Debug.LogError($"'{a.name}': IK tip (end of chain) is not set.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (a.tip == a.target)
|
||||
{
|
||||
Debug.LogError($"'{a.name}': IK tip and target must not be same transform.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (a.tip == a.transform)
|
||||
{
|
||||
Debug.LogError($"'{a.name}': IK tip and root must not be same transform.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!CheckReachability(a.transform, a.tip))
|
||||
{
|
||||
Debug.LogError($"'{a.name}' transform cannot be reached from '{a.tip}'. Check your skeleton hierarchy.");
|
||||
return;
|
||||
}
|
||||
|
||||
var ikComponent = new FABRIKComponent()
|
||||
{
|
||||
target = GetEntity(a.target, TransformUsageFlags.Dynamic),
|
||||
tip = GetEntity(a.tip, TransformUsageFlags.Dynamic),
|
||||
numIterations = a.numIterations,
|
||||
threshold = a.threshold,
|
||||
weight = a.weight
|
||||
};
|
||||
|
||||
var e = GetEntity(TransformUsageFlags.Dynamic);
|
||||
AddComponent(e, ikComponent);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
bool CheckReachability(Transform root, Transform tip)
|
||||
{
|
||||
var isReachable = false;
|
||||
var curNode = tip;
|
||||
|
||||
while (!isReachable && curNode != null)
|
||||
{
|
||||
isReachable = curNode == root;
|
||||
curNode = curNode.parent;
|
||||
}
|
||||
|
||||
return isReachable;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f1611d67705c6034397e6d8c21a02d78
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 298480
|
||||
packageName: Rukhanka Animation System 2
|
||||
packageVersion: 2.9.0
|
||||
assetPath: Packages/com.rukhanka.animation/Rukhanka.Hybrid/IK/FABRIKBaker.cs
|
||||
uploadId: 897522
|
||||
@@ -0,0 +1,19 @@
|
||||
using UnityEngine;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace Rukhanka.Hybrid
|
||||
{
|
||||
public class OverrideTransformIKAuthoring: MonoBehaviour
|
||||
{
|
||||
public Transform target;
|
||||
[Range(0, 1)]
|
||||
public float positionWeight = 1;
|
||||
[Range(0, 1)]
|
||||
public float rotationWeight = 1;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
void OnEnable() { }
|
||||
}
|
||||
}
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e9371b93ced6f67428c1e5e306fb5aae
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 298480
|
||||
packageName: Rukhanka Animation System 2
|
||||
packageVersion: 2.9.0
|
||||
assetPath: Packages/com.rukhanka.animation/Rukhanka.Hybrid/IK/OverrideTransformIKAuthoring.cs
|
||||
uploadId: 897522
|
||||
@@ -0,0 +1,22 @@
|
||||
using Unity.Entities;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace Rukhanka.Hybrid
|
||||
{
|
||||
public class OverrideTransformIKBaker: Baker<OverrideTransformIKAuthoring>
|
||||
{
|
||||
public override void Bake(OverrideTransformIKAuthoring a)
|
||||
{
|
||||
var e = GetEntity(a, TransformUsageFlags.None);
|
||||
var otik = new OverrideTransformIKComponent()
|
||||
{
|
||||
target = GetEntity(a.target, TransformUsageFlags.Dynamic),
|
||||
positionWeight = a.positionWeight,
|
||||
rotationWeight = a.rotationWeight,
|
||||
};
|
||||
|
||||
AddComponent(e, otik);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 911a5c8a94d20ab418845f033516babe
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 298480
|
||||
packageName: Rukhanka Animation System 2
|
||||
packageVersion: 2.9.0
|
||||
assetPath: Packages/com.rukhanka.animation/Rukhanka.Hybrid/IK/OverrideTransformIKBaker.cs
|
||||
uploadId: 897522
|
||||
@@ -0,0 +1,18 @@
|
||||
using UnityEngine;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace Rukhanka.Hybrid
|
||||
{
|
||||
public class TwoBoneIKAuthoring: MonoBehaviour
|
||||
{
|
||||
[Range(0, 1)]
|
||||
public float weight = 1;
|
||||
public Transform mid;
|
||||
public Transform tip;
|
||||
public Transform target;
|
||||
public Transform midBentHint;
|
||||
|
||||
void OnEnable() { }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b1cd4368386b54241b1b5121ce9ddf54
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 298480
|
||||
packageName: Rukhanka Animation System 2
|
||||
packageVersion: 2.9.0
|
||||
assetPath: Packages/com.rukhanka.animation/Rukhanka.Hybrid/IK/TwoBoneIKAuthoring.cs
|
||||
uploadId: 897522
|
||||
@@ -0,0 +1,24 @@
|
||||
using Unity.Entities;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace Rukhanka.Hybrid
|
||||
{
|
||||
public class TwoBoneIKBaker: Baker<TwoBoneIKAuthoring>
|
||||
{
|
||||
public override void Bake(TwoBoneIKAuthoring a)
|
||||
{
|
||||
var tbik = new TwoBoneIKComponent()
|
||||
{
|
||||
mid = GetEntity(a.mid, TransformUsageFlags.Dynamic),
|
||||
target = GetEntity(a.target, TransformUsageFlags.Dynamic),
|
||||
tip = GetEntity(a.tip, TransformUsageFlags.Dynamic),
|
||||
midBentHint = GetEntity(a.midBentHint, TransformUsageFlags.Dynamic),
|
||||
weight = a.weight
|
||||
};
|
||||
|
||||
var e = GetEntity(TransformUsageFlags.Dynamic);
|
||||
AddComponent(e, tbik);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6b231f09e5866af40a601d3663e3bb13
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 298480
|
||||
packageName: Rukhanka Animation System 2
|
||||
packageVersion: 2.9.0
|
||||
assetPath: Packages/com.rukhanka.animation/Rukhanka.Hybrid/IK/TwoBoneIKBaker.cs
|
||||
uploadId: 897522
|
||||
@@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace Rukhanka.Hybrid
|
||||
{
|
||||
[Serializable]
|
||||
public class WeightedTransform
|
||||
{
|
||||
public Transform bone;
|
||||
[Range(0, 1)]
|
||||
public float weight = 1;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 935cc76966b6ca24991aaa2e3001e5db
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
AssetOrigin:
|
||||
serializedVersion: 1
|
||||
productId: 298480
|
||||
packageName: Rukhanka Animation System 2
|
||||
packageVersion: 2.9.0
|
||||
assetPath: Packages/com.rukhanka.animation/Rukhanka.Hybrid/IK/WeightedTransform.cs
|
||||
uploadId: 897522
|
||||
Reference in New Issue
Block a user