附上上篇的地址:https://blog.csdn.net/weixin_44526652/article/details/104259993
之前的上篇讲述了场景的搭建,下面来进行实现。
3.脚本的创建和编写
①编写
在Unity下方的“项目”窗口中,在“Assets”文件夹下,右键空白处“创建-文件夹”,命名为“Scripts”,用于存放脚本文件。
进入该文件夹内,右键空白处“创建-C#脚本”,新建三个脚本,分别命名为“PlayerJump”、“Restart”、“Succeed”。
双击“PlayerJump”脚本,自动唤起“Microsoft Visual Studio”,整个脚本内容编写如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerJump : MonoBehaviour
{
private Rigidbody playerRigidbody;//玩家的刚体组件
private float t; //蓄力时间
private float ScaleY; //玩家Y轴的大小
public float jumpIndex=1; //跳跃速度系数,public可供外部修改
void Start()
{
playerRigidbody = this.GetComponent<Rigidbody>(); //获取玩家的刚体组件
ScaleY = this.transform.localScale.y; //获取玩家初始的Y轴高度
}
void Update()
{
if(Input.GetMouseButton(0))//当按住鼠标左键时
{
t += Time.deltaTime; //蓄力时间计时开始
if( ScaleY <= 0.5 && ScaleY > 0) //如果Y轴高度在0-0.5范围内
ScaleY= Mathf.Lerp(ScaleY, ScaleY - t, Time.deltaTime); //Y轴高度随蓄力时间压缩
this.transform.localScale = new Vector3(0.2f, ScaleY, 0.2f);//更新玩家的体积缩放状态
}
if (Input.GetMouseButtonUp(0))//当松开鼠标左键时
{
playerRigidbody.velocity = new Vector3(1, 1, 0) * t * jumpIndex;//刚体的速度=x轴和y轴方向*跳跃速度
t = 0; //蓄力时间归零,等待下一次蓄力计时
ScaleY = 0.5f;//Y轴高度回到正常状态
this.transform.localScale = new Vector3(0.2f, ScaleY, 0.2f);//更新玩家的体积缩放状态
}
}
}
这个脚本主要用于管理鼠标输入的事件和玩家跳跃的处理。
保存后,再回到文件夹“Scripts”里双击“Restart”脚本,会在VS里自动显示这个脚本,整个脚本编写内容如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Restart : MonoBehaviour
{
private GameObject player; //玩家
private Vector3 StartPosistion; //玩家的初始位置
public GameObject successText;//成功提示
void Start()
{
player = GameObject.FindGameObjectWithTag("Player").gameObject;//根据标签获取玩家
StartPosistion = player.transform.position; //给玩家初始位置赋值
}
void Update()
{
if (Input.GetKeyDown(KeyCode.R)) //当按下R键时
{
player.transform.position = StartPosistion; //玩家回到初始位置
successText.SetActive(false); //成功提示消失
}
}
//碰撞接触事件
private void OnCollisionEnter(Collision collision)
{
if (collision.gameObject.tag == "Player")//如果玩家碰撞
{
player.transform.position = StartPosistion; //玩家回到初始位置
successText.SetActive(false); //成功提示消失
}
}
}
这个脚本作用是在落地或者主动重新开始的时候可以让玩家回到起点。
保存后,再回到文件夹“Scripts”里双击“Succeed”脚本,会在VS里自动显示这个脚本,整个脚本编写内容如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Succeed : MonoBehaviour
{
public GameObject successText; //成功提示
//碰撞持续事件
private void OnCollisionStay(Collision collision)
{
if (collision.gameObject.tag == "Player")//如果玩家碰撞
{
if (collision.transform.position.x > 3.5 && collision.transform.position.y == 1.25) //如果玩家站在上面
successText.SetActive(true); //成功提示出现
}
}
}
这个脚本的作用是玩家到达目的地后,屏幕产生提示。
等脚本都写好保存之后,回到Unity编辑器。
②配置脚本
在“项目”窗口中鼠标左键点住“PlayerJump”脚本,将其拖拽到“层级”窗口的 “玩家” 里;
将“Restart”脚本拖拽到“层级”窗口的 “地面” 里;
将“Succeed”脚本拖拽到“层级”窗口的 “Cube(3)” 里。
点击“层级”窗口的“地面”,在右边的“检查器”窗口找到刚添加的“Restart”脚本,发现有个SuccessText是空的。拖拽“层级”窗口的“Canvas-Text”进入这个框。
同理,点击“层级”窗口的“Cube(3)”,在右边的“检查器”窗口找到刚添加的“Succeed”脚本,拖拽“层级”窗口的“Canvas-Text”进入这个框。
4.运行
点击Unity编辑器正上方的三角形播放按钮,运行游戏。此时会自动跳转至“游戏”窗口,可以试玩。
或者在运行之前点击右上方“播放时最大化”,可以有最大化的游戏画面。
能看到按住鼠标左键,能够蓄力,松开时会跳起。落地会自动回到起点,只有落在最后一个时提示成功。
以此类推,可以多做几个跳台,并修改脚本。这里只是示范较完整的小游戏的制作思路和流程。
记得最后点一下菜单栏的“文件-保存”,把场景及时保存下来。