16355人加入学习
(115人评价)
Unity中级案例 - 捕鱼达人(Unity5.6.4)

制作于2017.12.14

价格 免费

矢量计算公式,ab+bc=ac,a指向c

ab-ac=ab+ca=cb,c指向b,减数指向被减数。

[展开全文]

记录踩的一个小坑

Vector.Angle返回0~180,不会为负数。

//这种写法有问题
float k = mousePos.x > transform.position.x ? Vector3.Angle(Vector3.up,  transform.position - mousePos) : Vector3.Angle(Vector3.up, mousePos - transform.position);
//这种写法ok
float k = mousePos.x > transform.position.x ? -Vector3.Angle(mousePos - transform.position, Vector3.up) : Vector3.Angle(Vector3.up, mousePos - transform.position);

[展开全文]

lv % 10 的结果为 0~9,不可能出现大于等于10的数字,后面的内容是多余的。

[展开全文]

Canvas三种模式

Screen Space-camera:

 

Screen Space-Overlay:

 

 

[展开全文]

最后的UI 金币提示器

新创一个canvas来控制层级  没设一个canvas 都要改成camera

文本框与父物体上下左右对齐

才发现改了锚点之后坐标也会改 原来是根据锚点为原点

枪口随着鼠标旋转

脚本

获取旋转 鼠标与枪口所指位置的连线的夹角

      获取鼠标位置  因为canvas有缩放 所以涉及到screentoworldpoint 把屏幕坐标转为世界坐标的方法不好在这用

UGUI有方法  拿到canvas与camera 在再update里给个变量接受传出来的坐标

        算夹角  用该方法  先获得z(旋转) 夹角正负判断  Vector3.up是该gameObjects所指向的向量

    再进行旋转 localRotation  全部放入代码库

给所有枪都挂上  拖的是90canvas

 

[展开全文]

Gun 的绘制 不用UGUI 直接拖 用sprite render 混合使用 (枪的拼接不能用同一个canvas层类来解决)

可能会特别小 直接放在外面  render 层级设100

统一使用100缩放 所有枪都用空物体归类  零件因为放在枪的子物体 所以scale是111 层级99  枪管layer98

设3号枪之前可以把2号枪先禁用掉

可以直接复制组件坐标!!!

[展开全文]

空物体归类 锚点对齐

两个button

取消滑动条按钮在游戏内的交互

[展开全文]

滑动器  锚点是根据父物体来的

UI slider 把Handle 删掉 Bg/filled area /fill alt四角拉伸

按alt按当前中心点缩放

[展开全文]

渲染顺序

1 canvas layer beside tag   逻辑 只有32个 已有官方8个

2 order in layer 0123

把canvas改成0层再创个新的90(相机模式拖了摄像机才有)

在90C下创建UI  Sprite Swap button被按下时切换图片  ctrld之后scale可能会变 记得手动set native size

才发现自适应会帮我做锚点

UGUI中空物体归类  锚点alt最大四角

倒计时制作两个文本 一个先取消勾选(整个物体的钩) 倒计时结束后再出现

[展开全文]

主场景

创建一个平面(是单面显示的 把它对着摄像机)旋转x-90  覆盖大小  去掉碰撞器 拖上材质资源

特效脚本

切换材质球图片 数组法 直接调主材质 数组索引取模轮回法来设置上限 InvokeRepeating代替update 每隔0.1f

[展开全文]

气泡特效的添加 整理 用空物体收纳时记得把空物体归零(reset)不然会影响zuo'biao

 

[展开全文]

习惯  

mode  第三个是做3Dui的  一般用第二个

image 加button  再在底下加文字 alt 全放大

加outline,shadow

[展开全文]

看不到气泡的话,在3D模式下改Z轴的值

[展开全文]

我理解的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//实现枪炮跟随鼠标移动
public class GunFollow : MonoBehaviour
{
    public RectTransform UGUICanvas;//之所以将RectTransform类型命名为画布,是因为我们需要得到坐标,有需要我们看懂代码指的是什么
    public Camera mainCamera;

    private void Update()
    {
        //本地坐标转换位世界坐标
        Vector3 mousePos;
        RectTransformUtility.ScreenPointToWorldPointInRectangle(UGUICanvas, new Vector2(Input.mousePosition.x, Input.mousePosition.y), mainCamera, out mousePos);
        //判断z轴位置的正负,分清左右
        //屏幕左下角(0,0)右上角是(width,height)
        float z;
        if(mousePos .x>transform .position.x)//鼠标点在炮塔的中线右边(按照预期炮塔向右转动)
        {
            z = -Vector3.Angle(Vector3.up, mousePos - transform.position);
            //之所以要添加 - ,是因为在炮塔的角度测试中,向右转,z轴是变成负数的
            //Vector3.Angle(Vector3.up, mousePos - transform.position),而这一句意思是炮塔向前方转动,并由炮塔所在位置指向鼠标位置。
            //Angle在API介绍文档中永远大于0而小于180,所以要在整个语句之前加上 - 再赋值给z轴。
        }else
        {
            z = Vector3.Angle(Vector3.up, mousePos - transform.position);

        }
        //子物体的旋转跟随父物体:炮塔的旋转跟随父物体2Gun,3Gun,...
        transform.localRotation = Quaternion.Euler(0, 0, z);
    }
}

 

[展开全文]

授课教师

SiKi学院讲师

课程特色

图文(1)
视频(41)
下载资料(1)