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);
    }
}

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部