2015-11-16 1 views
2

Je travaille sur Unity 5 et j'ai besoin de créer une liste de transformations afin de les modifier dans l'inspecteur (position et rotation) pour émuler une autre caméra. Cette émulation est pour une démo, comme une caméra qui se déplace toute seule pendant la démo.Liste des transformations modifiables à partir de l'inspecteur

J'ai actuellement une liste de transformations, mais je ne sais pas comment les modifier dans l'inspecteur et changer leur position à l'exécution?

Edit: 18/11/15

Voici la solution que si trouver avec l'aide d'un de mes amis plus conscients de ce qui ne fonctionne vraiment l'unité, espérons que cela vous aidera et merci encore pour votre réponse il m'a beaucoup aidé: D:.

using UnityEngine; 
using System.Collections; 
using System.Collections.Generic; 

public class MoveCamera : MonoBehaviourSingleton<MoveCamera> 
{ 
    public List<Transform> cameraPositions = new List<Transform>(); 

    private Transform m_Target; 
    private float m_Speed; 
    private bool m_Translate; 
    private bool m_Rotate; 

    public void SwitchToNext(int index, float speed) 
    { 
     m_Target = cameraPositions[index]; 
     m_Translate = true; 
     m_Rotate = true; 
    } 

    public void Update() 
    { 
     if (m_Target != null && (m_Translate || m_Rotate)) 
     { 
      float ratio = Time.deltaTime * m_Speed; 
      transform.position = Vector3.Lerp(transform.position, m_Target.position, ratio); 
      transform.rotation = Quaternion.Slerp(transform.rotation, m_Target.rotation, ratio); 

      if (Vector3.Distance(transform.position, m_Target.position) < 0.001f) 
      { 
       transform.position = m_Target.position; 
       m_Translate = false; 
      } 
      if (Quaternion.Angle(transform.rotation, m_Target.rotation) < 0.001f) 
      { 
       transform.rotation = m_Target.rotation; 
       m_Rotate = false; 
      } 
     } 
    } 
} 
+0

Qu'avez-vous essayé jusqu'à présent? Pouvez-vous nous montrer du code? –

+0

je dû effacer mon code hier soir dans un accès de nerfs ^^ mais je regarde comme ça: 'public class MoveCamera: MonoBehavior { void start() {Liste myList = new List }' – CRC

+0

I pense que cela ne fonctionnera pas directement mais peut-être il y a d'autres façons d'accomplir indirectement e..g interface de marqueur, tag, ... Ça sonne comme une chose de début/fin de position. Il est donc intéressant de savoir quel est le but? Pouvez-vous attacher un MonBehaviour aux objets cibles? – Kay

Répondre

1

Je suggère simplement une simple liste publique dans votre script MoveCamera, puis en faisant glisser les cibles dans cette liste. De cette façon, vous avez un contrôle total sur l'ordre des objets et ainsi vous pouvez faire des transitions animées de la position de la caméra n à n + 1.

public List<Transform> cameraPositions = new List<Transform>(); 

Peut-être une simple séquence ne correspond pas à vos besoins et vous avez besoin d'une manière plus sophistiquée pour décider quelle position est autorisé à passer à laquelle autre position. Dans ce cas, je suggère un script d'aide, par exemple. CameraTransition.cs. Ici vous pouvez placer votre logique de vérification et les paramètres de définition.

Attachez ceci à chaque objet de position cible autorisé et remplacez la liste par MoveCamera par List<CameraTransition>.

2

Ok permet de voir si cela vous aide (je vais écrire mon code en supposant que vous voulez que cela) vous avez x GameObjects dans la scène.

Vous aurez besoin d'une liste GameObject. Disons que vous les obtenez en faisant

public List<GameObject> myObjectList = new List<GameObject>(); 
public List<Transform> myTransformList = new List<Transform>(); 
myObjectList = GameObject.FindGameObjectsWithTag("YourCustomTagHere"); 

foreach(Gameobject g in myObjectList) 
{ 
myTransformList.Add(g.transform); 
} 

Je ne sais pas si ce code fonctionne, je ne peux pas le tester en ce moment, mais je pense que la logique est là. Allez-y et essayez quelques petites choses, donnez votre avis si vous l'avez fait ou non.

+0

Bonjour, merci pour votre réponse! Je vais essayer cela mais le principal problème que j'ai c'est comment puis-je réussir à modifier cela dans l'inspecteur? Est-ce que cela va être modifiable dans l'inspecteur, est-ce que je pourrai ajouter de nombreuses transformations comme je le veux? Est-ce qu'ils auront toutes les transformations de position et de rotation? – CRC

+0

Lorsque vous déclarez une variable comme publique, elle sera visible dans l'inspecteur. Cependant, dans ce cas, c'est une liste de Transforms, donc je ne sais pas, sry. Mais je voudrais savoir que, si vous avez l'occasion de tester cela, donnez-moi quelques commentaires. –

+0

Merci encore pour vos réponses! Je ne suis pas en mesure de le tester maintenant tant que je suis au travail, mais quand je reviens chez moi, je vais le tester et vous donner un retour! – CRC