0% au considerat acest document util (0 voturi)
20 vizualizări20 pagini

Aplicație Realizată Pentru Olimpiadă de Inovare Și Creație Digitală Infoeducație" - 2024, Secțiunea Soft Utilitar

Documentul prezintă un proiect de joc numit GodSend, dezvoltat în C# folosind Unity, care are ca scop îmbunătățirea abilităților cognitive ale jucătorilor. Jocul este un FPS (First Person Shooter) și include un tutorial pentru familiarizarea jucătorilor cu controalele, precum și o luptă cu un boss final. Proiectul își propune să ofere o experiență de joc unică, în contrast cu tendințele actuale din industria jocurilor video.

Încărcat de

a
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
20 vizualizări20 pagini

Aplicație Realizată Pentru Olimpiadă de Inovare Și Creație Digitală Infoeducație" - 2024, Secțiunea Soft Utilitar

Documentul prezintă un proiect de joc numit GodSend, dezvoltat în C# folosind Unity, care are ca scop îmbunătățirea abilităților cognitive ale jucătorilor. Jocul este un FPS (First Person Shooter) și include un tutorial pentru familiarizarea jucătorilor cu controalele, precum și o luptă cu un boss final. Proiectul își propune să ofere o experiență de joc unică, în contrast cu tendințele actuale din industria jocurilor video.

Încărcat de

a
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca DOCX, PDF, TXT sau citiți online pe Scribd

v1.

0
Aplicație realizată pentru olimpiadă de inovare și
creație digitală „InfoEducație” – 2024,
secțiunea soft utilitar

Buftea Horea Alexandru

Colegiul Național „Gheorghe Șincai” Baia Mare

Baia Mare
25.05.2024
Buftea Horea

Cuprins
I. Introducere……………4
a) Prezentarea limbajului de programare folosit……….4
b) Descrierea jocului……………4
c) Motivul alegerii temei…………5
II. Prezentarea proiectului…………..5
a) Inceperea jocului. Tutorialul incorporate…………..5
b) Lupta cu boss-ul nivelului…………….9

III. Cod sursă……………11

IV. Site-ografie………………….20

2
Buftea Horea

I. Introducere
a) Prezentarea limbajului de programare

C# este un limbaj de programare orientat-obiect conceput


de Microsoft la sfârșitul anilor 90. A fost conceput ca un
concurent pentru limbajul Java. Ca și acesta, C# este un
derivat al limbajului de programare C++. C# simplifică mult
scrierea de programe pentru sistemul de operare Windows,
iOS, Android etc. Este un limbaj de programare cross-platform.

Unity este un cross-platform program de


dezvoltare a jocurilor realizat de Unity
Technologies, anunțat prima oară și lansat în 2005
la Apple Worldwide Developers Conference ca un
program pentru Mac OS X.

b) Descrierea jocului

GodSend este un joc de tip FPS (First Person Shooter) creat pentru a ajuta
jucătorul să își dezvolte capabilitățile cognitive precum timpul de reacție și
coordonarea ochi-mână. Acest joc a fost creat în urma observării

GodSend a fost inspirat de jocul de tip „indie boomer shooter”


ULTRAKILL, realizat de Arsi ”Hakita” Patala, de asemenea făcut in Unity.

Specificațiile minime pentru a rula jocul in stagiul sau current sunt

OS: Windows 10

RAM: 5 GB

Disk Space:

UI-ul constă în un healthbar care arată cât health are jucătorul, iar când
acesta ajunge la 0 jucătorul a murit și e nevoit să inceapă nivelul de la începutul
său.

3
Buftea Horea
Abilitățile jucătorului:

 Mișcarea în toate direcțiile cu tastele WASD;


 Salt cu tasta SPACE;
 ”Sprint” cu tasta SHIFT;
 Acționarea armei cu LEFT CLICK.

Software-ul utilizat:

 Unity pentru codarea jocului in sine.


 Blockbench pentru realizarea modelelor.
 FL Studio pentru realizarea soundtrack-ului.

c) Motivul alegerii temei

Pe piață sunt foarte multe jocuri care sunt jucate de oameni din toate țările
lumii. Mereu oamenii doresc o experiența unică și diferită la fiecare joc, dar recent,
multe firme respectabile care realizează jocuri video nu mai abordeaza teme unice
și inovative, de obicei schimbările legate de jucare fiind doar îmbunatățiri grafice.

Soluția pentru a ajuta industria de gaming să se scoată din monotonia acesta


este de a încuraja dezvoltatorii de jocuri pe scară mică să realizeze jocuri cu
tematici noi. Precum in jocul meu, unde am optat pentru a face singura modalitate
de atac a jucătorului să fie ranga, în contrast cu jocurile care implementează arme
de tip long-range, precum puști.

II. Prezentarea jocului


a) Inceputul jocului. Tutorialul incorporat

Pentru a prezenta capabilitățile jocului meu, am realizat un nivel care va


