组件与脚本

基础内容

Posted by AIaimuti on April 4, 2020

组件与脚本

组件:Component,游戏物体的组成零件。
Unity 3D就是一款“组件式”游戏开发引擎,使用各种各样的组件拼装出我们的游戏物体,最终拼接出一款完整的游戏。

1.Transform组件

Transform:变换。所有游戏物体都具备的一个组件,也是最基础的一个组件,用于存储物体的基本信息。
Position:位置;
Rotation:选择;
Scale:缩放;

组件的启用和关闭:
点击Inspector面板上相应的组件图标右侧复选项,来进行切换

2.C#脚本

1.何为脚本?

脚本:Scrpit,用于控制游戏的逻辑。
Unity 3D 主流开发语言为C#

2.管理脚本

在Assets文件夹中创建“Scrpits”文件夹,管理脚本资源。

3.创建脚本

在Assets文件夹上右键–>Create–>C# Scrpit,马上改名。
C# 脚本文件的后缀是“.cs”。
双击脚本文件,就可以调用出“代码编辑器”进行代码的展示。

4.脚本代码简介

Start()方法:当游戏运行起来,就会马上执行,且执行一次。
Update()方法:循环调用,每帧调用一次。一秒钟大概执行60次。
帧:我们的游戏画面是在不停的刷新,每刷新一次,就是一帧。

输出调试;Debug.log();

Start()和update()方法都是Unity 3D内部的“事件方法”,不需要我们人工调用,系统会自动调用和管理这些“事件方法”。

5.使用脚本

直接将脚本拖拽到Hierarchy面板上的物体上;
直接将脚本拖拽到物体的Inspector面板上;
运行游戏,脚本就会执行

6.Console面板

Console:控制台。用于输出显示游戏运行过程的调试信息。

功能按钮: Clear:清除功能,清除控制台中的信息;
Collapase:折叠功能,将相同的内容合并到一条显示,更新后面的数字;
Clear on play:运行时清除之前的内容。

键盘鼠标操作

1.获取键盘输入

相关代码

Input.Getkey(); //按下某键后,持续返回true
Input.GetkeyDown();  //按下某键的一瞬间,返回true
Input.GetkeyUp();  //抬起某键的一瞬间,返回true

返回值:bool类型
参数:KeyCode枚举(Enum)
KeyCode:键码,保存了物理按键“索引码”。

2.获取鼠标输入

相关代码:

Input.GetMouseButton(); //按下某键后,持续返回true
Input.GetMouseButtonDown(); //按下某键的一瞬间,返回true
Input.GetMouseButtonUp();  //抬起某键的一瞬间,返回true

返回值:bool类型
参数:鼠标按键索引值,0->左键,1->右键,2->中键

使用变换组件移动游戏物体

游戏物体与组件关系图如下:

所有的组件都是类:当组件挂载到物体身上后运行,引擎会自动实例化对象;我们写的脚本类是游戏物体的大脑。

1.变换组件移动物体

1.相关方法:

gameObject.GetComponent<T>(); //获取相应组件的引用,查找当前游戏物体上的某个组件,然后保存它的引用。
Tramsform.Translate(Vector3,Space); 移动物体的位置,游戏物体往某个方向移动;以自身坐标系或世界坐标系。

2.相关参数

Vector3[struct]:三维向量
向量,可以表示一个方向,也可以表示一个位置。

Space[enum]:空间
Space.Self:表示物体自身的坐标系
Space.World:表示物体所在世界的坐标系

键盘控制移动方向

使用键盘上的“W,A,S,D”来控制物体的前后左右移动。

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

public class Student : MonoBehaviour
{
    // Start is called before the first frame update
    private Transform m_Transform;
    void Start()
    {
        m_Transform = gameObject.GetComponent<Transform>();
    }

    void Update()
    {
        //m_Transform.Translate(Vector3.forward * 0.1f, Space.Self);
        if (Input.GetKey(KeyCode.W))
        {
            m_Transform.Translate(Vector3.forward * 0.1f, Space.Self);
        }
        if (Input.GetKey(KeyCode.S))
        {
            m_Transform.Translate(Vector3.back* 0.1f, Space.Self);
        }
        if (Input.GetKey(KeyCode.A))
        {
            m_Transform.Translate(Vector3.left * 0.1f, Space.Self);
        }
        if (Input.GetKey(KeyCode.D))
        {
            m_Transform.Translate(Vector3.right * 0.1f, Space.Self);
        }
    }
}