美文网首页
18072408 脚本基础2

18072408 脚本基础2

作者: 伊才妮 | 来源:发表于2018-08-04 13:21 被阅读0次

0724
视频:8 脚本基础2

- 学习代码的方法

  • 类似小时候学习写文章的思路 类比
学习代码的方法.png
  1. 单独的字就是 代码中的关键字


    单独的字.png
  2. 如何学习写句子呢 目的是实现一定的目的和功能


    写语句.png
  3. 多个句子组成的特定的段落 同写句子 就是在句子的基础上组织语言


    段落.png
  4. 文章 主题 单个代码文件


    写文章.png
  5. 写书 或者专栏 系统


    工程.png

- 要点复习串讲

08串讲.png

- 变量

  1. 声明 赋值


    变量.png
  2. 基本类型


    变量的基本类型.png

    1.自定义类型


    自定义类型.png

- 表达式

表达式.png
  • 比如数学的表达式

  • 不能作为单独的语句存在 前面需要一个变量接收

  • 强制转换的方式

    float a = (float)3.14 + 10;
    
  • 其中(float)就是强制转换

    float b = 10;
    
  • 这个不会报错 低转高可以转换

- 方法

方法.png
  • 去完成一件事 方法类型 方法名 参数 花括号 返回值
  • 方法中返回的结果要与方法返回值的类型一致
  • 方法的使用需要传参数 并可以定义一个变量来接收这个结果 也可以之间调用方法不接收返回值

- 语句

语句.png

- 判断语句

判断语句if.png
  • if()里面可以是表达式也可以是bool类型的变量


    判断语句 逻辑表达式.png

- 注释

注释.png

- Unity相关API

  • 脚本本身与挂在物体上的关系是 由一个虚的东西变成一个实例 或者说由一个抽象的东西变成一个具体的


    API.png

- 实战1 如何改变物体的颜色

1. 需求分析 逻辑

改变颜色 需求.png
2. 解决途径
  • 思路和步骤 语言的转换


    解决途径.png
  • 搜索加上unity
  • 在博客里找到关键点 去官方文档查使用方法 文档里有实例 最好看英文


    搜索.png

OnMouseEnter举例

索引 第一次.png
看文档中的代码示例
了解细节.png
层的应用
  1. 相机
    culling mask 可以识别不同的层 让其显示

  2. 同理 light中的culling mask 也可以进行筛选 如果不筛选 就受不到光照

  3. scene本身可以进行层的筛选

如何修改物体的颜色

改变颜色通过材质.png

脚本中进行实现

  1. 新建脚本 托给 新建的物体 利用之前查找到的方法 unity自身提供的方法 检测到鼠标移动到相应的物体上可以进行执行一些语句

    private void OnMouseEnter()
    {
     
    }
    
    private void OnMouseExit()
    {
      
    }
    
  2. 获取组件的语句 尖括号中是获取的组件的名称 通过“.”可以进行获取相应组件里的东西 在进行赋值

    GetComponent<MeshRenderer>().material.color = Color.yellow;
    
  3. 移开的时候怎么处理呢 先定义一个初始的颜色 变量 定义在哪个花括号内 就只能在某个大括号内调用

    Color OldColor;
    
  4. 然后在一开始时给前面的变量赋值 相当于修改 把所挂代码的游戏对象的颜色赋给这个变量

    OldColor = GetComponent<MeshRenderer>().material.color;

  5. 这样在鼠标离开物体的方法里就可以让颜色复原

     private void OnMouseExit()
        {
            GetComponent<MeshRenderer>().material.color = OldColor;
        }
    
  6. 当然也可以重新变一个颜色 和前面的Color.yellow一样

  7. 优化点 多次用到了 GetComponent<MeshRenderer>() 可以定义一个MeshRenderer类型的变量 将这个组件缓存下来

    MeshRenderer _renderer;
    
  8. 在start方法里就把多次用到的组件赋值给这个变量 前面所需要调取组件的地方都可以替换为_renderer 这个变量

     _renderer = GetComponent<MeshRenderer>();
    

- 实战2 吃药回血

  1. 首先新建场景 PlayerCure 然后新建一个空物体 并给它添加脚本

写代码前需要 理清思路和逻辑

吃药回血.png

需求分析

