1. 说明
当整个游戏运行起来之后,我们无法再借助鼠标来控制物体,此时可以使用脚本来更改物体的各种姿态,驱动游戏的整体运动逻辑。
2. 脚本添加
首先在Assets目录中,新创建一个Scripts文件夹,在该文件内右键鼠标选择创建脚本选项,即可创建一个脚本文件,可命名为SampleLogic,如下图:
然后,鼠标双击创建的脚本文件,即可使用visual studio打开文件,在其中进行代码编辑,简单加入一行代码:
最后,需要将这个脚本文件挂载到物体模型上,也就是当成一个组件添加到物体本身,相当于给这个脚本一个寄宿的载体。选择一个物体,在其右侧属性窗口的最下侧,直接将脚本拖放过去,如下图:
拖放成功后,会发现在其属性组件中,会多一个Script组件,当然,也可以使用Add Component为物体添加脚本文件,如下图:
点击Scene窗口上方的运行按钮后,即可运行游戏,同时脚本也会被运行,再次点击此按钮,会结束运行,如下图:
C#脚本文件名必须和类名保持一致,否则无法挂载到物体上,若要修改类名,需要在Visual Studio中对类名进行修改。
3. 脚本中获取当前物体
若想通过脚本挂载方式控制当前物体的运动,那么需要在脚本中先获取到这个物体,然后再写代码对这个物体的相关属性进行设置,可以使用gameObject来获取,详见代码注释:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SampleLogic : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
Debug.Log("** 开始测试.... **");
GameObject obj = this.gameObject;//获取当前物体本身(this代表当前脚本组件)
string name = this.gameObject.name;//获取当前物体的名称
Debug.Log("当前物体名称为:" + name);
Transform tr = this.gameObject.transform;//获取当前物体的transform组件
Vector3 vec = tr.position;//获取当前物体的坐标
float posX = tr.position.x;//获取当前物体的x坐标值
float posY = tr.position.y;//获取当前物体的y坐标值
float posZ = tr.position.z;//获取当前物体的z坐标值
Debug.Log("物体当前坐标为:" + vec + " " + "X:" + posX + "Y:" + posY + "Z:" + posZ);
}
// Update is called once per frame
void Update()
{
}
}
4. 物体坐标
transform.position --> 世界坐标
transform.localPosition --> 本地坐标***(一般使用这个)***,localPosition的值就是在属性窗口中设置的值
一般获取物体的坐标有两种方式:
①:this.gameObject.transform.position
②:this.transform.position(简化版)
对物体的坐标进行设置:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SampleLogic : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
this.transform.position = new Vector3(1.0f, 1.5f, 1.0f);
}
// Update is called once per frame
void Update()
{
}
}
5. 脚本解释
从上面的代码中可以看到,一个脚本包含两个基本的函数,一个是***start()函数,一个是update()***函数
start():游戏运行起来后,此函数只执行一次,就是游戏刚启动时被执行
update():游戏运行后,每更新一下画面,该函数就会被执行一次。可以为unity设置帧率,让其以一定的速率更新画面
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SampleLogic : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
Application.targetFrameRate = 60;//设定帧更新速率
}
// Update is called once per frame
void Update()
{
}
}