You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

79 lines
2.3 KiB

using UnityEngine;
using System.Collections;
[ExecuteInEditMode]
public class Follower : MonoBehaviour {
public Transform leader;
public bool position = true;
public bool rotation = true;
public bool scaling = true;
public bool useInitRotation = true;
public float pos_duration = 0.2f;
public float rot_duration = 0.2f;
public float scale_duration = 0.2f;
Quaternion initialRotate = Quaternion.identity;
Vector3 TargetPosition
{
get
{
if (leader == null)
return Vector3.zero;
if (biasMode == BiasMode.WorldSpace) return leader.position + bias;
else return leader.TransformPoint(bias);
}
}
public Vector3 bias;
public enum BiasMode
{
TargetLocalSpace,
WorldSpace
}
public BiasMode biasMode = BiasMode.WorldSpace;
// Use this for initialization
void Start () {
//game.hideFlags = HideFlags.DontSave;
if(useInitRotation)
initialRotate = transform.rotation;
}
// Update is called once per frame
void Update () {
if (leader == null)
return;
float pos_step = Mathf.Clamp01(Time.deltaTime / pos_duration);
float rot_step = Mathf.Clamp01(Time.deltaTime / rot_duration);
float scale_step = Mathf.Clamp01(Time.deltaTime / scale_duration);
if (Application.isPlaying == false)
pos_step = rot_step = scale_step = 1.0f;
if (position)
transform.position = Vector3.Lerp(transform.position, TargetPosition, pos_step);
if (rotation)
transform.rotation = Quaternion.Slerp(transform.rotation, leader.rotation * initialRotate, rot_step);
if(scaling)
transform.localScale = Vector3.Lerp(transform.localScale, leader.localScale, scale_step);
}
private void OnDestroy()
{
transform.rotation = initialRotate;
}
void OnDrawGizmos()
{
Gizmos.color = Color.red;
Gizmos.DrawLine(transform.position, transform.position + transform.right);
Gizmos.color = Color.green;
Gizmos.DrawLine(transform.position, transform.position + transform.up);
Gizmos.color = Color.blue;
Gizmos.DrawLine(transform.position, transform.position + transform.forward);
}
}