【Unity】简单相机跟随

Unity3D相机跟随

创建CameraFollow脚本,将其挂载于目标相机上

需求

  1. 相机固定角度跟随目标移动

参数化

  1. 跟随目标 Transform followTarget
  2. 偏移距离 Vector3 followOffset
  3. 偏移角度 Vector3 followRotation
using UnityEngine;

// [ExecuteInEditMode]
public class CameraFollow : MonoBehaviour
{
	public Transform followTarget;
	public Vector3 followOffset;
	public Vector3 followRotation;

	void Start()
	{
		if (followTarget == null)
			followTarget = GameObject.FindWithTag("Player").transform;
	}

	void Update()
	{
		transform.position = followTarget.position + followOffset;
		transform.rotation = Quaternion.Euler(followRotation);
	}

	// // 编辑器模式下更新
	// void OnValidate()
	// {
	// 	transform.position = followTarget.position + followOffset;
	// 	transform.rotation = Quaternion.Euler(followRotation);
	// }
}

其他

修改编辑器,使用CameraFollow中的参数,完全覆盖inspection面板的参数,同时使操作在窗口可见

注:此项需要在项目根目录创建Editor文件夹,将此脚本放置于文件夹内

using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(CameraFollow))]
public class CameraFollowEditor : Editor
{
	private SerializedProperty followTarget;
	private SerializedProperty followOffset;
	private SerializedProperty followRotation;

	void OnEnable()
	{
		if (target == null)
			return;

		followTarget = serializedObject.FindProperty("followTarget");
		followOffset = serializedObject.FindProperty("followOffset");
		followRotation = serializedObject.FindProperty("followRotation");
	}

	public override void OnInspectorGUI()
	{
		serializedObject.Update();

		EditorGUILayout.PropertyField(followTarget);
		EditorGUILayout.PropertyField(followOffset);
		EditorGUILayout.PropertyField(followRotation);

		serializedObject.ApplyModifiedProperties();
		{
			CameraFollow cameraFollow = (CameraFollow)target;

			cameraFollow.transform.SetPositionAndRotation(cameraFollow.followTarget.position + cameraFollow.followOffset, Quaternion.Euler(cameraFollow.followRotation));
			EditorUtility.SetDirty(cameraFollow);
		}
	}
}



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值