acționa atat ca un „tutorial”, cât și ca o demonstrație a acțiunii de la care se poate
aștepta jucatorul, astfel ținându-l captat in acțiune. Însoțit de elementele vizuale și
funcționale ale jocului, am compus de asemenea și un soundtrack pentru a adăuga
și stimulare auditiva jucătorului, dar și efecte sonore cu același scop.

Unii jucători mai puțin experimentați poate nu cunosc controalele jocului


sau nu sunt obișnuiți cu ele, astfel tutorialul incorporat în primul nivel servește să
familiarizeze jucătorul cu acestea.

4
Buftea Horea

Screenshot cu inceputul jocului. Jucatorul este întâmpinat de arma sa (ranga in


dreapta) și de healthbar-ul acestuia (bara din stânga). Partea de inceput e
concepută spre a învăța jucătorul mecanicile de mișcare simple.

Inceputul are o statuie mare printre copaci. Această statuie poate fi ușor distrusă
prin simpla lovire a acesteia cu ranga cand apasă jucătorul left click.

5
Buftea Horea

Intrarea în templu este blocată de placi de lemn. Acestea sunt menite să îl învețe
pe jucător ca uneori calea va fi obstaculată. Plăcile sunt, de asemenea,
distructibile.

6
Buftea Horea
Intrarea în templu, plăcile de lemn fiind distruse. Această secțiune îl învață pe
jucator că poate sări cu tasta space.

Screenshot cu interiorul templului. Statuile sunt toate distructibile și distrugerea


lor este obiectivul principal al jocului.

Particulele ejectate după spargerea unei statui.

7
Buftea Horea

Interiorul camerei principale din templu. Aici va avea loc inițierea luptei cu boss-
ul final (statuia mare din dreapta).

b) Lupta cu boss-ul final

Screenshot cu boss-ul atacând jucătorul. Această secțiune este menită să


demonstreze jucătorului sistemul simplu de luptă.

8
Buftea Horea

Jucătorul fiind atacat de boss. Această secțiune este menită să învețe player-
ul să se ferească de atacuri.

Ganduri de viitor:

Plănuiesc să adaug mai multe nivele jocului și mai multe mecanici pentru a
adauga varietate jocului.

9
Buftea Horea
III. Cod Sursă

BossStartScript
using [Link];
using [Link];
using UnityEngine;

public class BossStartScript : MonoBehaviour


{

public AudioSource beggining;


public AudioSource fight;
public CharacterController playercontrol;
public Transform player;
public GameObject TeleportTarget;
public GameObject fodder;
public AudioSource shaker;
public AudioSource aud;
public GameObject playerWeapon;
public Camera camera;
Animator anim;
bool at;
Animator cameraanimation;
// Start is called before the first frame update
void Start()
{
anim = [Link]<Animator>();
cameraanimation = [Link]<Animator>();
}
void OnTriggerEnter(Collider other)
{
if ([Link]("weapon") && at)
{
[Link]();

[Link] = false;
[Link] =
[Link];
[Link] = true;

[Link]();
}
if ([Link]("Player"))
[Link]("Passed");

10
Buftea Horea

}
// Update is called once per frame
void Update()
{
at = ![Link]<WeaponController>().CanAttack;

}
}

BreakIdol

using [Link];
using [Link];
using UnityEngine;

public class BreakIdol : MonoBehaviour


{
public GameObject playerWeapon;
public bool at;
public ParticleSystem ps;
public AudioSource aud;
public GameObject idol;
// Start is called before the first frame update
void Start()
{
at = ![Link]<WeaponController>().CanAttack;
}
void OnTriggerEnter(Collider other)
{
if([Link]("weapon") && at)
{
[Link]();
[Link]();
Destroy(idol);
}
}
// Update is called once per frame
void Update()
{
at = ![Link]<WeaponController>().CanAttack;
}
}

11
Buftea Horea

Ehealth

using [Link];
using [Link];
using UnityEngine;
using [Link];
public class EHealth : MonoBehaviour
{
public GameObject thisEnemy;
public GameObject player;
public AudioSource aud;
public Object actor;
public NavMeshAgent navmesh;
public Rigidbody rb;
public float damg;
public EnemyAI ai;
public GameObject playerWeapon;

public Collider[] canHit;


public float radius;

public LayerMask PlayerLayer;


public Animator anim;
public bool at = false;
public float maxHealth = 100f;
public float currentHealth;
int AttackCooldown;
// Start is called before the first frame update
void Start()
{
ai = [Link]<EnemyAI>();
anim = [Link]<Animator>();
currentHealth = maxHealth;
}

public void OnTriggerEnter(Collider other)


{
if (at)
if ([Link]("weapon"))
{
[Link]();
currentHealth -= damg;
}

12
Buftea Horea

if (currentHealth <= 0f)


{
//[Link] = false;
Destroy(actor, 0);
/*[Link] &= ~[Link];
[Link]([Link], [Link]);
[Link] = -0.5f;
[Link] = false;*/
}

}
// Update is called once per frame
void Update()
{
canHit = [Link]([Link], radius,
PlayerLayer);

at = ![Link]<WeaponController>().CanAttack;
if ([Link] != 0)
{
[Link] = true;
[Link] = false;
[Link] = false;
[Link]("CanHit");

}
if ([Link](0).IsName("attack"))
{
[Link] = true;
[Link] = true;
[Link] = false;
}
}

void OnDrawGizmos()
{
[Link]([Link], radius);
}
}

