Ajouter un if en C#

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Avatar de l’utilisateur
Tsurugi21
Messages : 221
Inscription : 26 Nov 2012 23:21
Localisation : Dans mon sous-sol ou chez des potes, probablement

Re: Ajouter un if en C#

Message par Tsurugi21 » 07 Jan 2013 07:37

ok, mais est-ce que un script C# peut lire une variable static de type boolean d'un autre javascript? je veut que le mouselooking ne s'effectu que lorsque la variable ''souris'' du script BANK est à true.

Code : Tout sélectionner

if(BANK.souris == true){
using UnityEngine;
using System.Collections;

/// MouseLook rotates the transform based on the mouse delta.
/// Minimum and Maximum values can be used to constrain the possible rotation

/// To make an FPS style character:
/// - Create a capsule.
/// - Add the MouseLook script to the capsule.
///   -> Set the mouse look to use LookX. (You want to only turn character but not tilt it)
/// - Add FPSInputController script to the capsule
///   -> A CharacterMotor and a CharacterController component will be automatically added.

/// - Create a camera. Make the camera a child of the capsule. Reset it's transform.
/// - Add a MouseLook script to the camera.
///   -> Set the mouse look to use LookY. (You want the camera to tilt up and down like a head. The character already turns.)
[AddComponentMenu("Camera-Control/Mouse Look")]
public class MouseLook : MonoBehaviour {

   public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
   public RotationAxes axes = RotationAxes.MouseXAndY;
   public float sensitivityX = 12F;
   public float sensitivityY = 12F;

   public float minimumX = -360F;
   public float maximumX = 360F;

   public float minimumY = -60F;
   public float maximumY = 60F;

   float rotationY = 0F;

   void Update ()
   {
      if (axes == RotationAxes.MouseXAndY)
      {
         float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;
         
         rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
         rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
         
         transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);
      }
      else if (axes == RotationAxes.MouseX)
      {
         transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityX, 0);
      }
      else
      {
         rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
         rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
         
         transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0);
      }
   }
   
   void Start ()
   {
      // Make the rigid body not change rotation
      if (rigidbody)
         rigidbody.freezeRotation = true;
   }
}
}
Graphics doesnt mean everything

Avatar de l’utilisateur
Tsurugi21
Messages : 221
Inscription : 26 Nov 2012 23:21
Localisation : Dans mon sous-sol ou chez des potes, probablement

JE REFORMULE

Message par Tsurugi21 » 07 Jan 2013 07:57

Je veut que le script MouseLook.cs ne s'éxécute que lorsque la variable statique "souris" du script BANK.js (javascript) est à true. Est-ce possible, et si oui, comment?
Graphics doesnt mean everything

Avatar de l’utilisateur
Lira
Messages : 52
Inscription : 19 Mai 2012 18:03

Re: Ajouter un if en C#

Message par Lira » 07 Jan 2013 09:07

je ne pense pas que tu puisse appeler du code js avec du c#, de plus, ton code ne se compilera même pas si tu place ton if a l'éxtérieur d'une classe et devant les headers...

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

[AddComponentMenu("Camera-Control/Mouse Look")]
public class MouseLook : MonoBehaviour 
{

   public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
   public RotationAxes axes = RotationAxes.MouseXAndY;
   public float sensitivityX = 12F;
   public float sensitivityY = 12F;

   public float minimumX = -360F;
   public float maximumX = 360F;

   public float minimumY = -60F;
   public float maximumY = 60F;

   float rotationY = 0F;

   void Update ()
   {
     if(BANK.souris == true)
    {
      if (axes == RotationAxes.MouseXAndY)
      {
         float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;
         
         rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
         rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
         
         transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);
      }
      else if (axes == RotationAxes.MouseX)
      {
         transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityX, 0);
      }
      else
      {
         rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
         rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
         
         transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0);
      }
   }
   }
   
   void Start ()
   {
      // Make the rigid body not change rotation
      if (rigidbody)
         rigidbody.freezeRotation = true;
   }
}
}
revoir un peu le C# (ou même le voir), ne te ferais pas de mal, après, pour convertir ce code en JS t'a que la syntaxe des void en function et des variables a changer si je n'oublie rien, en bref, rien de bien méchant

