用File.ReadAllText方式加载Lua文件时,Lua文件的后缀名可以直接是*.lua。方便在其他编辑器中,高亮代码关键字
用File.ReadAllText方式加载Lua文件时,Lua文件的后缀名可以直接是*.lua。方便在其他编辑器中,高亮代码关键字
攻击角度计算
创建配置文件不能直接new,需要使用
GameObjectPoolList poolList=ScriptableObject.CreateInstance<GameObjectPoolList>();
来创建
AssetDatabase.CreateAsset(pooList,"Assets/Framework/Resources/gameobjectpool.asset");
AssetDatabase.SaveAsset();
将配置文件保存至xxxx路径,使用saveAsset方法保存
token是方便客户端下次自动登录用的。本次登录成功后,服务器会给客户端一个新token。
loginDate可以用于判断下次自动登录时,token是否过期,本项目没有用到。
调试工具
2种方法。
1:将颜色在顶点着色器 或 片元着色器 中 输出出去,来验证效果。
2: 使用 Frame Debug
(Window-Analysis-Frame Debugger)
Enable:理解为截屏
顶点色在Shader中的体现
例子:
o.color = v.color;
两个摄像机融合,天空和马路融合
简单的来说就是把Prefabs拖拉到场景中 没了
ExecuteReturnIdentity()可以获取影响行的主键值。
GameObject obj = Instantiate(assetBundle.LoadAsset<GameObject>("Attack.prefab"));
GameObject obj2 = Instantiate(assetBundle.LoadAsset<GameObject>("Attack"));
后缀可加可不加,主要prefab中p小写
合批就是把能够合并的mesh合并到一起,可以降低drawcall的数量
ReactiveX是什么?
设X是一个类型,
我们可以观察一个类型的实例x,
设该实例随时间变化的状态为x1,x2,...xn,
则构成一个序列:
x1,x2,...,xn
定义为一个流,
名为ReactiveX
如此,观察x的变化,
就转化为对流ReactiveX进行操作。
x--observe->ReactiveX
Subscirbe 订阅一个流
First 得到x1
...
同理,一个系统,或其某一部分的状态,
可以定义为X,
则我们可以通过ReactiveX观察系统或
其某一部分的状态变化,
流可以声明,
流是对系统状态变化所做响应的声明,
这就是声明式编程,相对的概念是过程式编程。
在声明式编程中,变量被看成一个流,在过程式编程中,变量被看成是一个在任何给定时刻的一个特定状态。因为状态是变化的,所以你的代码就得造成变化,判断变化,操作变化。
在声明式编程中,变量被看成一个流,好吧,当时间变化时,它还是一个流。你只需要说,我要流里面的第一个,我要按第一个的值加1,得到一个新东西y,再把y的值放到另一个流里面,比如。这种对流的操作可以规范化,模型也比较直观,避免了每次都从x写起。我们lifted了,提升了,变成ReactiveX了。
设系统的全部类型的集合为setX,
对其中的每个元素进行Reactive化,
我们可以得到集合Reactive-setX,
该Reactive-setX是类型集合setX的
流操作描述。
根据需要,流还可以组合,过滤啥的。
因此,可以建立起一个系统的流层:
system
gamobject
comonents
stream layer (reactived)
discreate types
重复的代码做成工具。
需要从NuGet安装MySql.data ,用于连接数据库。
1、移动状态和攻击状态切换
距离判断:Vector3.Distance(transform.position, target.transition.position)
停止移动导航:meshNav.enabled = false
状态切换:Animator.SetBool("Attacking",true)
2、Target 切换
如果角色是敌人,则默认目标是玩家的塔
如果角色是玩家,则默认目标是敌人的塔
Context 环境 进行绑定。
dispatcher 派发器
射线部分的检测判定流程:
1,显示器
2,检查相机显示范围
3,判断射线距离
4,判断UI深度,UI的响应事件开关,UI graphic的剔除
5,射线是否在rectTransform范围内,
6,物体是否超出相机的最远切面,
7,对检测到的物体根据深度排序
被一个棋子攻击也是-delta*2,被两个棋子攻击,也是delta*2?
验证码Code暂时用不到。
解决UI和3D物体同时响应的问题。
在ColliderUI代码里面加上:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class ColliderUI : MonoBehaviour ,IPointerClickHandler{
private int _index;
// Use this for initialization
void Start () {
}
public void ChangeColor()
{
if (_index == 0)
{
GetComponent<Image>().color = Color.blue;
}
else {
GetComponent<Image>().color = Color.white;
}
_index = _index == 0 ? 1 : 0;
}
public void OnPointerClick(PointerEventData eventData)
{
ChangeColor();
// ExecuteAll(eventData);
}
public void ExecuteAll(PointerEventData eventData) {
List<RaycastResult> results = new List<RaycastResult>();
EventSystem.current.RaycastAll(eventData, results);
foreach (RaycastResult result in results) {
if (result.gameObject != gameObject)
{
ExecuteEvents.Execute(result.gameObject, eventData, ExecuteEvents.pointerClickHandler);
}
}
}
}