Unity 是实时3D互动内容创作和运营平台。
使用Unity前我们需要先了解这个游戏引擎。
Unity官网
使用Unity开发的软件:
原神
王者荣耀
明日方舟
使命召唤手游
炉石传说
百度百科
Unity 用户手册
游戏技术与游戏设计互相促进:技术为设计带来可能性的空间,设计指导者技术的发展方向。
本章主在让读者体会脚本编程的思路和整体方法。
本节将详细讲解创建脚本、改变物体位置、处理用户输入等基本操作。
void Update(){
tansform.Translate(0,0,0.1f);
tansform.position += new Vector3(0,0,0.1f);
}
void Update(){
tansform.Translate(0,0,5*Time.deltaTime);
tansform.position += new Vector3(0,0,5*Time.deltaTime);
}
代码中5表示速度,上述代码的改进原理基于:距离 = 速度 ✖ 时间 。两帧画面之间的变化基于两帧之间间隔的时间Time.deltaTime。要记住Updata函数是每帧执行。 void Update()
{
float v = Input.GetAxis("Vertical");
float h = Input.GetAxis("Horizontal");
Debug.Log("当前输入 纵向:" + v + "横向:" + h);
transform.position += new Vector3( h*speed, v * speed, 0);
}
Input.GetAxis返回取值范围为[-1,1]的float类型值。若传入参数"Vertical"表示返回沿纵轴的输入,传入参数"Horizontal"表示返回沿纵轴的输入。上述代码可能存在问题,那就是针对帧率不同按键后小球速度不一致,所以应再乘以Time.deltaTime。 using UnityEngine;
public class SphereScript : MonoBehaviour
{
public float speed = 10;
// Start is called before the first frame update
void Start()
{
Debug.Log("组件执行开始函数!");
gameObject.GetComponent().material.color = Color.red;
transform.position = new Vector3(0, 0, 5f);
}
// Update is called once per frame
void Update()
{
float v = Input.GetAxis("Vertical");
float h = Input.GetAxis("Horizontal");
Debug.Log("当前输入 纵向:" + v + "横向:" + h);
transform.position += new Vector3( h * speed * Time.deltaTime, v * speed * Time.deltaTime,0);
}
}
值类型 | 脚本中 | 未运行时Inspector窗口中 | 运行时Inspector窗口中 |
---|---|---|---|
作用时间 | 脚本创建后 | 永久 | 运行中 |
创建脚本时设置了公开(public)变量,则其代码中的初始值会生效。
当运行时,在Inspector窗口对脚本中的public变量进行修改,会在当次运行的以后时间里生效。
当未运行时,在Inspector窗口对脚本中的public变量进行修改,会在当前Unity 项目窗口中生效。退出项目窗口时若选择Save保存,则其值会在项目中生效。
以上内容意味着:
当创建完脚本后,每一次修改脚本中的值,但在Unity 项目中不会生效。
当游戏运行中,修改变量,游戏结束后修改的值不会保存。(若在游戏中时事调整参数,对需要保存的数据应以记录)
当游戏未运行时,修改变量,以后每一次运行值都会生效。如果退出项目窗口时保存,则下一次打开项目窗口也会生效。
触发器是一个组件,它定义了一个范围。当其他带有碰撞体组件的物体进入了这个范围时,就会产生一个触发事件。脚本捕捉到这个事件的时候,就可以做出相应的处理。
Unity 中,触发器和碰撞体共用了同一组件:Collider,实际上两者是不同的概念。创建一个Cube,它自带一个碰撞器,在Inspector窗口勾选Box Collider面板中的 Is Trigger 选项,碰撞体就变成了同样外形的触发器。对小球和Cube都添加一个Rigibody(刚体)组件,勾选组件中的 Is Kinematic(动力学)选项,若不勾选物体会一直下落。
碰撞和触发总是发射在两个物体之间,所以根据不同情况,可以选择其中一个物体进行碰撞或者触发的处理。给Cube添加一个脚本,并且脚本内容如下。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Coin : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
private void OnTriggerEnter(Collider other)
{
Debug.Log(other.name + "碰到了我");
}
}
运行游戏,在场景中拖拽球体,让它和立方体接触,就可以看到碰撞出发信息了。
文中内容引用或参考《Unity3D脚本编程与游戏开发》马瑶-沈琰