sotec
Messages : 542
Inscription : 21 Sep 2012 10:11

Re: Ajouter un if en C#

Message par sotec » 07 Jan 2013 09:32

C# demande juste un peu plus de rigueur sur le typage des variables (qui sont obligatoire !!! mais qui évite pas mal d'erreurs :lol: )
Ton problème de Parse error vient (très) surement d'une variable mal typé.
avec la doc et en faisant attention aux types des variables que tu manipule tu devrais t'en sortir.
┬─┬ノ(º - ºノ) - (╯°□°)╯︵ ┻━┻

Avatar de l’utilisateur
Alesk
Messages : 2303
Inscription : 13 Mars 2012 09:09
Localisation : Bordeaux - France
Contact :

Re: Ajouter un if en C#

Message par Alesk » 07 Jan 2013 12:21

+1 Lira et Sotec ! :mrgreen:

Avatar de l’utilisateur
Tsurugi21
Messages : 221
Inscription : 26 Nov 2012 23:21
Localisation : Dans mon sous-sol ou chez des potes, probablement

Re: Ajouter un if en C#

Message par Tsurugi21 » 07 Jan 2013 17:34

J'ai converti du mieu que j'ai pu le script, mais il m'envoie encore quelques erreurs

Code C#

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

[AddComponentMenu("Camera-Control/Mouse Look")]
public class MouseLook : MonoBehaviour 
{

   public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 }
   public RotationAxes axes = RotationAxes.MouseXAndY;
   public float sensitivityX = 12F;
   public float sensitivityY = 12F;

   public float minimumX = -360F;
   public float maximumX = 360F;

   public float minimumY = -60F;
   public float maximumY = 60F;

   float rotationY = 0F;

   void Update ()
   {
     if(BANK.souris == true)
    {
      if (axes == RotationAxes.MouseXAndY)
      {
         float rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;
         
         rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
         rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
         
         transform.localEulerAngles = new Vector3(-rotationY, rotationX, 0);
      }
      else if (axes == RotationAxes.MouseX)
      {
         transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityX, 0);
      }
      else
      {
         rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
         rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);
         
         transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0);
      }
   }
   }
   
   void Start ()
   {
      // Make the rigid body not change rotation
      if (rigidbody)
         rigidbody.freezeRotation = true;
   }
}
}
Mon code js

Code : Tout sélectionner


@script AddComponentMenu ("Camera-Control/Mouse Look")

class MouseLook : MonoBehaviour () {



   var RotationAxes : Array = new Array("MouseXAndY","MouseX","MouseY");

   var axes : Quaternion = RotationAxes.MouseXAndY;

   var sensitivityX : float = 12F;

   var sensitivityY : float = 12F;



   var minimumX : float = -360F;

   var maximumX : float = 360F;



   var minimumY : float= -60F;

   var maximumY : float = 60F;



   var rotationY : float = 0F;

   var rotationX : float;



	function Update (){

     if(BANK.souris == true){

      if (axes == RotationAxes.MouseXAndY){

         rotationX = transform.localEulerAngles.y + Input.GetAxis("Mouse X") * sensitivityX;

         

         rotationY = Input.GetAxis("Mouse Y") * sensitivityY;

         rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);

         

         transform.localEulerAngles = new Vector3(-rotationY,rotationX,0);

      }

      else if (axes == RotationAxes.MouseX){

         transform.Rotate(0,Input.GetAxis("Mouse X") * sensitivityX,0);

      }

      else{

         rotationY = Input.GetAxis("Mouse Y") * sensitivityY;

         rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);

         

         transform.localEulerAngles = new Vector3(-rotationY,transform.localEulerAngles.y,0);

      }

   }

   }

   

   function Start () {

      // Make the rigid body not change rotation

      if (rigidbody){

         rigidbody.freezeRotation = true;

      }

   }

}
Les erreurs
  • Assets/Scripts/MouseLookJS.js(3,17): BCE0043: Unexpected token: :.

    Assets/Scripts/MouseLookJS.js(3,35): UCE0001: ';' expected. Insert a semicolon at the end.

    Assets/Scripts/MouseLookJS.js(5,4): BCE0043: Unexpected token: var.

    Assets/Scripts/MouseLookJS.js(5,7): UCE0001: ';' expected. Insert a semicolon at the end.

    Assets/Scripts/MouseLookJS.js(5,8): BCE0044: expecting EOF, found 'RotationAxes'.
