git地址:https://gitee.com/asiworld/MakeAModelFrom-code
csdn博客地址:https://blog.csdn.net/JianShengShuaiest
bilibili地址:https://space.bilibili.com/15766978
简介
在编辑模式下,我们经常会用scene中的摄像机去确定一些摄像机的位置,但是scene的摄像机位置又没有数值,我们想让我们的摄像机移动到我们想要的位置上,只能通过代码的形式去处理
核心代码
首先我们先要找到的就是如何得到Scene中的摄像机的信息,通过以下代码
if (GUILayout.Button("设置摄像机位置"))
{
t.m_v3_position = SceneView.lastActiveSceneView.camera.transform.position;
t.m_v3_rotation = new Vector3(
SceneView.lastActiveSceneView.camera.transform.rotation.eulerAngles.x,
SceneView.lastActiveSceneView.camera.transform.rotation.eulerAngles.y, 0);
}
通过这个语句我们就能得到摄像机的transform的信息,
实现功能
我们要做一个button的脚本,脚本记录的是scene的信息,然后当我点击的时候game模式下的camera的信息就变为记录信息,
- 当我点击按钮的时候
- 摄像机就的transform属性就发生变化
- 变化成scene的摄像机的位置和角度
效果
操作模式
- 给button挂在脚本
- 然后在scene中选定位置
- 点击脚本上的设置设置摄像机位置button
- 设置要移动的相机
- 在game模式下点击对应的button就可以得到效果了
整体代码
using UnityEngine;
using DG.Tweening;
using UnityEngine.UI;
#if UNITY_EDITOR
using UnityEditor;
#endif
public class CameraPositioningButton : MonoBehaviour
{
public Vector3 m_v3_position;
public Vector3 m_v3_rotation;
public Camera m_camera;
private Button m_button;
// 加载脚本实例时调用 Awake
private void Awake()
{
m_button = GetComponent<Button>();
m_button.onClick.AddListener(() =>
{
m_camera.transform.DOMove(m_v3_position, 2.0f);
m_camera.transform.DORotate(m_v3_rotation, 2.0f);
});
}
}
#if UNITY_EDITOR
[CustomEditor(typeof(CameraPositioningButton))]
public class CameraPositioningButtonEditor : Editor
{
//在这里方法中就可以绘制面板。
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
//得到Test对象
CameraPositioningButton t = target as CameraPositioningButton;
Undo.RecordObject(t, "obj change");
if (GUILayout.Button("设置摄像机位置"))
{
t.m_v3_position = SceneView.lastActiveSceneView.camera.transform.position;
t.m_v3_rotation = new Vector3(
SceneView.lastActiveSceneView.camera.transform.rotation.eulerAngles.x,
SceneView.lastActiveSceneView.camera.transform.rotation.eulerAngles.y, 0);
}
if (GUI.changed)
{
Debug.Log("changed");
EditorUtility.SetDirty(t);
if (t.gameObject.scene == null)
{
Debug.Log("不在场景里");
}
else
{
Debug.Log("在场景里");
}
}
}
}
#endif
结束语
到此就结束了这篇笔记的编写,喜欢的话请关注点赞,我会有更好的博客发出来的,尽请期待