首页 > 代码库 > 编辑模式下,控制对象移动
编辑模式下,控制对象移动
有时候我们可能会有这样的需求,就是在编辑模式下,控制移动场景中的物体,这里面有两个点要解决:
(1)怎么在编辑模式下运行一个脚本;
(2)怎么有效地响应鼠标按键。
第一个问题可以使用编辑器属性ExecuteInEditMode让脚本在编辑模式也能实时地更新。下面的代码用来控制物体的移动,并且可以在编辑模式下运行:
using UnityEngine;using System.Collections;#if UNITY_EDITORusing UnityEditor;#endif[ExecuteInEditMode]public class MoveComponent : MonoBehaviour{ private CharacterController controller; private float speed = 3f; private float rotateSpeed = 50f; public void Init() { controller = transform.GetComponent("CharacterController") as CharacterController; if (controller == null) Debug.Log("CharacterController not add!"); } public void MoveForward() { if (controller == null) return; controller.Move(Time.fixedDeltaTime * transform.forward * speed); } public void MoveBack() { if (controller == null) return; controller.Move(-Time.fixedDeltaTime * transform.forward * speed); } public void TurnLeft() { if (controller == null) return; transform.Rotate(Vector3.up, -Time.fixedDeltaTime * rotateSpeed); } public void TurnRight() { if (controller == null) return; transform.Rotate(Vector3.up, Time.fixedDeltaTime * rotateSpeed); }}
第二个问题的解决方法是使用EditorWindow的OnGUI来响应KeyDown消息,下面的代码通过创建一个测试物体,并为其添加MoveComponent来让其移动:
using UnityEngine;using UnityEditor;using System.Collections;#if UNITY_EDITORusing UnityEditor;#endifpublic class CameraHelperEditor : EditorWindow{ public static CameraHelperEditor window = null; [MenuItem("MyEditor/CameraHelperEditor")] public static void ShowWindow() { window = EditorWindow.GetWindow(typeof(CameraHelperEditor), false, "CameraHelperEditor") as CameraHelperEditor; } private const string Prefab = "Test/Cube"; private GameObject player = null; private MoveComponent moveComp = null; void OnGUI() { if (GUILayout.Button("Init")) { player = GameObject.Instantiate(Resources.Load(Prefab)) as GameObject; player.AddComponent("CharacterController"); moveComp = player.AddComponent("MoveComponent") as MoveComponent; moveComp.Init(); } switch (Event.current.type) { case EventType.keyDown: { if (Event.current.keyCode == KeyCode.W) { Debug.Log(Time.deltaTime); Debug.Log(Time.fixedDeltaTime); moveComp.MoveForward(); } else if (Event.current.keyCode == KeyCode.S) { moveComp.MoveBack(); } else if (Event.current.keyCode == KeyCode.A) { moveComp.TurnLeft(); } else if (Event.current.keyCode == KeyCode.D) { moveComp.TurnRight(); } } break; } } void OnDestroy() { if(player != null) { GameObject.DestroyImmediate(player); player = null; } moveComp = null; }}
可以看到按键消息的响应都是放在OnGUI里面处理的。
对于该问题的解决我相信还有更好的方法,希望伙伴们能够留言给予指点。
编辑模式下,控制对象移动
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。