Graphics doesnt mean everything

sephitoth
Messages : 495
Inscription : 06 Avr 2012 13:47
Localisation : toulouse

Re: Ajouter un if en C#

Message par sephitoth » 07 Jan 2013 17:52

Le fichier qui contient des erreurs c'est MouseLookJS.js donc c'est un fichier Javascript

les fichier C# sont en .cs
J'étais athée jusqu’à ce que je découvre que j'étais dieu !

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: Ajouter un if en C#

Message par cayou66 » 07 Jan 2013 17:55

Code : Tout sélectionner

class MouseLook : MonoBehaviour () {
ça n'a rien à faire dans un script JS, n'oublies pas d'enlever la } à la fin.

Avatar de l’utilisateur
Tsurugi21
Messages : 221
Inscription : 26 Nov 2012 23:21
Localisation : Dans mon sous-sol ou chez des potes, probablement

Re: Ajouter un if en C#

Message par Tsurugi21 » 07 Jan 2013 19:08

Oubliez ca, j'ai trouvé ailleurs dans un petit lien presque caché un script de mouse looking en java. Mais la, SOIS il détecte sur l'axe Y, SOIS sur l'axe X, à cause du "var RotationAxisRotationXY = MouseX || MouseY;". J'ai essayé d'enlever les ifs, mettre 2 scripts, et même créer une variable X et une Y, rien n'y passe...

Code : Tout sélectionner

	public enum RotationAxis {MouseX = 0, MouseY = 1}
	
		var RotationAxisRotationXY = RotationAxis.MouseX || RotationAxis.MouseY;
		
		var sensitivityX : float = 100f;
		
		var minimumX : float = -360f;
		
		var maximumX : float = 360f;
		
		var RotationX : float = 0f;
		
		var OriginalRotation : Quaternion;
		
		var RotationY : float = 0f;
		
		var minimumY : float = -360f;
		
		var maximumY : float = 360f;
		
		var sensitivityY : float = 90f;

function Update () {
if(BANK.souris == true){

	if(RotationAxisRotationXY == RotationAxis.MouseX){

		RotationX += Input.GetAxis ("Mouse X") * sensitivityX * Time.deltaTime;
		
			OriginalRotation = XQuaternion = Quaternion.AngleAxis (RotationX , Vector3.up);
		
			 transform.localRotation = OriginalRotation * XQuaternion;
	}
	if(RotationAxisRotationXY == RotationAxis.MouseY){

		RotationY -= Input.GetAxis ("Mouse Y") * sensitivityY * Time.deltaTime;
		
		OriginalRotation = YQuaternion = Quaternion.AngleAxis (RotationY , Vector3.right);
		
		transform.localRotation = OriginalRotation * YQuaternion;
	}
}
}
EDIT: ajouter dans la fonction Update ''if(GetAxis (''MouseX''){} if(GetAxis (''MouseY''){}'' ne fonctionne pas, car l'écran shake comme un séisme, c'est injouable (le code est abrégé, voici le vrai:

Code : Tout sélectionner

if(GetAxis ("Mouse X"){
       RotationAxisRotationXY = RotationAxis.MouseX
}
if(GetAxis ("Mouse Y"){
       RotationAxisRotationXY = RotationAxis.MouseY
}
Graphics doesnt mean everything

Avatar de l’utilisateur
cayou66
Codeur
Codeur
Messages : 6450
Inscription : 30 Juin 2011 14:45
Localisation : Montréal

Re: Ajouter un if en C#

Message par cayou66 » 07 Jan 2013 19:55

c'est Input.GetAxis, pas juste GetAxis tout court.

Tu devrais essayer de comprendre ce que veulent dire ces lignes de code au lieu de copier coller bêtement et de les recoller sur le forum, on est pas des compilateur ici.
Si à chaque erreur que j'ai quand je code, je la poste ici, on a pas fini.

C'est la dernière fois que je t'aide (et j'espère bien que les autres feront de même).

Répondre

Revenir vers « Scripting »