[C#/JS] Viser avec une arme

Cette section est destinée aux scripts partagés par la communauté. Chaque post est destiné à un script. Suivez bien les recommandations.
Avatar de l’utilisateur
Diridium
Messages : 24
Inscription : 11 Jan 2018 10:21

[C#/JS] Viser avec une arme

Message par Diridium » 11 Jan 2018 10:53

Bonjour,
Je propose un de mes scripts destiné à ceux qui veulent créer un FPS.
Le script est disponible en C# et en JavaScript (je vous conseille vivement de prendre celui en C#, étant donné que le JavaScript sur Unity est voué à disparaître (JS n'est plus ^^)

Le script en JavaScript :

Code : Tout sélectionner

var Cam : Camera;
var NormalPos : Vector3;
var AimPos : Vector3;
var Gun : GameObject;

var isReloading : boolean = false;

var reticule : GameObject;

function Start () {
if(Cam == null) {
Cam = Camera.main;
}
}

function Update () {
	if(Input.GetButton("Fire2") && isReloading == false){
	Gun.transform.localPosition = Vector3.Lerp(Gun.transform.localPosition, AimPos, Time.deltaTime * 8);
	Cam.fieldOfView = Mathf.Lerp(Cam.fieldOfView, 45, Time.deltaTime * 10);
	reticule.SetActive(false);
	}else{
		Gun.transform.localPosition = Vector3.Lerp(Gun.transform.localPosition, NormalPos, Time.deltaTime * 8);
		Cam.fieldOfView = Mathf.Lerp(Cam.fieldOfView, 60, Time.deltaTime * 10);
		reticule.SetActive(true);
	}
}
Le script en C#

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class Aiming : MonoBehaviour {
Camera Cam;
Vector3 NormalPos;
Vector3 AimPos;
GameObject Gun;

bool  isReloading = false;

GameObject reticule;

void  Start (){
if(Cam == null) {
Cam = Camera.main;
}
}

void  Update (){
	if(Input.GetButton("Fire2") && isReloading == false){
	Gun.transform.localPosition = Vector3.Lerp(Gun.transform.localPosition, AimPos, Time.deltaTime * 8);
	Cam.fieldOfView = Mathf.Lerp(Cam.fieldOfView, 45, Time.deltaTime * 10);
	reticule.SetActive(false);
	}else{
		Gun.transform.localPosition = Vector3.Lerp(Gun.transform.localPosition, NormalPos, Time.deltaTime * 8);
		Cam.fieldOfView = Mathf.Lerp(Cam.fieldOfView, 60, Time.deltaTime * 10);
		reticule.SetActive(true);
	}
}
}
[EDIT] : J'ai traduit le code initial (qui était en JS) en C#

J'espère avoir aidé des gens :p
Dernière édition par Diridium le 15 Jan 2018 14:26, édité 5 fois.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [CS] Viser avec une arme

Message par boubouk50 » 11 Jan 2018 11:33

C'est gentil de ta part, je vais néanmoins corriger/commenter quelques petites choses. Déjà, c'est du javascript et pas du C#, langage qui va disparaître d'Unity.
Ensuite, en terme de nomenclature et règles de codage, il y a encore un peu de travail. Ce serait également bien de commenter les variables et fonctions pour que les utilisateurs puissent comprendre facilement ton code.
Je ne dev pas en javascript, mais ce script nécessite pas d'être dans une classe?

ATTENTION: Ce script ci-dessous n'est pas la correction finale, il y a encore beaucoup à refaire pour qu'il soit fonctionnel, il montre simplement les "erreurs".

Code : Tout sélectionner

//Les variables commencent par une minuscule, les classes, types et fonctions commencent par une majuscule
var cam : Camera;
var normalPos : Vector3;
var aimPos : Vector3;
var gun : GameObject;

var isReloading : boolean = false;

var reticule : GameObject;

function Start () {
	//Récupération de la caméra si non affectée depuis l'inspector
	if(cam == null)
		cam = Camera.main;
}

function Update () {
	//Ici, ton état VRAI est seulement réalisé si tu tires et que tu ne recharges pas
	if(Input.GetButton("Fire2") && !isReloading){
		//Es-tu sur de ton Lerp? Ici il va petit à petit aller vers aimPos sans jamais l'atteindre, quant à la vitesse de 8 en dur...
		gun.transform.localPosition = Vector3.Lerp(gun.transform.localPosition, aimPos, Time.deltaTime * 8);
		//Idem, on va petit à petit atteindre 45 sans l'atteindre
		cam.fieldOfView = Mathf.Lerp(cam.fieldOfView, 45, Time.deltaTime * 10);
		//désactivation de la réticule -> Ce serait bien de tester si elle existe.
		if (reticule != null)
			reticule.SetActive(false);
	}
	//Ce qui signifie que le else est appelé si tu ne tires pas ou bien si tu tires et que tu recharges
	else{
		//Mêmes remarques
		gun.transform.localPosition = Vector3.Lerp(gun.transform.localPosition, normalPos, Time.deltaTime * 8);
		cam.fieldOfView = Mathf.Lerp(cam.fieldOfView, 60, Time.deltaTime * 10);
		if (reticule != null)
			reticule.SetActive(true);
	}
	
	//A aucun moment isReloading n'est affecté! Il est donc toujours à false.
}
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
Diridium
Messages : 24
Inscription : 11 Jan 2018 10:21

Re: [C#/JS] Viser avec une arme

Message par Diridium » 15 Jan 2018 14:23

Bonjour,

Merci pour tes corrections, j'ai fait un edit car j'avais seulement mis le script en JS au lieu de le mettre en C#.

Répondre

Revenir vers « Scripts »