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