add capsule collider

This commit is contained in:
2016-04-23 03:50:25 +06:00
parent cdeeea6e4e
commit a0270bf6ff
10 changed files with 274 additions and 186 deletions

View File

@@ -47,9 +47,10 @@ namespace IsoTools {
#if UNITY_EDITOR
protected override void Reset() {
base.Reset();
var iso_object = GetComponent<IsoObject>();
size = iso_object ? iso_object.size : Vector3.zero;
offset = iso_object ? iso_object.size * 0.5f : Vector3.zero;
var iso_object = GetComponent<IsoObject>();
var iso_object_size = iso_object ? iso_object.size : Vector3.zero;
size = iso_object_size;
offset = iso_object_size * 0.5f;
EditorUtility.SetDirty(this);
}

View File

@@ -0,0 +1,111 @@
using UnityEngine;
using IsoTools.Internal;
#if UNITY_EDITOR
using UnityEditor;
#endif
namespace IsoTools {
[RequireComponent(typeof(IsoObject))]
public class IsoCapsuleCollider : IsoCollider {
[SerializeField]
public float _height = 0.0f;
public float height {
get { return _height; }
set {
_height = value;
if ( realCapsuleCollider ) {
realCapsuleCollider.height = value;
}
}
}
[SerializeField]
public float _radius = 0.0f;
public float radius {
get { return _radius; }
set {
_radius = value;
if ( realCapsuleCollider ) {
realCapsuleCollider.radius = value;
}
}
}
[SerializeField]
public Vector3 _offset = Vector3.zero;
public Vector3 offset {
get { return _offset; }
set {
_offset = value;
if ( realCapsuleCollider ) {
realCapsuleCollider.center = value;
}
}
}
protected override Collider CreateRealCollider(GameObject target) {
var collider = target.AddComponent<CapsuleCollider>();
collider.height = height;
collider.radius = radius;
collider.center = offset;
collider.direction = 2; // z-axis
return collider;
}
public CapsuleCollider realCapsuleCollider {
get { return realCollider as CapsuleCollider; }
}
#if UNITY_EDITOR
protected override void Reset() {
base.Reset();
var iso_object = GetComponent<IsoObject>();
var iso_object_size = iso_object ? iso_object.size : Vector3.zero;
height = iso_object.size.z;
radius = IsoUtils.Vec3MinF(iso_object_size) * 0.5f;
offset = iso_object_size * 0.5f;
EditorUtility.SetDirty(this);
}
protected override void OnValidate() {
base.OnValidate();
if ( realCapsuleCollider ) {
realCapsuleCollider.height = height;
realCapsuleCollider.radius = radius;
realCapsuleCollider.center = offset;
}
}
void OnDrawGizmosSelected() {
var iso_object = GetComponent<IsoObject>();
if ( iso_object && iso_object.isoWorld ) {
if ( radius * 2 < height ) {
IsoUtils.DrawCube(
iso_object.isoWorld,
iso_object.position + offset,
new Vector3(radius * 2.0f, radius * 2.0f, height - radius),
Color.green);
IsoUtils.DrawSphere(
iso_object.isoWorld,
iso_object.position + offset - IsoUtils.Vec3FromZ(height * 0.5f - radius),
radius,
Color.green);
IsoUtils.DrawSphere(
iso_object.isoWorld,
iso_object.position + offset + IsoUtils.Vec3FromZ(height * 0.5f - radius),
radius,
Color.green);
} else {
IsoUtils.DrawSphere(
iso_object.isoWorld,
iso_object.position + offset,
radius,
Color.green);
}
}
}
#endif
}
}

View File

@@ -0,0 +1,12 @@
fileFormatVersion: 2
guid: d4d35c70ee62a44288b95ff88ca8e87c
timeCreated: 1461359219
licenseType: Free
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -143,7 +143,6 @@ namespace IsoTools {
//
// ---------------------------------------------------------------------
public enum Mode {
Mode2d,
Mode3d

View File

@@ -47,9 +47,10 @@ namespace IsoTools {
#if UNITY_EDITOR
protected override void Reset() {
base.Reset();
var iso_object = GetComponent<IsoObject>();
radius = iso_object ? IsoUtils.Vec3MinF(iso_object.size) * 0.5f : 0.0f;
offset = iso_object ? iso_object.size * 0.5f : Vector3.zero;
var iso_object = GetComponent<IsoObject>();
var iso_object_size = iso_object ? iso_object.size : Vector3.zero;
radius = IsoUtils.Vec3MinF(iso_object_size) * 0.5f;
offset = iso_object_size * 0.5f;
EditorUtility.SetDirty(this);
}

View File

@@ -410,7 +410,7 @@ namespace IsoTools {
}
bool IsIsoObjectVisible(IsoObject iso_object) {
var renderers = GetIsoObjectRenderers(iso_object);
var renderers = GetIsoObjectRenderers(iso_object);
for ( int i = 0, e = renderers.Count; i < e; ++i ) {
if ( renderers[i].isVisible ) {
return true;