当前位置: 首页 > article >正文

unity3d入门教程三

unity3d入门教程三

  • 8.1游戏脚本
  • 8.2脚本的使用
  • 8.3认识脚本组件
  • 8.4帧率
  • 9.1游戏脚本
  • 9.2获取节点和组件
  • 9.3MonoBehaviour
  • 9.4父节点与子节点
  • 9.5组件的属性
  • 9.6脚本的单步调试

8.1游戏脚本

通过程序控制对象属性(如运动,修改transform的位置属性)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.2脚本的使用

在这里插入图片描述

1 新建脚本 Hello.cs ,编辑代码 ,保存一下
在里面写入一个简单的输入输出代码,并且保存
在这里插入图片描述

2 把脚本挂载到游戏对象
Add Component | Scripts | …

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.3认识脚本组件

在这里插入图片描述

要注意将VS2019与unity进行关联
https://www.jb51.net/article/192667.htm

双击时才会自动打开2019
在这里插入图片描述
在这里插入图片描述

Update()每帧调用,每秒大概调用几十次
在这里插入图片描述

Debug.Log("这是我的第一个游戏");
Debug.Log("In Update() ... " + Time.deltaTime);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

游戏启动时,有场景,有对象,肯定先创建游戏对象,对象下的组件创建,如脚本组件创建,脚本中类的实例化但没有最先执行,接着执行start,再按照帧率时间调用update方法更新游戏显示。

在这里插入图片描述

8.4帧率

在这里插入图片描述

Unity更新频率是不固定的
在这里插入图片描述
在这里插入图片描述

Debug.Log("这是我的第一个游戏");
Debug.Log("In Update() ... " + Time.deltaTime);

在这里插入图片描述

每次间隔是不相等的,unity是尽快进行刷新游戏,无法以固定帧率运行,但可以使其尽量在某个帧率运行

显式设定帧率:
Application.targetFrameRate = 60;
要求 Unity 引擎尽量以此帧率运行 ,但实际帧率还是会有偏差
在这里插入图片描述

还是设置一下,使其消耗资源小一些
在这里插入图片描述

this.transform.Translate(0, 0.05f , 0); (x,y,z)f表示一个单位
其中,
this.transform 即当前游戏对象的 transform组件
Translate() 调整相对位移
在这里插入图片描述
在这里插入图片描述

此时运行小飞机就动了
在这里插入图片描述

float step = 0.8f * Time.deltaTime;(慢速)

float step = 1.2f * Time.deltaTime;(快速)

但是运动速度不够均匀,优化如下
此时无论间隔大小都可以匀速显示
在这里插入图片描述
在这里插入图片描述

9.1游戏脚本

在这里插入图片描述

https://unity.cn/

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

此文档是辅助手段

9.2获取节点和组件

使用API获取游戏对象和组件

在脚本里操作游戏对象
在这里插入图片描述

This是当前myjet组件,此组件挂载到当前游戏对象gameObject上

this.gameObject就是游戏对象,可以获取其下的组件
在这里插入图片描述

例如,获取 Sprite Renderer 组件

SpriteRenderer renderer = this.GetComponent<SpriteRenderer>();

也可以写作:

this.gameObject.GetComponent<…>( ) ,Unity内部作了封装

在这里插入图片描述

void Start()
    {
        //SpriteRenderer renderer = this.gameObject.GetComponent<SpriteRenderer>();
        //将上方简化为下也是可以的,两者相等
        SpriteRenderer renderer = this.GetComponent<SpriteRenderer>();
        //在当前游戏对象下寻找SpriteRenderer组件
        renderer.flipY = true;
}

演示:添加一个脚本,将小飞机图片翻转。。

在这里插入图片描述
在这里插入图片描述

按名字来获取节点

GameObject obj = GameObject.Find("/path/of/target");

再获取它下面的组件

SpriteRenderer comp = obj.GetComponent<SpriteRenderer>();

在这里插入图片描述

SpriteRenderer renderer = this.gameObject.GetComponent<SpriteRenderer>();
        将上方简化为下也是可以的,两者相等
        //SpriteRenderer renderer = this.GetComponent<SpriteRenderer>();
        在当前游戏对象下寻找SpriteRenderer组件
        //renderer.flipY = true;

        //获取其他节点
        GameObject obj = GameObject.Find("/Other/22");
        SpriteRenderer renderer = obj.GetComponent<SpriteRenderer>();   //获取该节点的组件
        renderer.flipY = true;  //进行上下翻转

在这里插入图片描述
在这里插入图片描述

9.3MonoBehaviour

在这里插入图片描述
在这里插入图片描述

9.4父节点与子节点

如何获取父节点和子节点使用代码
在这里插入图片描述
在这里插入图片描述

示例1 :获取‘小飞机’的父节点