需求分析.png
  • 角色血量
    角色血量.png
  1. 定义变量 可以在Inspector中设置 说明是一个公开类型的的变量 游戏中常叫生命值为Hp 对于一个int类型的变量 如果不赋值 默认为0 这里给它赋值为100

    public int Hp=100;
    
  2. 因为在外面可以修改 如果变量有一个最大值 为了防止误操作 超过了最大的值 可以用一个判断进行避免

  3. 在start方法里 进行判断 如果超过最大值 再赋一次值 这样就限制了最大血量

    if (Hp > 100) {
               Hp = 100; 
           }
    
  • 能量详解
    能量详解.png
  1. 能量可以理解为可以持续回血的一个状态 可以是一种恢复的必要条件 就是为了回血而设置的

  2. 初始能量为0

  3. 满能量为100

  4. 同血量一样 进行定义 不需要赋值 因为默认为0

    public int Energy;
    
  5. 为了实现每三秒掉一点能量 需要一个计时器 那么我们知道 update 是每帧调取一次 可以理解为每帧去渲染一次 每一次渲染的时间就可以用Time.deltaTime来表示

  6. 定义一个可以记录时间的变量 初始设为0

    float _energyTimer=0;

  7. 如何记录呢 在update方法里 让它等于它加上每帧渲染的时间 相当于把每帧刷新的时间累加起来 也可以用+=来表示 要知道 计时的前提也是能量本身大于0 所以要在条件内进行执行

    void Update () {
      
    if (Energy > 0) {
             _energyTimer= _energyTimer+Time.deltaTime;
         }
    }
    
  8. 根据需求需要对能量值随着时间进行减少 但得有个前提就是 能量大于0 才会减少 因为能量不会是负的 所以在条件内

    if (Energy > 0) {
             _energyTimer= _energyTimer+Time.deltaTime;
     }
    
  9. 如何实现每隔三秒就执行减血的语句呢 可以用一个条件 判断前面的能量计时器的时间大于等于3 就执行 同时还需要将计时器重置成0 这样每刷新大于等于3秒就可以执行 减能量的语句

     if (_energyTimer >= 3) {
             Energy -= 1;
             _energyTimer = 0;
         }
    
回血.png
  1. 举例 当能量在1-20之间时 每8秒 血量增加1 后面的自己完善

  2. 同前面每三秒减少能量值一样 也需要一个计时器 用来计算能量提供回血的时间

    float _energyHpTimer;
    
  3. 首先回血的前提是能量大于0 所以还是在之前的>0的条件内去写 和前面一样进行加等于

     _energyHpTimer += Time.deltaTime;
    
  4. 进行回血的条件判断 并将计时器归0

    if (_energyHpTimer >= 8) {
             //todo根据能量值回血
    
             _energyHpTimer = 0;
         }
    
  5. 根据能量回血 也是判断 1-20 就是能量小于等于20时进行回血

    if (Energy <= 20) {
    
                 Hp += 1;
             }
    
  6. else 进行除了上面的情况以外其他情况下进行执行的语句 它也可以加if 进行再次判断 并列把所有不符合第一个if的条件下的其他条件

    if (Energy <= 20)
             {
                 Hp += 1;
             }
             else if (Energy <= 60) {
                 Hp += 2;
             }
             else if (Energy < 90) {
                 Hp += 3;
             }
             else {
                 Hp += 4;
             }
    
  7. 那么如果在加血量的过程中超过了100怎么办 为了保证最大血量为100 进行一个判断 并赋值为100

    if (Hp > 100)Hp = 100;   
    
  8. 做一个优化 当血量小于100时才会去回血 在最前面补一下

     if (Hp < 100) { 
         _energyHpTimer += Time.deltaTime;
             //每8秒回血
             if (_energyHpTimer >= 8)
             {
                 //todo根据能量值回血
                 if (Energy <= 20)
                 {
                     Hp += 1;
                 }
                 else if (Energy <= 60)
                 {
                     Hp += 2;
                 }
                 else if (Energy < 90)
                 {
                     Hp += 3;
                 }
                 else
                 {
                     Hp += 4;
                 }
                 if (Hp > 100) Hp = 100;
                 _energyHpTimer = 0;
             }
         } 
    
  9. 此时update方法里内容有些多不利于后面代码的书写 可以自定义一个能量跟新的方法 这样在update中就只用一句话就可以代替了 有种封装的意思

    void Update () {

        EnergyUpdate();
    }
    
  10. 调用方法时需要加上小括号 方法是一系列语句的一个集合

  • 按键1-6
    按键1-6.png
  1. 同理 为了整洁 也可重新定义一个方法进行直接调用

    KeyUpdate();
    
  2. 然后在方法里进行实现其不同功能 需要用if条件

  3. 如何在条件中获取键盘的数字 固定的方法 按下键的整个过程

      private void KeyUpdate()
        {
            if (Input.GetKeyDown(KeyCode.Alpha1)) {
    
         }
    }
    
  4. 然后对应按下字母上方的数字1后 有一个绷带的效果 可以再定义一个绷带的方法 在这个条件里只需要调用就好啦

      private void KeyUpdate()
       {
        if (Input.GetKeyDown(KeyCode.Alpha1)) {
         UseBandage();
        }
    }
    
      private void UseBandage()
      {
        Hp += 10;
      }
    
  5. 同时绷带有个限制就是最高只能到75的血

    if (Hp > 75) Hp = 75;
    
  6. 当血量大于75 是无法使用绷带的 可以给一个提示 进行return 就是进行返回 后面的就不执行

    if (Hp > 75) {
         Debug.Log("无法使用绷带");
             return;
     }
    
  • 按键0
    按下0.png
  1. 因为暂时没有场景和界面 增加一个小功能就是 想受虐的时候按下0 会损失一定血量 随机掉学

  2. 定义一个方法 在update中调用

    BeFight();
    
  3. 当按下0键 同理 如何随机 定义一个可以容纳随机数值的变量 Random.range有两个重载方法

    private void BeFight()
    {
     if (Input.GetKeyDown(KeyCode.Alpha0)) {
    
     }
    

    }

  4. 下面执行的语句就是随机生成一个随机数 并让血量进行变化

     if (Input.GetKeyDown(KeyCode.Alpha0)) {
         int damage = UnityEngine.Random.Range(0, Hp);
         Hp -= damage;
         Debug.Log("你被打了,现在的血量是:" + Hp);
     }
    

