mirror of
https://github.com/BlackMATov/unity-iso-tools.git
synced 2025-12-15 01:12:05 +07:00
physics wip
This commit is contained in:
@@ -56,8 +56,10 @@
|
||||
<Compile Include="Assets\IsoTools\Scripts\IsoContactPoint.cs" />
|
||||
<Compile Include="Assets\IsoTools\Scripts\IsoFakeCollider.cs" />
|
||||
<Compile Include="Assets\IsoTools\Scripts\IsoFakeObject.cs" />
|
||||
<Compile Include="Assets\IsoTools\Scripts\IsoFakeRigidbody.cs" />
|
||||
<Compile Include="Assets\IsoTools\Scripts\IsoObject.cs" />
|
||||
<Compile Include="Assets\IsoTools\Scripts\IsoPhysicHelper.cs" />
|
||||
<Compile Include="Assets\IsoTools\Scripts\IsoRaycastHit.cs" />
|
||||
<Compile Include="Assets\IsoTools\Scripts\IsoRigidbody.cs" />
|
||||
<Compile Include="Assets\IsoTools\Scripts\IsoSphereCollider.cs" />
|
||||
<Compile Include="Assets\IsoTools\Scripts\IsoUtils.cs" />
|
||||
|
||||
@@ -56,8 +56,10 @@
|
||||
<Compile Include="Assets\IsoTools\Scripts\IsoContactPoint.cs" />
|
||||
<Compile Include="Assets\IsoTools\Scripts\IsoFakeCollider.cs" />
|
||||
<Compile Include="Assets\IsoTools\Scripts\IsoFakeObject.cs" />
|
||||
<Compile Include="Assets\IsoTools\Scripts\IsoFakeRigidbody.cs" />
|
||||
<Compile Include="Assets\IsoTools\Scripts\IsoObject.cs" />
|
||||
<Compile Include="Assets\IsoTools\Scripts\IsoPhysicHelper.cs" />
|
||||
<Compile Include="Assets\IsoTools\Scripts\IsoRaycastHit.cs" />
|
||||
<Compile Include="Assets\IsoTools\Scripts\IsoRigidbody.cs" />
|
||||
<Compile Include="Assets\IsoTools\Scripts\IsoSphereCollider.cs" />
|
||||
<Compile Include="Assets\IsoTools\Scripts\IsoUtils.cs" />
|
||||
|
||||
@@ -368,3 +368,14 @@ MonoBehaviour:
|
||||
_isTrigger: 0
|
||||
_size: {x: 1, y: 1, z: 1}
|
||||
_offset: {x: .5, y: .5, z: .5}
|
||||
--- !u!114 &1846453516
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_PrefabParentObject: {fileID: 0}
|
||||
m_PrefabInternal: {fileID: 0}
|
||||
m_GameObject: {fileID: 1846453513}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: 449e21ec66627fb49a67d615cd9d240a, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
|
||||
@@ -7,7 +7,7 @@ namespace IsoTools { namespace Examples {
|
||||
var iso_object = GetComponent<IsoObject>();
|
||||
var iso_rigidbody = GetComponent<IsoRigidbody>();
|
||||
if ( iso_rigidbody ) {
|
||||
iso_rigidbody.RealRigidbody.velocity = dir;
|
||||
iso_rigidbody.Velocity = dir;
|
||||
} else if ( iso_object) {
|
||||
iso_object.Position += dir * Time.deltaTime;
|
||||
}
|
||||
|
||||
@@ -9,6 +9,18 @@ namespace IsoTools {
|
||||
public abstract class IsoCollider : MonoBehaviour {
|
||||
protected abstract Collider CreateRealCollider(GameObject target);
|
||||
|
||||
Collider _realCollider = null;
|
||||
protected Collider RealCollider {
|
||||
get { return _realCollider; }
|
||||
}
|
||||
|
||||
protected GameObject IsoFakeObject {
|
||||
get {
|
||||
var helper = IsoUtils.GetOrCreateComponent<IsoPhysicHelper>(gameObject);
|
||||
return helper ? helper.IsoFakeObject : null;
|
||||
}
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
public PhysicMaterial _material = null;
|
||||
public PhysicMaterial Material {
|
||||
@@ -33,15 +45,40 @@ namespace IsoTools {
|
||||
}
|
||||
}
|
||||
|
||||
Collider _realCollider = null;
|
||||
public Collider RealCollider {
|
||||
get { return _realCollider; }
|
||||
public IsoRigidbody AttachedRigidbody {
|
||||
get {
|
||||
return RealCollider
|
||||
? IsoUtils.IsoConvertRigidbody(RealCollider.attachedRigidbody)
|
||||
: null;
|
||||
}
|
||||
}
|
||||
|
||||
public Bounds Bounds {
|
||||
get {
|
||||
return RealCollider
|
||||
? RealCollider.bounds
|
||||
: new Bounds();
|
||||
}
|
||||
}
|
||||
|
||||
public Vector3 ClosestPointOnBounds(Vector3 position) {
|
||||
return RealCollider
|
||||
? RealCollider.ClosestPointOnBounds(position)
|
||||
: Vector3.zero;
|
||||
}
|
||||
|
||||
public bool Raycast(Ray ray, out IsoRaycastHit iso_hit_info, float max_distance) {
|
||||
RaycastHit hit_info;
|
||||
var result = RealCollider
|
||||
? RealCollider.Raycast(ray, out hit_info, max_distance)
|
||||
: false;
|
||||
iso_hit_info = result ? new IsoRaycastHit(hit_info) : new IsoRaycastHit();
|
||||
return result;
|
||||
}
|
||||
|
||||
void Awake() {
|
||||
var fake_collider_go = new GameObject();
|
||||
fake_collider_go.transform.SetParent(
|
||||
IsoUtils.GetOrCreateComponent<IsoPhysicHelper>(gameObject).IsoFakeObject.transform, false);
|
||||
fake_collider_go.transform.SetParent(IsoFakeObject.transform, false);
|
||||
fake_collider_go.AddComponent<IsoFakeCollider>().Init(this);
|
||||
_realCollider = CreateRealCollider(fake_collider_go);
|
||||
_realCollider.material = Material;
|
||||
@@ -75,10 +112,8 @@ namespace IsoTools {
|
||||
}
|
||||
|
||||
protected virtual void OnValidate() {
|
||||
if ( RealCollider ) {
|
||||
RealCollider.material = Material;
|
||||
RealCollider.isTrigger = IsTrigger;
|
||||
}
|
||||
Material = _material;
|
||||
IsTrigger = _isTrigger;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -3,24 +3,18 @@
|
||||
namespace IsoTools {
|
||||
public class IsoCollision {
|
||||
|
||||
public IsoCollider Collider { get; private set; }
|
||||
public IsoContactPoint[] Contacts { get; private set; }
|
||||
public IsoCollider IsoCollider { get; private set; }
|
||||
public IsoContactPoint[] IsoContacts { get; private set; }
|
||||
public GameObject GameObject { get; private set; }
|
||||
public Vector3 RelativeVelocity { get; private set; }
|
||||
public IsoRigidbody IsoRigidbody { get; private set; }
|
||||
|
||||
public IsoCollision(
|
||||
IsoCollider collider,
|
||||
IsoContactPoint[] contacts,
|
||||
GameObject game_object,
|
||||
Vector3 relative_velocity,
|
||||
IsoRigidbody iso_rigidbody)
|
||||
{
|
||||
Collider = collider;
|
||||
Contacts = contacts;
|
||||
GameObject = game_object;
|
||||
RelativeVelocity = relative_velocity;
|
||||
IsoRigidbody = iso_rigidbody;
|
||||
public IsoCollision(Collision collision) {
|
||||
IsoCollider = IsoUtils.IsoConvertCollider(collision.collider);
|
||||
IsoContacts = IsoUtils.IsoConvertContactPoints(collision.contacts);
|
||||
GameObject = IsoUtils.IsoConvertGameObject(collision.gameObject);
|
||||
RelativeVelocity = collision.relativeVelocity;
|
||||
IsoRigidbody = IsoUtils.IsoConvertRigidbody(collision.rigidbody);
|
||||
}
|
||||
}
|
||||
} // namespace IsoTools
|
||||
@@ -1,23 +1,18 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace IsoTools {
|
||||
public class IsoContactPoint {
|
||||
public struct IsoContactPoint {
|
||||
|
||||
public Vector3 Normal { get; private set; }
|
||||
public IsoCollider OtherIsoCollider { get; private set; }
|
||||
public Vector3 Point { get; private set; }
|
||||
public IsoCollider ThisIsoCollider { get; private set; }
|
||||
|
||||
public IsoContactPoint(
|
||||
Vector3 normal,
|
||||
IsoCollider other_iso_collider,
|
||||
Vector3 point,
|
||||
IsoCollider this_iso_collider)
|
||||
{
|
||||
Normal = normal;
|
||||
OtherIsoCollider = other_iso_collider;
|
||||
Point = point;
|
||||
ThisIsoCollider = this_iso_collider;
|
||||
public IsoContactPoint(ContactPoint contact_point) {
|
||||
Normal = contact_point.normal;
|
||||
OtherIsoCollider = IsoUtils.IsoConvertCollider(contact_point.otherCollider);
|
||||
Point = contact_point.point;
|
||||
ThisIsoCollider = IsoUtils.IsoConvertCollider(contact_point.thisCollider);
|
||||
}
|
||||
}
|
||||
} // namespace IsoTools
|
||||
@@ -1,6 +1,4 @@
|
||||
using UnityEngine;
|
||||
using System.Linq;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace IsoTools {
|
||||
public class IsoFakeObject : MonoBehaviour {
|
||||
@@ -18,48 +16,6 @@ namespace IsoTools {
|
||||
get { return _isoObject; }
|
||||
}
|
||||
|
||||
IsoCollider ConvertCollider(Collider collider) {
|
||||
var fake_collider = collider.GetComponent<IsoFakeCollider>();
|
||||
return fake_collider ? fake_collider.IsoCollider : null;
|
||||
}
|
||||
|
||||
IsoRigidbody ConvertRigidbody(Rigidbody rigidbody) {
|
||||
var fake_object = rigidbody.GetComponent<IsoFakeObject>();
|
||||
var iso_object = fake_object ? fake_object.IsoObject : null;
|
||||
return iso_object ? iso_object.GetComponent<IsoRigidbody>() : null;
|
||||
}
|
||||
|
||||
GameObject ConvertGameObject(GameObject game_object) {
|
||||
var fake_object = game_object.GetComponent<IsoFakeObject>();
|
||||
var iso_object = fake_object ? fake_object.IsoObject : null;
|
||||
return iso_object ? iso_object.gameObject : null;
|
||||
}
|
||||
|
||||
IsoContactPoint ConvertContactPoint(ContactPoint contact_point) {
|
||||
return new IsoContactPoint(
|
||||
contact_point.normal,
|
||||
ConvertCollider(contact_point.otherCollider),
|
||||
contact_point.point,
|
||||
ConvertCollider(contact_point.thisCollider));
|
||||
}
|
||||
|
||||
IsoContactPoint[] ConvertContactPoints(ContactPoint[] points) {
|
||||
var iso_points = new IsoContactPoint[points.Length];
|
||||
for ( var i = 0; i < points.Length; ++i ) {
|
||||
iso_points[i] = ConvertContactPoint(points[i]);
|
||||
}
|
||||
return iso_points;
|
||||
}
|
||||
|
||||
IsoCollision ConvertCollision(Collision collision) {
|
||||
return new IsoCollision(
|
||||
ConvertCollider(collision.collider),
|
||||
ConvertContactPoints(collision.contacts),
|
||||
ConvertGameObject(collision.gameObject),
|
||||
collision.relativeVelocity,
|
||||
ConvertRigidbody(collision.rigidbody));
|
||||
}
|
||||
|
||||
void FixedUpdate() {
|
||||
if ( !IsoUtils.Vec3Approximately(_lastPosition, IsoObject.Position) ) {
|
||||
transform.position = IsoObject.Position;
|
||||
@@ -70,27 +26,31 @@ namespace IsoTools {
|
||||
}
|
||||
|
||||
void OnTriggerEnter(Collider collider) {
|
||||
var iso_collider = ConvertCollider(collider);
|
||||
IsoObject.gameObject.SendMessage(
|
||||
"OnIsoTriggerEnter", iso_collider, SendMessageOptions.DontRequireReceiver);
|
||||
"OnIsoTriggerEnter",
|
||||
IsoUtils.IsoConvertCollider(collider),
|
||||
SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
void OnTriggerExit(Collider collider) {
|
||||
var iso_collider = ConvertCollider(collider);
|
||||
IsoObject.gameObject.SendMessage(
|
||||
"OnIsoTriggerExit", iso_collider, SendMessageOptions.DontRequireReceiver);
|
||||
"OnIsoTriggerExit",
|
||||
IsoUtils.IsoConvertCollider(collider),
|
||||
SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
void OnCollisionEnter(Collision collision) {
|
||||
var iso_collision = ConvertCollision(collision);
|
||||
IsoObject.gameObject.SendMessage(
|
||||
"OnIsoCollisionEnter", iso_collision, SendMessageOptions.DontRequireReceiver);
|
||||
"OnIsoCollisionEnter",
|
||||
new IsoCollision(collision),
|
||||
SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
|
||||
void OnCollisionExit(Collision collision) {
|
||||
var iso_collision = ConvertCollision(collision);
|
||||
IsoObject.gameObject.SendMessage(
|
||||
"OnIsoCollisionExit", iso_collision, SendMessageOptions.DontRequireReceiver);
|
||||
"OnIsoCollisionExit",
|
||||
new IsoCollision(collision),
|
||||
SendMessageOptions.DontRequireReceiver);
|
||||
}
|
||||
}
|
||||
} // namespace IsoTools
|
||||
16
Assets/IsoTools/Scripts/IsoFakeRigidbody.cs
Normal file
16
Assets/IsoTools/Scripts/IsoFakeRigidbody.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace IsoTools {
|
||||
public class IsoFakeRigidbody : MonoBehaviour {
|
||||
|
||||
IsoRigidbody _isoRigidbody = null;
|
||||
|
||||
public void Init(IsoRigidbody iso_rigidbody) {
|
||||
_isoRigidbody = iso_rigidbody;
|
||||
}
|
||||
|
||||
public IsoRigidbody IsoRigidbody {
|
||||
get { return _isoRigidbody; }
|
||||
}
|
||||
}
|
||||
} // namespace IsoTools
|
||||
12
Assets/IsoTools/Scripts/IsoFakeRigidbody.cs.meta
Normal file
12
Assets/IsoTools/Scripts/IsoFakeRigidbody.cs.meta
Normal file
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c68ba79b8c53c4643b17ed586ffbbab8
|
||||
timeCreated: 1436374575
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
20
Assets/IsoTools/Scripts/IsoRaycastHit.cs
Normal file
20
Assets/IsoTools/Scripts/IsoRaycastHit.cs
Normal file
@@ -0,0 +1,20 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace IsoTools {
|
||||
public struct IsoRaycastHit {
|
||||
|
||||
public IsoCollider IsoCollider { get; private set; }
|
||||
public float Distance { get; private set; }
|
||||
public Vector3 Normal { get; private set; }
|
||||
public Vector3 Point { get; private set; }
|
||||
public IsoRigidbody IsoRigidbody { get; private set; }
|
||||
|
||||
public IsoRaycastHit(RaycastHit hit_info) {
|
||||
IsoCollider = IsoUtils.IsoConvertCollider(hit_info.collider);
|
||||
Distance = hit_info.distance;
|
||||
Normal = hit_info.normal;
|
||||
Point = hit_info.point;
|
||||
IsoRigidbody = IsoUtils.IsoConvertRigidbody(hit_info.rigidbody);
|
||||
}
|
||||
}
|
||||
} // namespace IsoTools
|
||||
12
Assets/IsoTools/Scripts/IsoRaycastHit.cs.meta
Normal file
12
Assets/IsoTools/Scripts/IsoRaycastHit.cs.meta
Normal file
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 46f4f6ce0e20940eab6088741047b2c1
|
||||
timeCreated: 1436363986
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -9,6 +9,18 @@ namespace IsoTools {
|
||||
[RequireComponent(typeof(IsoObject))]
|
||||
public class IsoRigidbody : MonoBehaviour {
|
||||
|
||||
Rigidbody _realRigidbody = null;
|
||||
protected Rigidbody RealRigidbody {
|
||||
get { return _realRigidbody; }
|
||||
}
|
||||
|
||||
protected GameObject IsoFakeObject {
|
||||
get {
|
||||
var helper = IsoUtils.GetOrCreateComponent<IsoPhysicHelper>(gameObject);
|
||||
return helper ? helper.IsoFakeObject : null;
|
||||
}
|
||||
}
|
||||
|
||||
[SerializeField]
|
||||
public bool _isKinematic = false;
|
||||
public bool IsKinematic {
|
||||
@@ -45,14 +57,205 @@ namespace IsoTools {
|
||||
}
|
||||
}
|
||||
|
||||
Rigidbody _realRigidbody = null;
|
||||
public Rigidbody RealRigidbody {
|
||||
get { return _realRigidbody; }
|
||||
public Vector3 CenterOfMass {
|
||||
get { return RealRigidbody ? RealRigidbody.centerOfMass : Vector3.zero; }
|
||||
set {
|
||||
if ( RealRigidbody ) {
|
||||
RealRigidbody.centerOfMass = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public float Drag {
|
||||
get { return RealRigidbody ? RealRigidbody.drag : 0.0f; }
|
||||
set {
|
||||
if ( RealRigidbody ) {
|
||||
RealRigidbody.drag = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Vector3 InertiaTensor {
|
||||
get { return RealRigidbody ? RealRigidbody.inertiaTensor : Vector3.zero; }
|
||||
set {
|
||||
if ( RealRigidbody ) {
|
||||
RealRigidbody.inertiaTensor = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public float Mass {
|
||||
get { return RealRigidbody ? RealRigidbody.mass : 0.0f; }
|
||||
set {
|
||||
if ( RealRigidbody ) {
|
||||
RealRigidbody.mass = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public float MaxDepenetrationVelocity {
|
||||
get { return RealRigidbody ? RealRigidbody.maxDepenetrationVelocity : 0.0f; }
|
||||
set {
|
||||
if ( RealRigidbody ) {
|
||||
RealRigidbody.maxDepenetrationVelocity = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public float SleepThreshold {
|
||||
get { return RealRigidbody ? RealRigidbody.sleepThreshold : 0.0f; }
|
||||
set {
|
||||
if ( RealRigidbody ) {
|
||||
RealRigidbody.sleepThreshold = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public int SolverIterationCount {
|
||||
get { return RealRigidbody ? RealRigidbody.solverIterationCount : 0; }
|
||||
set {
|
||||
if ( RealRigidbody ) {
|
||||
RealRigidbody.solverIterationCount = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool UseGravity {
|
||||
get { return RealRigidbody ? RealRigidbody.useGravity : false; }
|
||||
set {
|
||||
if ( RealRigidbody ) {
|
||||
RealRigidbody.useGravity = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Vector3 Velocity {
|
||||
get { return RealRigidbody ? RealRigidbody.velocity : Vector3.zero; }
|
||||
set {
|
||||
if ( RealRigidbody ) {
|
||||
RealRigidbody.velocity = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Vector3 worldCenterOfMass {
|
||||
get { return RealRigidbody ? RealRigidbody.worldCenterOfMass : Vector3.zero; }
|
||||
}
|
||||
|
||||
public void AddExplosionForce(
|
||||
float explosion_force, Vector3 explosion_position, float explosion_radius)
|
||||
{
|
||||
AddExplosionForce(
|
||||
explosion_force, explosion_position, explosion_radius,
|
||||
0.0f, ForceMode.Force);
|
||||
}
|
||||
|
||||
public void AddExplosionForce(
|
||||
float explosion_force, Vector3 explosion_position, float explosion_radius,
|
||||
float upwards_modifier)
|
||||
{
|
||||
AddExplosionForce(
|
||||
explosion_force, explosion_position, explosion_radius,
|
||||
upwards_modifier, ForceMode.Force);
|
||||
}
|
||||
|
||||
public void AddExplosionForce(
|
||||
float explosion_force, Vector3 explosion_position, float explosion_radius,
|
||||
float upwards_modifier, ForceMode mode)
|
||||
{
|
||||
if ( RealRigidbody ) {
|
||||
RealRigidbody.AddExplosionForce(
|
||||
explosion_force, explosion_position, explosion_radius,
|
||||
upwards_modifier, mode);
|
||||
}
|
||||
}
|
||||
|
||||
public void AddForce(Vector3 force) {
|
||||
AddForce(force, ForceMode.Force);
|
||||
}
|
||||
|
||||
public void AddForce(Vector3 force, ForceMode mode) {
|
||||
if ( RealRigidbody ) {
|
||||
RealRigidbody.AddForce(force, mode);
|
||||
}
|
||||
}
|
||||
|
||||
public void AddRelativeForce(Vector3 force) {
|
||||
AddRelativeForce(force, ForceMode.Force);
|
||||
}
|
||||
|
||||
public void AddRelativeForce(Vector3 force, ForceMode mode) {
|
||||
if ( RealRigidbody ) {
|
||||
RealRigidbody.AddRelativeForce(force, mode);
|
||||
}
|
||||
}
|
||||
|
||||
public void AddForceAtPosition(Vector3 force, Vector3 position) {
|
||||
AddForceAtPosition(force, position, ForceMode.Force);
|
||||
}
|
||||
|
||||
public void AddForceAtPosition(Vector3 force, Vector3 position, ForceMode mode) {
|
||||
if ( RealRigidbody ) {
|
||||
RealRigidbody.AddForceAtPosition(force, position, mode);
|
||||
}
|
||||
}
|
||||
|
||||
public Vector3 ClosestPointOnBounds(Vector3 position) {
|
||||
return RealRigidbody
|
||||
? RealRigidbody.ClosestPointOnBounds(position)
|
||||
: Vector3.zero;
|
||||
}
|
||||
|
||||
public bool IsSleeping() {
|
||||
return RealRigidbody
|
||||
? RealRigidbody.IsSleeping()
|
||||
: false;
|
||||
}
|
||||
|
||||
public void SetDensity(float density) {
|
||||
if ( RealRigidbody ) {
|
||||
RealRigidbody.SetDensity(density);
|
||||
}
|
||||
}
|
||||
|
||||
public void Sleep() {
|
||||
if ( RealRigidbody ) {
|
||||
RealRigidbody.Sleep();
|
||||
}
|
||||
}
|
||||
|
||||
public void WakeUp() {
|
||||
if ( RealRigidbody ) {
|
||||
RealRigidbody.WakeUp();
|
||||
}
|
||||
}
|
||||
|
||||
public bool SweepTest(Vector3 direction, out IsoRaycastHit iso_hit_info) {
|
||||
return SweepTest(direction, out iso_hit_info, Mathf.Infinity);
|
||||
}
|
||||
|
||||
public bool SweepTest(Vector3 direction, out IsoRaycastHit iso_hit_info, float max_distance) {
|
||||
RaycastHit hit_info;
|
||||
var result = RealRigidbody
|
||||
? RealRigidbody.SweepTest(direction, out hit_info, max_distance)
|
||||
: false;
|
||||
iso_hit_info = result ? new IsoRaycastHit(hit_info) : new IsoRaycastHit();
|
||||
return result;
|
||||
}
|
||||
|
||||
public IsoRaycastHit[] SweepTestAll(Vector3 direction) {
|
||||
return SweepTestAll(direction, Mathf.Infinity);
|
||||
}
|
||||
|
||||
public IsoRaycastHit[] SweepTestAll(Vector3 direction, float max_distance) {
|
||||
return RealRigidbody
|
||||
? IsoUtils.IsoConvertRaycastHits(RealRigidbody.SweepTestAll(direction, max_distance))
|
||||
: new IsoRaycastHit[0];
|
||||
}
|
||||
|
||||
void Awake() {
|
||||
var helper = IsoUtils.GetOrCreateComponent<IsoPhysicHelper>(gameObject);
|
||||
_realRigidbody = helper.IsoFakeObject.AddComponent<Rigidbody>();
|
||||
IsoFakeObject.AddComponent<IsoFakeRigidbody>().Init(this);
|
||||
_realRigidbody = IsoFakeObject.AddComponent<Rigidbody>();
|
||||
_realRigidbody.freezeRotation = true;
|
||||
_realRigidbody.isKinematic = IsKinematic;
|
||||
_realRigidbody.interpolation = Interpolation;
|
||||
@@ -73,6 +276,7 @@ namespace IsoTools {
|
||||
|
||||
void OnDestroy() {
|
||||
if ( _realRigidbody ) {
|
||||
Destroy(IsoFakeObject.GetComponent<IsoFakeRigidbody>());
|
||||
Destroy(_realRigidbody);
|
||||
_realRigidbody = null;
|
||||
}
|
||||
|
||||
@@ -375,6 +375,38 @@ namespace IsoTools {
|
||||
: obj.AddComponent<T>();
|
||||
}
|
||||
|
||||
public static IsoCollider IsoConvertCollider(Collider collider) {
|
||||
var fake_collider = collider ? collider.GetComponent<IsoFakeCollider>() : null;
|
||||
return fake_collider ? fake_collider.IsoCollider : null;
|
||||
}
|
||||
|
||||
public static IsoRigidbody IsoConvertRigidbody(Rigidbody rigidbody) {
|
||||
var fake_rigidbody = rigidbody ? rigidbody.GetComponent<IsoFakeRigidbody>() : null;
|
||||
return fake_rigidbody ? fake_rigidbody.IsoRigidbody : null;
|
||||
}
|
||||
|
||||
public static GameObject IsoConvertGameObject(GameObject game_object) {
|
||||
var fake_object = game_object ? game_object.GetComponent<IsoFakeObject>() : null;
|
||||
var iso_object = fake_object ? fake_object.IsoObject : null;
|
||||
return iso_object ? iso_object.gameObject : null;
|
||||
}
|
||||
|
||||
public static IsoContactPoint[] IsoConvertContactPoints(ContactPoint[] points) {
|
||||
var iso_points = new IsoContactPoint[points.Length];
|
||||
for ( var i = 0; i < points.Length; ++i ) {
|
||||
iso_points[i] = new IsoContactPoint(points[i]);
|
||||
}
|
||||
return iso_points;
|
||||
}
|
||||
|
||||
public static IsoRaycastHit[] IsoConvertRaycastHits(RaycastHit[] hits) {
|
||||
var iso_hits = new IsoRaycastHit[hits.Length];
|
||||
for ( var i = 0; i < hits.Length; ++i ) {
|
||||
iso_hits[i] = new IsoRaycastHit(hits[i]);
|
||||
}
|
||||
return iso_hits;
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
//
|
||||
// Debug draw
|
||||
|
||||
@@ -23,7 +23,7 @@ Global
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(MonoDevelopProperties) = preSolution
|
||||
GlobalSection(MonoDevelopProperties) = preSolution
|
||||
StartupItem = Assembly-CSharp.csproj
|
||||
Policies = $0
|
||||
$0.TextStylePolicy = $1
|
||||
|
||||
@@ -23,7 +23,7 @@ Global
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(MonoDevelopProperties) = preSolution
|
||||
GlobalSection(MonoDevelopProperties) = preSolution
|
||||
StartupItem = Assembly-CSharp.csproj
|
||||
Policies = $0
|
||||
$0.TextStylePolicy = $1
|
||||
|
||||
@@ -1,16 +1,13 @@
|
||||
<Properties>
|
||||
<MonoDevelop.Ide.Workspace ActiveConfiguration="Debug" PreferredExecutionTarget="MonoDevelop.Default" />
|
||||
<MonoDevelop.Ide.Workbench ActiveDocument="Assets/IsoTools/Examples/Scripts/IsoEchoListener.cs">
|
||||
<MonoDevelop.Ide.Workspace ActiveConfiguration="Debug" />
|
||||
<MonoDevelop.Ide.Workbench ActiveDocument="Assets/IsoTools/Scripts/IsoRigidbody.cs">
|
||||
<Files>
|
||||
<File FileName="Assets/IsoTools/Examples/Scripts/CircleFly.cs" Line="25" Column="35" />
|
||||
<File FileName="Assets/IsoTools/Examples/Scripts/IsoEchoListener.cs" Line="29" Column="3" />
|
||||
<File FileName="Assets/IsoTools/Scripts/IsoCollider.cs" Line="86" Column="4" />
|
||||
<File FileName="Assets/IsoTools/Scripts/IsoRigidbody.cs" Line="14" Column="34" />
|
||||
</Files>
|
||||
</MonoDevelop.Ide.Workbench>
|
||||
<MonoDevelop.Ide.DebuggingService.Breakpoints>
|
||||
<BreakpointStore>
|
||||
<Breakpoint file="/Users/blackmat/Programming/Projects/UnityIso/Assets/IsoTools/Examples/Scripts/IsoEchoListener.cs" line="19" />
|
||||
<Breakpoint file="/Users/blackmat/Programming/Projects/UnityIso/Assets/IsoTools/Examples/Scripts/IsoEchoListener.cs" line="25" />
|
||||
</BreakpointStore>
|
||||
<BreakpointStore />
|
||||
</MonoDevelop.Ide.DebuggingService.Breakpoints>
|
||||
<MonoDevelop.Ide.DebuggingService.PinnedWatches />
|
||||
</Properties>
|
||||
Reference in New Issue
Block a user