13
Buftea Horea
EnemyAi

using [Link];
using [Link];
using UnityEngine;
using [Link];

public class EnemyAI : MonoBehaviour


{
[SerializeField] Transform target;

NavMeshAgent agent;
void Start()
{
agent = [Link]<NavMeshAgent>();
}
void Update()
{
[Link]([Link]);
}
}

FPSController

using [Link];
using [Link];
using UnityEngine;

[RequireComponent(typeof(CharacterController))]
public class FPSController : MonoBehaviour
{
public Camera playerCamera;
public float walkSpeed = 6f;
public float runSpeed = 12f;
public float jumpPower = 7f;
public float gravity = 10f;

public float lookSpeed = 2f;


public float lookXLimit = 45f;

Vector3 moveDirection = [Link];


float rotationX = 0;

14
Buftea Horea

public bool canMove = true;

CharacterController characterController;
void Start()
{
characterController = GetComponent<CharacterController>();
[Link] = [Link];
[Link] = false;
}

void Update()
{

#region Handles Movment


Vector3 forward = [Link]([Link]);
Vector3 right = [Link]([Link]);

// Press Left Shift to run


bool isRunning = [Link]([Link]);
float curSpeedX = canMove ? (isRunning ? runSpeed : walkSpeed) *
[Link]("Vertical") : 0;
float curSpeedY = canMove ? (isRunning ? runSpeed : walkSpeed) *
[Link]("Horizontal") : 0;
float movementDirectionY = moveDirection.y;
moveDirection = (forward * curSpeedX) + (right * curSpeedY);

#endregion

#region Handles Jumping


if ([Link]("Jump") && canMove &&
[Link])
{
moveDirection.y = jumpPower;
}
else
{
moveDirection.y = movementDirectionY;
}

if (![Link])
{
moveDirection.y -= gravity * [Link];
}

15
Buftea Horea

#endregion

#region Handles Rotation


[Link](moveDirection * [Link]);

if (canMove)
{
rotationX += -[Link]("Mouse Y") * lookSpeed;
rotationX = [Link](rotationX, -lookXLimit, lookXLimit);
[Link] =
[Link](rotationX, 0, 0);
[Link] *= [Link](0,
[Link]("Mouse X") * lookSpeed, 0);
}

#endregion
}
}

Health

using [Link];
using [Link];
using UnityEngine;
using [Link];

public class Health : MonoBehaviour


{
public AudioSource death;
public Animator pearlygates;
public GameObject healthbar;
public float maxHealth = 1f;
public float currentHealth;
// Start is called before the first frame update
void Start()
{
currentHealth = maxHealth;
}
public void OnTriggerEnter(Collider other) {
if ([Link]("enemy"))
{

currentHealth -= 0.05f;

16
Buftea Horea
if (currentHealth < 0.4f)
{
[Link]("fadeheaven");
}
if (currentHealth < 0f)
{
[Link]();
}
}
}
// Update is called once per frame
void Update()
{

}
}

HealthShow

using [Link];
using [Link];
using UnityEngine;
using [Link];

public class HeathShow : MonoBehaviour


{
public Slider slider;
public GameObject player;
public float hp;
// Start is called before the first frame update
void Start()
{

// Update is called once per frame


void Update()
{
hp = [Link]<Health>().currentHealth;
[Link] = hp;
}
}

17
Buftea Horea

WeaponController

using [Link];
using [Link];
using UnityEngine;

public class WeaponController : MonoBehaviour


{
public AudioSource enemyhit;
public AudioSource woosh;
public GameObject Sword;
public bool CanAttack = true;
public float AttackCooldown = 1.0f;
// Update is called once per frame
void Update()
{
if ([Link](0))
{
if (CanAttack)
{
SwordAttack();
}
}

}
void OnTriggerEnter(Collider other)
{
if ([Link]("enemyHitbox") && CanAttack == false)
{
[Link]();
}
}
public void SwordAttack()
{
CanAttack = false;
Animator anim = [Link]<Animator>();
[Link]("Attack");
[Link]();
StartCoroutine(ResetAttackCooldown());

18
Buftea Horea

IEnumerator ResetAttackCooldown()
{
yield return new WaitForSeconds(AttackCooldown);
CanAttack = true;

}
}

WoodBreak

using [Link];
using [Link];
using UnityEngine;

public class WoodBreak : MonoBehaviour


{
bool at;
public GameObject playerWeapon;
public GameObject wood;
public AudioSource aud;
// Start is called before the first frame update
void Start()
{

}
void OnTriggerEnter(Collider other)
{
if ([Link]("weapon") && at)
{
[Link]();
Destroy(wood);
}
}
// Update is called once per frame
void Update()
{
at = ![Link]<WeaponController>().CanAttack;
}
}

19
Buftea Horea
IV. Siteografie

Codul la FPSController - [Link]

20

S-ar putea să vă placă și