4.6路点;创建菜单

2024-03-18 02:32
文章标签 创建 菜单 4.6 路点

本文主要是介绍4.6路点;创建菜单,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在塔防游戏中,敌人是按照一条预设的路线进行行动的。

路线是由若干个路点组成的,下面为路点创建脚本PathNode.cs

在Hierachy中,新建一个空物体,然后加载PathNode.cs

/** PahtNode Definition* Created by taotao man on 2015-8-2 * brief: 路点* // 修改记录* date:* add SetA();* change GetA();*/ using UnityEngine;
using System.Collections;public class PathNode : MonoBehaviour {public PathNode m_parent;   // 父路点public PathNode m_next;  // 设置子路点public void SetNext(PathNode node)    // 设置子节点{if(m_next != null)m_next.m_parent = null;m_next = node;node.m_next = this;}// 显示路点图标public void OnDrawGizmos(){Gizmos.DrawIcon(this.transform.position, "Node.tif");}
}

第二步,在Project内的Assets目录下创建一个名为Editor的文件夹,名称是特定的记住:所有需要在编辑状态相爱执行的脚本都应当存放到这里,

它将提供一个自定义的菜单帮助我们设置路点。

/*PathTool DefinitionCreated by taotao man on 2015-9-16brief: 提供一个自定义的菜单,帮助我们设置路点//修改记录:date:add SetA();change GetA();*/ using UnityEngine;
using System.Collections;
//
<span style="color:#ff0000;">using UnityEditor;</span>public class PathTool : <span style="color:#ff0000;">ScriptableObject </span>
{static PathNode m_parent=null;[MenuItem("PathTool/Create PathNode")]// Use this for initializationstatic void CreatePathNode(){// 创建一个新的路点GameObject go = new GameObject();go.AddComponent<PathNode>();go.name = "pathnode";go.tag = "pathnode";     // 设置tagSelection.activeTransform = go.transform;    // 使该路点处于选择状态}// 菜单SetParent, 用来设置父路点,快捷键Ctrl + Q[MenuItem("PathTool/SetParent %q")]static void SetParent(){   // 若没有选中任何物体,或者选择物体数量大于1,返回if (!Selection.activeGameObject || Selection.GetTransforms(SelectionMode.Unfiltered).Length > 1)return;// 若选中的物体Tag设置为pathnodeif(Selection.activeGameObject.tag.CompareTo("pathnode")  == 0){//Debug.Log("sjt");// 保存当前选中的路点m_parent = Selection.activeGameObject.GetComponent<PathNode>();}}// 菜单SetNextChild,用来设置子路点,<span style="background-color: rgb(255, 0, 0);">快捷键Ctrl + w</span>[MenuItem("PathTool/Set Next %w")]static void SetNextChild(){if(!Selection.activeGameObject || m_parent == null)return;if(Selection.activeGameObject.tag.CompareTo("pathnode") == 0){// 设置子路点m_parent.SetNext(Selection.activeGameObject.GetComponent<PathNode>());m_parent = null;}}}

这里的代码只有在编辑状态下才可以执行。所有在这里使用的属性和函数均为static 类型。

Selection 是专门用在编辑状态模式下的一个静态类,通过它可以获取到当前选择的物体。

[MenuItem("PathTool/Set Next %q")]属性将在菜单中添加名为PathTool的自定义菜单,包括子菜单,Set Next, 快捷键为Ctrl  + q ;



第三步,在场景中清楚看见观察路点之间的连线。接下来添加代码,使得路点之间产生一条线。

先添加两个属性,

 public bool m_debug = false;     // 控制是否显示路点之间的连线public ArrayList m_PathNodes;    // 用来保存所有的路点

然后在Start()函数中调用

 [ContextMenu("BuildPath")]  //在其程序窗口的不同位置单击右键,会出现不同弹出菜单,void BuildPath()     // 将所有场景中的路点装入m_PathNodes{m_PathNodes = new ArrayList();<span style="color:#ff0000;">  // 查找所有 tag 为 pathnode 的 GameObject</span>GameObject[] objs = GameObject.FindGameObjectsWithTag("pathnode");for (int i = 0; i < objs.Length; i++){PathNode node = objs[i].GetComponent<PathNode>();m_PathNodes.Add(node);}}

继续添加OnDrawGizmos()函数

 void OnDrawGizmos() // 当m_debug为真时,显示路点之间的连线{if(!m_debug || m_PathNodes == null)return;Gizmos.color = Color.blue;foreach(PathNode node in m_PathNodes){if(node.m_next != null){<span style="color:#ff0000;">  // 画线Gizmos.DrawLine(node.transform.position, node.m_next.transform.position);</span>}}}





这篇关于4.6路点;创建菜单的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/820926

相关文章

禁止平板,iPad长按弹出默认菜单事件

通过监控按下抬起时间差来禁止弹出事件,把以下代码写在要禁止的页面的页面加载事件里面即可     var date;document.addEventListener('touchstart', event => {date = new Date().getTime();});document.addEventListener('touchend', event => {if (new

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

批处理以当前时间为文件名创建文件

批处理以当前时间为文件名创建文件 批处理创建空文件 有时候,需要创建以当前时间命名的文件,手动输入当然可以,但是有更省心的方法吗? 假设我是 windows 操作系统,打开命令行。 输入以下命令试试: echo %date:~0,4%_%date:~5,2%_%date:~8,2%_%time:~0,2%_%time:~3,2%_%time:~6,2% 输出类似: 2019_06

Windows如何添加右键新建菜单

Windows如何添加右键新建菜单 文章目录 Windows如何添加右键新建菜单实验环境缘起以新建`.md`文件为例第一步第二步第三步 总结 实验环境 Windows7 缘起 因为我习惯用 Markdown 格式写文本,每次新建一个.txt后都要手动修改为.md,真的麻烦。如何在右键新建菜单中添加.md选项呢? 网上有很多方法,这些方法我都尝试了,要么太麻烦,要么不凑效

ORACLE 11g 创建数据库时 Enterprise Manager配置失败的解决办法 无法打开OEM的解决办法

在win7 64位系统下安装oracle11g,在使用Database configuration Assistant创建数据库时,在创建到85%的时候报错,错误如下: 解决办法: 在listener.ora中增加对BlueAeri-PC或ip地址的侦听,具体步骤如下: 1.启动Net Manager,在“监听程序”--Listener下添加一个地址,主机名写计

PHP7扩展开发之类的创建

本篇文章主要将如何在扩展中创建一个对象。创建的对象的过程,其实和一个小孩出生,成长的过程有些类似。 第一步,办准生证 生孩子第一步,先办准生证。声明我要生孩子了。对象创建的时候,如何办准生证呢?只要定义一个zend_class_entry变量即可。代码如下: zend_class_entry ce; zend_class_entry 是啥?可以认为它使一个原型,定义了一些对象应该有哪些东西