Unity实战技术详解

《手把手教你架构3D游戏引擎 姜雪伟著》此书讲解比较浅,而且浅的东西也不说清楚。都只是提到

向量减法:

意义是从一个点移动另一个点。

    public Transform start;
    public Transform end;
    void Update ()
    {
        Vector3 dir = (end.position- start.position).normalized;
        start.transform.position = start.transform.position + dir * 0.5f;
    }

点乘:

目的是计算向量之间的角度。 

描述: 一个向量在另一个向量的投影。点乘得到的是弧度值。如果想得到角度需要转。

一个手电筒照射两个向量

一个向量绕某一个轴旋转angle角度:

 angle= Vector2.Doc(V1, V2);

 Vector2 newVec = Quaternion.AngleAxis(angle, Vector3.back) 

叉乘:

 a×b=|a||b|sinθ   

Vector3.Cross(Vector3a,Vector3b)得到值类型是Vector3,也就是垂直于向量a和b的向量。

表述一个向量在另一个向量的哪个方位。

计算出的点乘结果>0,则和z轴同向,顺时针旋转,否则逆时针旋转。

 //计算方向盘中心点到触控点的向量
    Vector3 currVec;
    //触控点的向量
    Vector3 wheelPos;
    //后一次的操作点
    Vector3 oldVec;
    //方向盘
    public RectTransform wheelObj; 
    private void Update()
    {
        RotateWheel(wheelObj.position);
    }
    void RotateWheel(Vector3 pos)
    {
        //计算触控点的位置
        Vector3 vecWord = Vector3.zero;
        RectTransformUtility.ScreenPointToWorldPointInRectangle(wheelObj, Input.mousePosition, Camera.main, out vecWord);
        wheelPos = vecWord;

        //计算方向盘中心点到触控点的向量
        currVec = pos - wheelPos;
        //计算前后两次操作时向量的 法向量
        Vector3 normalVec = Vector3.Cross(currVec, oldVec);
        //计算两个向量的夹角
        float vecAngle = Vector2.Angle(currVec, oldVec);

        //使用“右手定则”可知,当大拇指方向指向我们时,四指方向为逆时针方向
        //当大拇指方向远离我们时,四指方向为顺时针方向
        //这里叉乘后的法向量平行于z轴,所以用法向量的z分量的正负判断法向量方向
        if (normalVec.z > 0)//和z轴同向,则顺时针转
        {
            wheelObj.transform.Rotate(Vector3.forward, -vecAngle*50);//顺时针转
        }
        else if (normalVec.z < 0)//和z轴反向,则逆时针转
        {
            wheelObj.transform.Rotate(Vector3.forward, vecAngle* 50);//逆时针转
        }
        oldVec = currVec;//赋值
    }

固定流水管线: 

  • 局部坐标是对象相对于局部原点的坐标,也是对象开始的坐标。
  • 将局部坐标转换为世界坐标,世界坐标是作为一个更大空间范围的坐标系。这些坐标是相对于世界原点的。
  • 接下来我们将世界坐标转换为观察坐标,观察坐标是指以摄像机或观察者的角度观察的坐标。
  • 在将坐标处理到观察坐标之后,我们需要将其投影到裁剪坐标上。裁剪坐标是在1.0到1.0范围内判断哪些顶点将会出现在屏幕上的。
  • 最后,我们需要将裁剪坐标转换为屏幕坐标,我们将这一过程称为视口变换(Viewport Transform)。视口变换将位于1.0到1.0范围内的坐标转换到由视口函数所定义的坐标范围内。转换的坐标将会送到光栅器中,由光栅器将其转化为片段。

换装系统

https://edu.51cto.com/course/2995.html  //51otc

Avatar换装

应用: 换装,换武器,换表情

换装原理:

方式一: 直接换mesh,但是如果是动态物体,则会出现换时动作停顿,或者方向错误。只适用于静态模型 

2D物体只需要换材质就行

 

第三章: 消息事件封装

第四章:残影

克隆出多个mesh,控制时间间隔,shader效果

实时阴影: unity自带的占资源比较大,不适用于手游。另一种方法则是 是在角色头顶放一个摄像机,渲染RT图片

第10章 MVC架构设计

https://mp.weixin.qq.com/s?__biz=MzA5NjE0NzYwNA==&mid=2650890516&idx=1&sn=1119084f5c80fb36465179b632b56017#rd

第14章 游戏开发经验分享

14.3 减小包体大小:

1.将带Alpha通道的贴图存成png,不带的存成jpg.

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Debug_horizon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值