fake colliders and rigidbody to one fakeobject

This commit is contained in:
2016-04-18 23:32:44 +06:00
parent 469f674f69
commit c21d33cd77
5 changed files with 19 additions and 18 deletions

View File

@@ -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 {

View File

@@ -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;
}
} }
} }

View File

@@ -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 {

View File

@@ -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);
} }

View File

@@ -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);
} }