思路分析

思路分析.png
  1. 相应的地方可以加上debug 进行提示 在没有UI的情况下

视频索引

  • 文档细节OnMouseEnter如何检查光标落在物体上 举例讲解
    视频 00:38:00——00:45:00
  • 如何修改物体的颜色
    视频 00:46:00——00:48:00
  • highlight新建脚本 并保存场景
    视频 00:49:00——01:04:00
  • 吃药回血
    视频 01:14:00——02:13:00
  • 答疑
    视频 02:14:00
  • time.deltatime
    视频 02:22:00

作业

  • 完善代码

相关文章

  • 18072408 脚本基础2

    0724视频:8 脚本基础2 - 学习代码的方法 类似小时候学习写文章的思路 类比 单独的字就是 代码中的关键字单...

  • 脚本循环基础(2)

    循环控制语句continue 用于循环体中 continue [N]:提前结束第N层的本轮循环,而直接进入下一轮...

  • Pyorint 中 OGM使用

    基础数据: 测试脚本 1: 定义一个对应存储结构的class Animal output: 测试脚本2: outp...

  • Gradle脚本基础全攻略

    Groovy脚本基础全攻略Gradle脚本基础全攻略

  • 第1次课-Shell脚本语言-第1讲

    进入Shell语言基础学习? 1、第一个Shell程序? 2、Shell脚本语法->注释? 3、Shell脚本语言...

  • Fabric01-1

    一:shell脚本基础 1.shell命令 : 在linux终端能够被解析出来的命令2.shell脚本 : 多个s...

  • 流畅的Python(Fluent Python)

    为了夯实自己的python基础,已经看了2周fluent python。今天终于上手编写了点脚本。 本次脚本主要测...

  • selenium2+Python--学习进阶路线图

    selenium2+python 自动化测试知识储备: 1. Python:脚本编程基础。 2. Selenium...

  • Linux Shell: 各种tips

    通用Linux中执行shell脚本的4种方法总结hbase shell基础和常用命令详解 2.字符串Shell脚本...

  • 常用的shell脚本记录

    主要记录《Linux Shell 脚本攻略》一书很使用的脚本命令,以备用! 基础入门命令 1、获取字符串长度 2、...

网友评论

      本文标题:18072408 脚本基础2

      本文链接:https://www.haomeiwen.com/subject/jteuvftx.html