ЛР25
Кириченко Антон
ЭВТ-70
Игровой Движок: Unity.
Тема: Разработать игру Bounce
Цель: разработка игры Bounce
Ход работы
- Настройка игрого поля
_______Рис.25.1 Папки
- Настройка параметра Ball
_______Рис.25. 2. Настройка параметра Ball
- Параметры New Sprite
_______ Рис.25. 3. Параметры New Sprite
- Параметр PLatform
_______Рис.25 4. Параметр PLatform
- Настройка MovingBlock
_______Рис. 25 6. Настройка MovingBlock
- Параметр MovingBlock
_______ Рис. 25 7. Параметр MovingBlock
_______ Рис. 25 8. Параметры MovingBlock (1)
- Параметр FallingBlock
_______ Рис. 25 9. Параметр FallingBlock
_______ Рис. 25. 10Настройка FallingBlock (1)
- Настройка CameraHolder
_______ Рис. 25. 11 Настройка CameraHolder
- Настройка Main Camera
_______ Рис. 25. 12 Настройка Main Camera
- Параметр JumpHigher и его дочерние объекты
_______ Рис. 25. 13 Параметр JumpHigher и его дочерние объекты
- Настройка JumpHigher
_______ Рис. 25. 14 Настройка JumpHigher
- Настройка New Sprite
_______ Рис. 25. 15 Настройка New Sprite
- Параметр SlowMotion и его дочерние объект
_______ Рис. 25. 16 Параметр SlowMotion и его дочерние объект
- Параметры TextMeshPro
_______ Рис. 25. 17 Параметры TextMeshPro
_______ Рис. 25. 18 Параметры TextMeshPro (1)
- Настройка параметра Manager
_______ Рис. 25. 19 Настройка параметра Manager
- Настройка TextMeshPro в параметре fastMotion
_______ Рис. 25. 20 Настройка TextMeshPro в параметре fastMotion
- Настройка TextMeshPro в параметре
_______ Рис. 25. 21 Настройка TextMeshPro в параметре
- Настройка параметра ElectricPower
_______ Рис. 25. 22 Настройка параметра ElectricPower
- Настройка TextMeshPro в параметре ElectricPower
_______ Рис. 25. 23 и 25. 24. Настройка TextMeshPro в параметре ElectricPower
- Настройка параметра PointObject
_______ Рис. 25. .25 Настройка параметра PointObject
- Настройки параметра Line
_______ Рис. 25. 26 Настройки параметра Line
- Настройка параметра ScoreCanvas
_______ Рис. 25. 27 Настройка параметра ScoreCanvas
- Настройка параметра Image в параметре ScoreCanvas
_______ Рис. 25. 28 Настройка параметра Image в параметре ScoreCanvas
- Настройка параметра TextMeshPro Text в параметре ScoreCanvas
_______ Рис. 25 29. Настройка параметра TextMeshPro Text в параметре ScoreCanvas
_______ Рис. 25. 30 Настройка параметра TextMeshPro Text в параметре ScoreCanvas
-
Настройка параметра EventSystem Параметр StartCanvas и его дочерние объекты Panel и Button
_______ Рис. 25. 31 Настройка параметра EventSystem Параметр StartCanvas и его дочерние объекты Panel и Button
-
Настройка параметра StartCanvas
_______ Рис. 25. 32 Настройка параметра StartCanvas
-
Настройка параметра Panel
_______ Рис. 25. 33 Настройка параметра Panel
-
Настройка параметра TextMeshPro Text в параметре StartCanvas
_______ Рис. 25 .34 Настройка параметра TextMeshPro Text в параметре StartCanvas
_______ Рис. 25 35 Настройка параметра TextMeshPro Text в параметре StartCanvas
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Ball : MonoBehaviour
{ Rigidbody2D rgbd;
public Vector2 maxForce;
public float forceAppliedInSidewaysDirection;
public bool moving;
float sidewaysMovement;
BallFuctionality ballFuctionality;
// Start is called before the first frame update
void Start()
{
rgbd = GetComponent<Rigidbody2D>();
ballFuctionality = GetComponent<BallFuctionality>();
}
// Update is called once per frame
void Update()
{
// clampVeclocity();
// Debug.Log(rgbd.velocity);
movement();
}
public void FixedUpdate()
{
if (!moving)
{
Vector2 vel = rgbd.velocity;
vel.x = Mathf.Lerp(vel.x, 0, 0.2f);
rgbd.velocity = vel;
}
}
void clampVeclocity()
{
Vector2 vel = rgbd.velocity;
if (Mathf.Abs(vel.x) >= maxForce.x)
{
vel.x = maxForce.x * Mathf.Sign(rgbd.velocity.x);
}
if ((vel.y) >= maxForce.y)
{ if (ballFuctionality.jumpHigher) return;
vel.y = maxForce.y;
}
rgbd.velocity = vel;
}
void movement()
{
if (Input.GetKey(KeyCode.LeftArrow))
{
rgbd.AddForce(new Vector2(-forceAppliedInSidewaysDirection, 0));
}
if (Input.GetKey(KeyCode.RightArrow))
{
rgbd.AddForce(new Vector2(forceAppliedInSidewaysDirection, 0));
}
if (Input.GetKeyDown(KeyCode.RightArrow) || Input.GetKeyDown(KeyCode.LeftArrow))
{
moving = true;
}
if (Input.GetKeyUp(KeyCode.RightArrow) || Input.GetKeyUp(KeyCode.LeftArrow))
{
moving = false;
}
}
}
3. Скрипт BlockScript
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BlockScript : MonoBehaviour
{
public bool moveBlock, fallingBlock;
bool startMovingBlock, startFallingBlock;
Rigidbody2D rgbd;
bool moveLeft;
// Start is called before the first frame update
void Start()
{
rgbd = GetComponent<Rigidbody2D>();
if (Random.value > 0.5)
{
moveLeft = true;
}
}
// Update is called once per frame
void Update()
{
if (startMovingBlock && moveBlock)
{
if (moveLeft)
{
rgbd.velocity = new Vector2(-3, 0);
}
else
{
rgbd.velocity = new Vector2(3, 0);
}
}
}
public void OnCollisionEnter2D(Collision2D collision)
{ if(collision.collider.tag == "Player") {
if (moveBlock)
{
startMovingBlock = true;
}
else if (fallingBlock)
{
rgbd.bodyType = RigidbodyType2D.Dynamic;
}
}
}
}
4. Скрипт CameraController
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Node : MonoBehaviour
{
public Vector2 Pos => transform.position;
public Block OccupiedBlock;
}
5. Скрипт Manager
using System.Collections;
using UnityEngine.SceneManagement;
using UnityEngine;
public class Manager : MonoBehaviour
{
public bool slowTime, fastTime;
public float slow;
public bool startGame;
public void slowTimerStart()
{
StartCoroutine(slowTheTime());
}
IEnumerator slowTheTime()
{
slowTime = true;
Time.timeScale = 1 / slow;
Time.fixedDeltaTime = Time.fixedDeltaTime / slow;
FindObjectOfType<BallFuctionality>().forceAppliedInUpwardDirection *= 2;
yield return new WaitForSeconds(2 * slow);
Time.timeScale = 1;
Time.fixedDeltaTime = Time.fixedDeltaTime * slow;
FindObjectOfType<BallFuctionality>().forceAppliedInUpwardDirection /= 2;
slowTime = false;
}
public void FastTimerStart()
{
StartCoroutine(fastTheTime());
}
IEnumerator fastTheTime()
{
fastTime = true;
Time.timeScale = 1 * slow;
Time.fixedDeltaTime = Time.fixedDeltaTime * slow;
FindObjectOfType<BallFuctionality>().forceAppliedInUpwardDirection /= 2;
yield return new WaitForSeconds(2 * slow);
Time.timeScale = 1;
Time.fixedDeltaTime = Time.fixedDeltaTime / slow;
FindObjectOfType<BallFuctionality>().forceAppliedInUpwardDirection *= 2;
fastTime = false;
}
public void StartTheGame()
{
startGame = true;
FindObjectOfType<BallFuctionality>().GetComponent<Rigidbody2D>().bodyType = RigidbodyType2D.Dynamic;
}
public void RestartTheGame()
{
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
}
6. Скрипт PointsObject
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PointsObject : MonoBehaviour
{
Transform[] childObj;
public GameObject Points1;
public int force;
public bool hasBroke;
public void Explode()
{
hasBroke = true;
Points1.SetActive(true);
Points1.GetComponent<Rigidbody2D>().bodyType = RigidbodyType2D.Dynamic;
Points1.GetComponent<Rigidbody2D>().AddForceAtPosition(Vector2.up * force * 3 / 2, Points1.transform.position);
foreach (Transform t in transform)
{
Rigidbody2D rgbd = t.GetComponent<Rigidbody2D>();
if (rgbd != null)
{
//shake camera
rgbd.bodyType = RigidbodyType2D.Dynamic;
rgbd.AddForceAtPosition(Vector2.up * force,
new Vector2(Random.Range(t.position.x - 2, t.position.x + 2), t.position.y));
//play sound
}
}
}
}
7. Скрипт Score
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Score : MonoBehaviour
{
public TMPro.TextMeshProUGUI scoreText;
public int ScoreValue;
public void AddScore()
{
ScoreValue++;
scoreText.text = ScoreValue.ToString();
}
}
Вывод: в ходе проделанной работы - разработана игра Bounce Отчёт по Bounce.docx

