GameObject  parent = this.transform.parent.gameObject;

在这里插入图片描述

//获取父节点
        GameObject parent = this.transform.parent.gameObject;
        Debug.Log("小飞机的父节点是:" + parent.name);

在这里插入图片描述
在这里插入图片描述

可以对transfom进行枚举操作得到其节点下的所有子节点
在这里插入图片描述

  void Start()
    {
        //遍历当前对象transform下所有的子节点
        foreach (Transform child in transform)
        {
            Debug.Log("子节点:" + child.name);
            //child.position += Vector3.up * 10.0f;
        }
    }

在这里插入图片描述
在这里插入图片描述

 void Start()
    {
        遍历当前对象transform下所有的子节点
        //foreach (Transform child in transform)
        //{
        //    Debug.Log("子节点:" + child.name);
        //    //child.position += Vector3.up * 10.0f;
        //}

        //得到小飞机节点,要转移的目标节点
        GameObject obg1 = GameObject.Find("飞机");
        GameObject target = GameObject.Find("物体");

        //将目标节点作为小飞机的子节点
        obg1.transform.SetParent(target.transform);
}

保存运行代码时

在这里插入图片描述

在这里插入图片描述

如何将其挂载到根节点下面,

 void Start()
    {
        遍历当前对象transform下所有的子节点
        //foreach (Transform child in transform)
        //{
        //    Debug.Log("子节点:" + child.name);
        //    //child.position += Vector3.up * 10.0f;
        //}

        //得到小飞机节点,要转移的目标节点
        GameObject obg1 = GameObject.Find("飞机");
        GameObject target = GameObject.Find("物体");

        将目标节点作为小飞机的子节点
        //obg1.transform.SetParent(target.transform);

        //挂载到场景根节点下面
        obg1.transform.SetParent(null);
}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

运行起来的层级窗口transform属性等数据是实时的,而未运行时显示的是未运行的状态

   this.transform.position = new Vector3(1.5f, 1.5f, 0);//移动当前节点飞机的位置,

9.5组件的属性

在这里插入图片描述

演示:给 MyJet.cs 添加几个属性
public int number = 10;
public string helloMessage = “Hi”;

在这里插入图片描述

在这里插入图片描述

之前的飞机运行速度等,若直接将属性定义在start()函数中,是写死的

若将其显示在属性器中,能在属性窗口中更改就方便了

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

9.6脚本的单步调试

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

随便在 Start() 方法里添加几行代码 ,用于演示

using JetBrains.Annotations;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class MyJet : MonoBehaviour
{
    public float speed = 1.2f;

    // Start is called before the first frame update
    void Start()
    {
        Vector3 pos = transform.localScale;
        Vector3 ratation = transform.localEulerAngles;
        Vector3 scale = transform.localScale;
        transform.position = new Vector3(0, 0, 0);
    }

    // Update is called once per frame
    void Update()
    {
        transform.Translate(0, speed * Time.deltaTime, 0);
    }
}

http://www.kler.cn/a/301255.html

相关文章:

  • 如何在项目中用elementui实现分页器功能
  • 使用 GoZero 实现读取绩效表格 Excel 并打分
  • c++数字雨实现
  • 群控系统服务端开发模式-应用开发-前端级别功能开发
  • Java项目实战II基于Java+Spring Boot+MySQL的共享汽车管理系统(源码+数据库+文档)
  • SpringBoot总结
  • 滚雪球学MyBatis-Plus(13):测试与部署
  • JAVAWeb---JavaScript
  • docker管理redis集群
  • Vue 2 中实现双击事件的几种方法
  • 【区块链通用服务平台及组件】江西省区块链应用服务开放平台 | FISCO BCOS应用案例
  • 【2024】前端学习笔记4-图像标记
  • 【机器人工具箱Robotics Toolbox开发笔记(十二)】 机器人运动轨迹规划
  • CPU调度算法之彩票调度(Lottery Scheduling)
  • 【项目案例】嵌入式Linux比较好的10+练手项目推荐,附项目文档/源码/视频
  • curl证书问题如何解决
  • 【Linux 从基础到进阶】自动化备份与恢复策略
  • JavaSE——封装、继承和多态
  • IPD变革之道内涵是什么?何以与人工智能新技术融合
  • 《机器学习》—— XGBoost(xgb.XGBClassifier) 分类器
  • 关于Spring Cloud 表达式注入漏洞——分析复现
  • 图像去噪的艺术:自适应中值滤波器的应用与实践
  • BUUCTF靶场[web][极客大挑战 2019]Http、[HCTF 2018]admin
  • mycat双主高可用架构部署-mycat安装
  • 【诉讼流程-健身房-违约-私教课-多次沟通无效-民事诉讼-自我学习-铺平通往法律的阶梯-讲解(1)】
  • vscode 如何格式化yaml