mirror of
https://github.com/BlackMATov/unity-iso-tools.git
synced 2025-12-15 09:16:08 +07:00
add capsule collider
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
111
Assets/IsoTools/Scripts/IsoCapsuleCollider.cs
Normal file
111
Assets/IsoTools/Scripts/IsoCapsuleCollider.cs
Normal 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
|
||||
}
|
||||
}
|
||||
12
Assets/IsoTools/Scripts/IsoCapsuleCollider.cs.meta
Normal file
12
Assets/IsoTools/Scripts/IsoCapsuleCollider.cs.meta
Normal 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:
|
||||
@@ -143,7 +143,6 @@ namespace IsoTools {
|
||||
//
|
||||
// ---------------------------------------------------------------------
|
||||
|
||||
|
||||
public enum Mode {
|
||||
Mode2d,
|
||||
Mode3d
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user