mirror of
https://github.com/BlackMATov/unity-iso-tools.git
synced 2025-12-15 09:16:08 +07:00
fake colliders and rigidbody to one fakeobject
This commit is contained in:
@@ -2,11 +2,11 @@
|
|||||||
|
|
||||||
namespace IsoTools.Internal {
|
namespace IsoTools.Internal {
|
||||||
public class IsoFakeCollider : MonoBehaviour {
|
public class IsoFakeCollider : MonoBehaviour {
|
||||||
|
|
||||||
IsoCollider _isoCollider = null;
|
IsoCollider _isoCollider = null;
|
||||||
|
|
||||||
public void Init(IsoCollider iso_collider) {
|
public IsoFakeCollider Init(IsoCollider iso_collider) {
|
||||||
_isoCollider = iso_collider;
|
_isoCollider = iso_collider;
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IsoCollider isoCollider {
|
public IsoCollider isoCollider {
|
||||||
|
|||||||
@@ -20,10 +20,6 @@ namespace IsoTools.Internal {
|
|||||||
var iso_object_layer = isoObject.gameObject.layer;
|
var iso_object_layer = isoObject.gameObject.layer;
|
||||||
if ( gameObject.layer != iso_object_layer ) {
|
if ( gameObject.layer != iso_object_layer ) {
|
||||||
gameObject.layer = iso_object_layer;
|
gameObject.layer = iso_object_layer;
|
||||||
for ( int i = 0, e = transform.childCount; i < e; ++i ) {
|
|
||||||
var child = transform.GetChild(i);
|
|
||||||
child.gameObject.layer = iso_object_layer;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
|
|
||||||
namespace IsoTools.Internal {
|
namespace IsoTools.Internal {
|
||||||
public class IsoFakeRigidbody : MonoBehaviour {
|
public class IsoFakeRigidbody : MonoBehaviour {
|
||||||
|
|
||||||
IsoRigidbody _isoRigidbody = null;
|
IsoRigidbody _isoRigidbody = null;
|
||||||
|
|
||||||
public void Init(IsoRigidbody iso_rigidbody) {
|
public IsoFakeRigidbody Init(IsoRigidbody iso_rigidbody) {
|
||||||
_isoRigidbody = iso_rigidbody;
|
_isoRigidbody = iso_rigidbody;
|
||||||
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IsoRigidbody isoRigidbody {
|
public IsoRigidbody isoRigidbody {
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ namespace IsoTools {
|
|||||||
public abstract class IsoCollider : MonoBehaviour {
|
public abstract class IsoCollider : MonoBehaviour {
|
||||||
protected abstract Collider CreateRealCollider(GameObject target);
|
protected abstract Collider CreateRealCollider(GameObject target);
|
||||||
|
|
||||||
|
IsoFakeCollider _fakeCollider;
|
||||||
|
|
||||||
Collider _realCollider = null;
|
Collider _realCollider = null;
|
||||||
protected Collider realCollider {
|
protected Collider realCollider {
|
||||||
get { return _realCollider; }
|
get { return _realCollider; }
|
||||||
@@ -91,10 +93,8 @@ namespace IsoTools {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Awake() {
|
void Awake() {
|
||||||
var fake_collider_go = new GameObject();
|
_fakeCollider = fakeObject.AddComponent<IsoFakeCollider>().Init(this);
|
||||||
fake_collider_go.transform.SetParent(fakeObject.transform, false);
|
_realCollider = CreateRealCollider(fakeObject);
|
||||||
fake_collider_go.AddComponent<IsoFakeCollider>().Init(this);
|
|
||||||
_realCollider = CreateRealCollider(fake_collider_go);
|
|
||||||
_realCollider.material = material;
|
_realCollider.material = material;
|
||||||
_realCollider.isTrigger = isTrigger;
|
_realCollider.isTrigger = isTrigger;
|
||||||
}
|
}
|
||||||
@@ -113,8 +113,10 @@ namespace IsoTools {
|
|||||||
|
|
||||||
void OnDestroy() {
|
void OnDestroy() {
|
||||||
if ( _realCollider ) {
|
if ( _realCollider ) {
|
||||||
Destroy(_realCollider.gameObject);
|
Destroy(_realCollider);
|
||||||
_realCollider = null;
|
}
|
||||||
|
if ( _fakeCollider ) {
|
||||||
|
Destroy(_fakeCollider);
|
||||||
}
|
}
|
||||||
physicHelper.DestroyIfUnnecessary(this);
|
physicHelper.DestroyIfUnnecessary(this);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ namespace IsoTools {
|
|||||||
[RequireComponent(typeof(IsoObject))]
|
[RequireComponent(typeof(IsoObject))]
|
||||||
public class IsoRigidbody : MonoBehaviour {
|
public class IsoRigidbody : MonoBehaviour {
|
||||||
|
|
||||||
|
IsoFakeRigidbody _fakeRigidbody;
|
||||||
|
|
||||||
Rigidbody _realRigidbody = null;
|
Rigidbody _realRigidbody = null;
|
||||||
Rigidbody realRigidbody {
|
Rigidbody realRigidbody {
|
||||||
get { return _realRigidbody; }
|
get { return _realRigidbody; }
|
||||||
@@ -318,8 +320,8 @@ namespace IsoTools {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Awake() {
|
void Awake() {
|
||||||
IsoUtils.GetOrCreateComponent<IsoFakeRigidbody>(fakeObject).Init(this);
|
_fakeRigidbody = fakeObject.AddComponent<IsoFakeRigidbody>().Init(this);
|
||||||
_realRigidbody = IsoUtils.GetOrCreateComponent<Rigidbody>(fakeObject);
|
_realRigidbody = fakeObject.AddComponent<Rigidbody>();
|
||||||
_realRigidbody.freezeRotation = true;
|
_realRigidbody.freezeRotation = true;
|
||||||
_realRigidbody.mass = mass;
|
_realRigidbody.mass = mass;
|
||||||
_realRigidbody.drag = drag;
|
_realRigidbody.drag = drag;
|
||||||
@@ -343,9 +345,10 @@ namespace IsoTools {
|
|||||||
|
|
||||||
void OnDestroy() {
|
void OnDestroy() {
|
||||||
if ( _realRigidbody ) {
|
if ( _realRigidbody ) {
|
||||||
Destroy(fakeObject.GetComponent<IsoFakeRigidbody>());
|
|
||||||
Destroy(_realRigidbody);
|
Destroy(_realRigidbody);
|
||||||
_realRigidbody = null;
|
}
|
||||||
|
if ( _fakeRigidbody ) {
|
||||||
|
Destroy(_fakeRigidbody);
|
||||||
}
|
}
|
||||||
physicHelper.DestroyIfUnnecessary(this);
|
physicHelper.DestroyIfUnnecessary(this);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user