1.新建项目工程
2.导入资源包
在asset文件夹右键-导入包-自定义包
3.导入地图到3D窗口中
这时候各种不同的物体都是已经提前建好的,我们只需完成一些物体的移动即可
4.新建脚本文件
在asset文件夹右键新建文件夹script,文件夹里面存放的是c#脚本文件。
5.将新建好的playe脚本文件挂载到player的物体上
6.更改player人物的标签名,可以方便在脚本文件里面通过标签名进行获取
7.编写player脚本文件代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class player : MonoBehaviour
{
//让玩家移动
private float x;
private float z;
private Vector3 vector;
// Start is called before the first frame update
void Start()
{
}
private float boomTime = 2f;
public GameObject boomObj;
private void Update()
{
x = Input.GetAxis("Horizontal");
z = Input.GetAxis("Vertical");
//按下r键之后,就放炸弹,按下之后必须2秒之后才能继续按下去
if (Input.GetKey(KeyCode.R))
{
//必须boomTime大于等于2秒才会放置炸弹
if (boomTime >= 2f)
{
GameObject clone = Instantiate(boomObj, transform.position, transform.rotation);
//将时间清除0
boomTime = 0;
}
}
boomTime += Time.deltaTime;
}
// Update is called once per frame
void FixedUpdate()
{
//FixedUpdate--更新帧率稳定的使用
//Update --根据当前电脑的帧率决定的。
//获取虚拟轴
x = Input.GetAxis("Horizontal");
z = Input.GetAxis("Vertical");
float d = Mathf.Sqrt(x*x+z*z);
//判断 拿到一个变化后的向量
vector = new Vector3(x, 0, z); //zero = (0,0,0)
if (vector != Vector3.zero) //不等于0说明按下了按键
{
//改变位置 --将物体朝向vector的方向就可以了
transform.rotation = Quaternion.LookRotation(vector);
//移动操作 --朝着这个方向并且朝着这个方向同步移动
transform.Translate(Vector3.forward * 7 * Time.deltaTime);
}
}
}
8.将爆炸效果和boom脚本文件挂载到炸弹物体上
9.编写boom脚本文件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class boom : MonoBehaviour
{
public GameObject boomobj; //写完之后再给对象保存之后untiy检查器会有对应的变量名,将效果拖入变量名即可
// 炸弹倒计时2s会爆炸--当这个玩家按下r键会克隆出现在玩家的底下
// 隔俩秒爆炸 会显示爆炸的特效 爆炸完后爆炸特效消失,删除特效和炸弹
void Start() //委托使用invoke去调用 invoke(方法名,延迟执行的时间)
{
//2s出现炸弹的特效
Invoke("baozha",2f);
}
public void baozha()
{
Debug.Log("我要爆炸了");
//显示特效 特效加载进来
GameObject cloneBoom = Instantiate(boomobj,transform.position,transform.rotation); //显示炸弹的位置
//删除炸弹 gameObject表示当前的游戏对象
Destroy(this.gameObject);
//删除炸弹特效
Destroy(cloneBoom, 2f); //隔2秒删除克隆体
}
// Update is called once per frame
void Update()
{
}
}
10.伴随物体的移动,摄像机也会跟着移动效果
将相机脚本挂载到相机物体上
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class camera : MonoBehaviour
{
//保存开始时,玩家和相机的向量
private Vector3 vector;
//保存玩家的transform组件
private GameObject player;
// Start is called before the first frame update
void Start()
{
//通过标签获取玩家的transform组件
player = GameObject.FindWithTag("Player");
//获取玩家和相机之间的向量
vector = player.transform.position - transform.position;
}
// Update is called once per frame
void Update()
{
//每次更新相机的位置--物体在前,摄像头在后面跟踪
transform.position = player.transform.position - vector;
}
}
11.编写敌人enemy脚本文件
1.更改enemy物体的标签名
2.enemy脚本文件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class enemy : MonoBehaviour
{
public GameObject player;
public float distance;
// Start is called before the first frame update
void Start()
{
player = GameObject.FindWithTag("Player");
}
// Update is called once per frame
void Update()
{
//持续拿到玩家和敌人的距离
distance = Vector3.Distance(player.transform.position, transform.position);
if (distance < 10)
{
//敌人要抓玩家操作了
//1.敌人面向玩家
transform.LookAt(player.transform.position);
//2.敌人开始抓捕玩家
transform.Translate(Vector3.forward * 1 * Time.deltaTime);
}
if (distance < 2)
{
//Messagebox.MessageBox(IntPtr.Zero, "还没有该场景!", "xxx", 0);
Debug.Log("游戏结束");
Time.timeScale = 0; //0表示游戏结束,1表示正常运行
}
}
}
12.给player物体添加刚体组件,简单的防止player玩家碰强出去
完整项目效果演示:
项目遇到的问题: 1.脚本挂载到物体的时候,要确保脚本里面的类和你的脚本名称保持一致,否则会出现挂载不到的问题 2.FixedUpdate和Update的区别
- 三者执行顺序:FixedUpdate ——>Update ——>LateUpdate
- 三者作用:FixedUpdate固定帧更新,一般用作物理更新;Update一般用作游戏逻辑更新;LateUpdate一般用作相机更新
其中
FixedUpdate--更新帧率稳定的使用
Update --根据当前电脑的帧率决定的。 主要区别可以访问:blog.csdn.net/enternalsta…