P1L1——路点和寻路
P1L1——路点和寻路
塔防游戏的敌人需要沿着固定的路线行走,因此敌人需要沿着路点进行寻路
在场景上设置一些路点,敌人会主动向路点直线移动,走到路点后就转向另一个路点移动,直到遍历所有路点
例如下面的场景,Cube需要沿着这几个路点依次进行移动:
这里的实现思路是:
所有的路点被一个父对象管理,路点父对象挂载一个获取节点位置和节点数量的脚本Path
Cube挂载寻路脚本PathFind,寻路脚本和路点父对象的Path关联,
通过得到的路点位置移动,到达点就切换到下一个路点,直至遍历所有路点
Path.cs
123456789101112131415161718192021222324252627282930using System.Collections.Generic;using UnityEngine;//管理所有路点,对外提供其位置,以及管理的路点数量public class Path : MonoBehaviour{ //通过列表管理各个路点 List<Transform> nodeList = new List<Tran ...
UG1SL1——编辑器模式下执行脚本
UG1SL1——编辑器模式下执行脚本
本章代码关键字
1[ExecuteAlways] //该特性会使脚本即使是编辑模式下(即使没有运行场景)也能执行
始终执行特性
[ExecuteAlways]这个特性可以让当前脚本即使是编辑模式下(即使没有运行场景)也能执行
123456789[ExecuteAlways] //这个特性可以让当前脚本即使是编辑模式下(即使没有运行场景)也能执行public class Lesson_ExecuteAlways : MonoBehaviour{ private void OnGUI() { print("OnGUI"); }}
UG1L10——GUILayout
UG1L10——GUILayout
本章代码关键字
1234567891011121314GUILayout //由它绘制的UI控件会自动布局,由它绘制的GUILayout.BeginArea() //确定自动布局的位置和可见范围GUILayout.EndArea() //一定是与GUILayout.BeginArea()成对出现!将需要确定自动布局的位置和可见范围的部分包裹起来GUILayout.BeginHorizontal() //使控件横向布局GUILayout.EndHorizontal() //一定是与GUILayout.BeginHorizontal()成对出现!将需要横向布局的UI绘制部分代码包裹起来//下面的函数都可以传入到GUILayout的UI控件绘制参数内,原来控制控件的样式GUILayout.Width() //控件的固定宽GUILayout.Height() //控件的固定高GUILayout.MinWidth() ...
UG1L9——GUISkin
UG1L9——GUISkin
本章代码关键字
12345GUI.color //GUI全局着色颜色GUI.contentColor //文本着色颜色GUI.backgroundColor //背景着色颜色GUISkin //可以关联GUISkin文件,赋值给GUI.skinGUI.skin //设置修改默认的GUI控件样式,即不传入GUIStyle的UI控件的绘制都会有影响
全局颜色
GUI.color是全局的着色颜色,影响背景和文本颜色,包括对style的影响,可以再该改回去
GUI.contentColor是文本着色颜色(受到全局着色指令的影响 会与全局颜色做乘法)
GUI.backgroundColor是背景着色颜色(受到全局着色指令的影响 会与全局颜色做乘法)
1234567891011121314151617GUIStyle style;private void OnGUI(){ //全局的着色颜色 影响背景和文本颜色 包括 ...
UG1L8——窗口相关
UG1L8——窗口相关
本章代码关键字
123GUI.Window() //绘制窗口GUI.ModalWindow() //绘制模态窗口,可以让该窗口以外的其他可见控件不再有用GUI.DragWindow() //可拖动窗口
窗口
第一个参数是是窗口的唯一ID,不要和别的窗口重复!如果窗口id相同,则上一个窗口会被顶掉
第二个参数是用于绘制窗口用的委托函数,要参数为int无返回值的函数,传入的参数是窗口的ID
第三个参数是窗口的标题
不同窗口调用相同委托参数,委托函数可以传入窗口的id来做不同的处理,如果窗口id相同,则上一个窗口会被顶掉
123456789101112131415161718192021222324252627private void OnGUI(){ //第一个参数 id 是窗口的唯一ID 不要和别的窗口重复 //第二个参数 是用于 绘制窗口用的委托函数 传入即可 //第三个参数 是窗口的标题 GUI.Window(1, new Rect(100, 100, 200, 150), DrawWindow ...
UG1L7——滚动视图和分组
UG1L7——滚动视图和分组
本章代码关键字
1234GUI.BeginGroup() //开始分组,传入位置,它将决定接下来的UI控件绘制是在相对于哪个位置绘制,以及UI控件的显示的范围GUI.EndGroup() //结束分组GUI.BeginScrollView() //开始绘制滚动列表GUI.EndScrollView() //结束绘制滚动列表
分组
用于批量控制控件的位置,可以理解为包裹着的控件加了一个父对象
可以通过控制分组来批量控制被包裹控件的位置
根据分组传入的位置和尺寸,决定了接下来的UI控件绘制是在相对于哪个位置绘制,以及UI控件的显示的范围
1234567891011121314151617public Rect groupPos;private void OnGUI(){ #region 分组 /* 用于批量控制控件的位置 * 可以理解为 包裹着的控件加了一个父对象 * 可以通过控制分组来批量控制被包裹控件的位置 */ GUI.BeginGroup(gro ...
UG1L6——工具栏和选择网格
UG1L6——工具栏和选择网格
本章代码关键字
12GUI.Toolbar() //绘制一组工具栏GUI.SelectionGrid() //绘制选择网格,相比工具栏可以限制单行显示数量,达到上限就换行
工具栏
GUI.Toolbar会绘制一系列按钮作为工具栏,工具栏可以帮助我们根据不同的返回索引,来处理不同的逻辑
第二个参数传入当前索引值,第三个参数传入每个选项的名字,返回这一帧工具栏选择的选项,
因此和GUI.Toggle一样,必须要在外面声明一个int变量,用来存储当前工具栏选择了什么选项的索引
12345678910111213141516private int toolbarIndex = 0;private string[] toolbarInfos = new string[] { "选项一", "选项二", "选项三" };private void OnGUI(){ toolbarIndex = GUI.Toolbar(new Re ...
UG1L5——图片绘制和框
UG1L5——图片绘制和框
本章代码关键字
12GUI.DrawTexture() //绘制图片GUI.Box() //绘制框
图片绘制
GUI.DrawTexture用来绘制图片,与Label不同,修改它的宽高不会导致等比例缩放
第一个参数 Rect:位置大小
第二个参数 Texture:图片
第三个参数 ScaleMode:缩放模式
StretchToFill:始终填充满
ScaleAndCrop:通过宽高比计算图片,但是会进行裁剪
ScaleToFit:根据宽高比进行计算,不会拉变形,会一直保持图片完全显示的状态
第四个参数 alpha:控制图片是否开启透明通道
第五个参数 imageAspect:自定义宽高比,不填默认为0,就会使用的默认图片宽高
123456789101112131415public Rect texPos;public Texture tex;public ScaleMode mode = ScaleMode.StretchToFill;public bool alpha = tr ...
UG1L4——输入框和拖动条
UG1L4——输入框和拖动条
本章代码关键字
1234GUI.TextField() //绘制输入框,传入当前字符串和最大输入的字符串的长度,返回这一帧输入框内的字符串GUI.PasswordField() //绘制密码输入框,传入当前字符串、要用什么字符来挡住密码字符串和最大输入的字符串的长度,返回这一帧输入框内的字符串GUI.HorizontalSlider() //水平输入框,第二个参数代表当前的值,第三个和第四个分别代表最小值到最大值,返回这一帧拖动条对应的值GUI.VerticalSlider() //垂直输入框,第二个参数代表当前的值,第三个和第四个分别代表最小值到最大值,返回这一帧拖动条对应的值
输入框
普通输入
GUI.TextField是绘制输入框的方法,
第二个参数传入当前的字符串,第三个参数传入最大输入字符串的长度,返回这一帧输入框内的字符串,
因此和GUI.Toggle一样,必须要在外面声明一个string变量,用来存储当前输入框内的字符串
123456789private string inputStr ...
UG1L3——多选框和单选框
UG1L3——多选框和单选框
本章代码关键字
1GUI.Toggle() //绘制多选框,第二个参数需要传入当前是否选中的值,返回这一帧是否被选中的值
多选框
GUI.Toggle会绘制一个多选框,第二个参数需要传入当前是否选中的值,返回这一帧是否被选中的值,其余参数和其他控件差不多
因此,使用GUI.Toggle绘制的多选框,必须要在外面声明一个bool变量,用来存储多选框是否被选中的值
该变量需要传入到GUI.Toggle内,再返回给该变量,这样才能实现多选框选中的效果
1234567private bool isSel;private void OnGUI(){ //第二个参数应该用变量,而不是固定的常量 isSel = GUI.Toggle(new Rect(0, 0, 100, 30), isSel, "效果开关");}
自定义样式的显示问题
GUI.Toggle使用GUIStyle时,我们可以通过设置背景图来自定义是否选中的图标,Normal是未选中时图标,OnNormal是选中时图标
但是直 ...