unity3d入门教程三

embedded/2024/12/22 9:00:31/

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 updatevoid 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 framevoid Update(){transform.Translate(0, speed * Time.deltaTime, 0);}
}

http://www.ppmy.cn/embedded/111634.html

相关文章

JS设计模式之装饰者模式:优雅的给对象增添“魔法”

引言 在前端开发中&#xff0c;我们经常会遇到需要在不修改已有代码的基础上给对象添加新的行为或功能的情况。而传统的继承方式并不适合这种需求&#xff0c;因为继承会导致类的数量急剧增加&#xff0c;且每一个子类都会固定地实现一种特定的功能扩展。 装饰者模式则提供了…

Java 是值传递还是引用传递,又是怎么体现的?

一、基本概念 值传递是指在方法调用时&#xff0c;将实际参数的值复制一份传递给方法的形式参数。对形式参数的修改不会影响实际参数的值。 引用传递则是将实际参数的引用&#xff08;内存地址&#xff09;传递给方法的形式参数&#xff0c;在方法中对形式参数所指向的对象进…

PhpStudy下载安装使用学习

一、官网下载 官网地址&#xff1a;Windows版phpstudy下载 - 小皮面板(phpstudy)https://old.xp.cn/download.html 【首页】选择Windows版&#xff0c;进行下载 下载完成是一个压缩包的形式&#xff0c;解压得到一个.exe的执行文件&#xff0c;点击执行安装程序&#xff08;注…

【中国国际航空-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

94 、k8s之rbac

一、rbac----安全机制 赋权机制 集群是按照用户名进行登录&#xff0c;按照项目名称进行命名空间的分类。 配电云主站------62天 8个人 高温补贴 一主2从 user pdyzz pdyzz -n pdyzz 资源空间 pod数量 1.1、k8s的安全机制&#xff1a; apiserver------>集群内和外…

学习Vue3的第五天

目录 API对比 shallowRef 与 shallowReactive 对比总结 使用场景 总结 readonly 与 shallowReadonly 对比总结 使用场景 总结 toRaw 与 markRaw 对比总结 使用场景 总结 customRef 应用场景 总结 示例&#xff1a;异步数据获取 Vue3新组件 Teleport Suspen…

【基础算法总结】前缀和

目录 一&#xff0c;前缀和算法介绍二&#xff0c;算法原理和代码实现【模板】前缀和【模板】二维前缀和724.寻找数组的中心下标238.除自身以外数组的乘积560.和为k的子数组974.和可被k整除的子数组525.连续数组1314.矩阵区域和 三&#xff0c;算法总结 一&#xff0c;前缀和算…

如何利用 CSS 渐变实现多样化背景效果

前言 总在平常看到像这样的图片 背景是如何实现的呢 背景效果的多样性和美观性直接影响用户体验。CSS 渐变为设计师提供了一种强大且灵活的方法来创建引人注目的背景。渐变是颜色之间平滑过渡的效果&#xff0c;通过调整渐变类型和设置&#xff0c;你可以轻松实现从简单到复杂…