Conversation
…ory-Repos/deathrun-game into wip/streaming-texture
WalkthroughCette demande de tirage introduit plusieurs fichiers et modifications dans un projet Unity. Un nouveau fichier de métadonnées pour le prefab de caméra a été créé, ainsi qu'un prefab pour un système de streaming, comprenant des objets de jeu et des composants associés. Des modifications ont également été apportées à une scène existante, mettant à jour divers paramètres de rendu et d'objets. Enfin, un nouveau script a été ajouté pour capturer des images à partir d'une caméra de rendu et les envoyer via une connexion Socket.IO. Changes
Possibly related PRs
Suggested reviewers
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Actionable comments posted: 6
🧹 Outside diff range and nitpick comments (1)
Assets/Scripts/Camera Control/RenderCameraCapture.cs (1)
14-14: Le champframeIndexest déclaréstaticLe champ
frameIndexest déclaréstatic, ce qui signifie qu'il est partagé entre toutes les instances deRenderCameraCapture. Si plusieurs instances de cette classe sont utilisées, elles partageront le même compteur de frames. Est-ce le comportement souhaité ? Sinon, envisagez de le déclarer sans le modificateurstatic.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (6)
- Assets/Prefabs/Camera.meta (1 hunks)
- Assets/Prefabs/Camera/StreamingSystem.prefab (1 hunks)
- Assets/Prefabs/Camera/StreamingSystem.prefab.meta (1 hunks)
- Assets/Scenes/EmptyRoom_2.unity (3 hunks)
- Assets/Scripts/Camera Control/RenderCameraCapture.cs (1 hunks)
- Assets/Scripts/Camera Control/RenderCameraCapture.cs.meta (1 hunks)
✅ Files skipped from review due to trivial changes (3)
- Assets/Prefabs/Camera.meta
- Assets/Prefabs/Camera/StreamingSystem.prefab.meta
- Assets/Scripts/Camera Control/RenderCameraCapture.cs.meta
🔇 Additional comments (8)
Assets/Prefabs/Camera/StreamingSystem.prefab (4)
113-115: Vérifier les paramètres de la caméra de renduLes plans de découpage (near: 0.2, far: 10) semblent très restrictifs pour une caméra de streaming. Cela pourrait limiter la visibilité des objets distants.
Considérez d'ajuster :
- near clip plane: 0.1
- far clip plane: 100
pour une meilleure visibilité.
201-203: Position de la caméra à vérifierLa position initiale (4.4, 3.8, -10) semble arbitraire. Assurez-vous que cette position offre une vue appropriée de la scène à streamer.
Considérez de :
- Documenter pourquoi cette position spécifique a été choisie
- Ajouter des commentaires sur la zone de visualisation attendue
119-121: Vérifier le masque de cullingLe masque de culling est défini à 87 (bits: 0b1010111). Assurez-vous que cela correspond aux layers nécessaires pour le streaming.
#!/bin/bash # Rechercher d'autres utilisations du même masque rg "m_Bits: 87" -A 2 -B 2
47-48: Référence de caméra principale manquanteLa référence
mainCameran'est pas assignée, ce qui pourrait causer des problèmes lors de l'exécution si le script en dépend.✅ Verification successful
Let me gather more information about the mainCamera usage in the codebase.
La référence manquante de mainCamera est attendue
La référence non assignée de
mainCameradans le prefab StreamingSystem est normale et ne pose pas de problème. Le scriptRenderCameraCaptureutilise cette référence pour synchroniser la position et la rotation de la caméra de rendu avec la caméra principale, qui sera assignée dynamiquement lors de l'exécution. Cette configuration est cohérente avec l'architecture du système de streaming.🏁 Scripts executed
The following scripts were executed for the analysis:
Script:
#!/bin/bash # Vérifier si le script utilise mainCamera ast-grep --pattern 'mainCamera'Length of output: 645
Script:
#!/bin/bash # Search for mainCamera references in C# scripts rg "mainCamera" -t cs -A 3 -B 3Length of output: 5937
Assets/Scenes/EmptyRoom_2.unity (3)
922-926:⚠️ Potential issueVérification requise pour le composant Camera marqué comme 'stripped'.
Le composant Camera ajouté aux lignes 922-926 est indiqué comme 'stripped', ce qui peut signifier que les données du composant sont manquantes ou corrompues. Cela peut entraîner des problèmes lors de l'exécution du jeu. Veuillez vérifier que le composant Camera est correctement ajouté et configuré dans la scène.
985-991:⚠️ Potential issueÉvitez d'avoir plusieurs AudioListeners actifs dans la scène.
Aux lignes 985-991, un composant AudioListener a été ajouté. En Unity, il est recommandé de n'avoir qu'un seul AudioListener actif par scène pour éviter des conflits audio ou des avertissements. Veuillez vous assurer qu'il n'y a qu'un seul AudioListener actif dans la scène.
993-994: Vérifiez les paramètres du Culling Mask du composant Camera.Le Culling Mask est défini sur 4294967295 aux lignes 993-994, ce qui signifie que la caméra rendra toutes les couches. Cela peut avoir un impact sur les performances si des couches inutiles sont rendues. Veuillez confirmer si c'est l'effet recherché ou ajuster le Culling Mask pour inclure uniquement les couches nécessaires.
Exécutez le script suivant pour lister les valeurs de Culling Mask de toutes les caméras du projet :
Assets/Scripts/Camera Control/RenderCameraCapture.cs (1)
28-51: Synchronisation des caméras et capture des frames dans la méthodeUpdate()La méthode
Update()synchronise les transformations des caméras et gère la capture des frames. Cependant, simainCameraourenderCamerasont nulles, cela pourrait entraîner des exceptions. Assurez-vous que ces caméras sont toujours assignées ou ajoutez une gestion pour le cas où elles ne le seraient pas.
| m_HDR: 1 | ||
| m_AllowMSAA: 0 | ||
| m_AllowDynamicResolution: 0 | ||
| m_ForceIntoRT: 0 | ||
| m_OcclusionCulling: 0 | ||
| m_StereoConvergence: 10 | ||
| m_StereoSeparation: 0.022 |
There was a problem hiding this comment.
🛠️ Refactor suggestion
Configuration de rendu à optimiser
Plusieurs paramètres de rendu pourraient être optimisés pour le streaming :
- HDR activé mais MSAA désactivé
- Pas d'occlusion culling
Suggestions pour le streaming en temps réel :
- Désactiver HDR si non nécessaire
- Activer l'occlusion culling pour de meilleures performances
- Considérer l'activation du MSAA pour une meilleure qualité visuelle
| private RenderTexture renderTexture; | ||
| private Texture2D texture; | ||
| private float timeSinceLastCapture = 0f; | ||
| private float captureInterval = 0f; |
There was a problem hiding this comment.
captureInterval est initialisé à zéro, entraînant une capture à chaque frame
Le champ captureInterval est initialisé à 0f, ce qui fait que la condition timeSinceLastCapture >= captureInterval est toujours vraie dans la méthode Update(). Cela entraîne une capture à chaque frame, ce qui peut affecter les performances. Voulez-vous définir un intervalle spécifique entre les captures ? Si oui, pensez à initialiser captureInterval avec une valeur supérieure à zéro ou à le rendre configurable via l'Inspector.
| async void Start() | ||
| { | ||
| int width = 1280; | ||
| int height = 720; | ||
|
|
||
| renderTexture = new RenderTexture(width, height, 24); | ||
| renderCamera.targetTexture = renderTexture; | ||
| texture = new Texture2D(width, height, TextureFormat.RGB24, false); | ||
| socket = SocketManager.Instance.ClientSocket; | ||
| } |
There was a problem hiding this comment.
Absence de gestion des exceptions dans la méthode Start()
La méthode Start() effectue des initialisations importantes, mais aucune gestion des exceptions n'est présente. Si une erreur survient lors de l'initialisation du socket ou des textures, cela pourrait entraîner des problèmes silencieux. Envisagez d'ajouter un bloc try-catch pour gérer d'éventuelles exceptions et informer l'utilisateur en cas d'échec.
| async void SendFrameToSocketIO() | ||
| { | ||
| if (socket != null && socket.Connected) | ||
| { | ||
| Debug.Log("Sending frame " + frameIndex); | ||
| byte[] imageBytes = texture.EncodeToJPG(); | ||
| string base64Image = System.Convert.ToBase64String(imageBytes); | ||
| await socket.EmitAsync("camera:request", base64Image); | ||
| } | ||
| } |
There was a problem hiding this comment.
🛠️ Refactor suggestion
Utilisation de async void pour les méthodes asynchrones
Les méthodes SendFrameToSocketIO() et OnDestroy() sont déclarées en tant que async void. Il est généralement recommandé d'utiliser async Task pour les méthodes asynchrones afin de permettre une meilleure gestion des exceptions et d'éviter les problèmes liés aux méthodes asynchrones non attendues.
| Debug.Log("Sending frame " + frameIndex); | ||
| byte[] imageBytes = texture.EncodeToJPG(); | ||
| string base64Image = System.Convert.ToBase64String(imageBytes); | ||
| await socket.EmitAsync("camera:request", base64Image); |
There was a problem hiding this comment.
🛠️ Refactor suggestion
Impact sur les performances dû à l'encodage JPEG et la conversion Base64
La méthode SendFrameToSocketIO() encode l'image en JPEG puis la convertit en chaîne Base64 à chaque envoi. Ces opérations sont coûteuses en termes de performances et peuvent entraîner des pics de mémoire, surtout si les captures sont fréquentes. Envisagez d'optimiser ce processus en réduisant la fréquence des captures, en utilisant un format d'image moins gourmand, ou en mettant en place une file d'attente pour les envois afin de lisser la charge.
| if (socket != null && socket.Connected) | ||
| { | ||
| Debug.Log("Sending frame " + frameIndex); | ||
| byte[] imageBytes = texture.EncodeToJPG(); | ||
| string base64Image = System.Convert.ToBase64String(imageBytes); | ||
| await socket.EmitAsync("camera:request", base64Image); | ||
| } |
There was a problem hiding this comment.
Absence de gestion des exceptions lors de l'envoi des données via le socket
Actuellement, aucune gestion des exceptions n'est mise en place lors de l'émission des données avec socket.EmitAsync(). Si une erreur réseau survient, cela pourrait provoquer des exceptions non gérées. Il serait judicieux d'ajouter un bloc try-catch pour capturer et gérer ces exceptions, garantissant ainsi la stabilité de l'application.
* Chore/shadering map (#24) * technical : add shadering and post-traitement system, adapt asset and sprite for using this * feat: update Room2 * feat: Link the chat to the back sockets (#25) * feat: Link chat to backend (#26) * feat: Link the chat to the back sockets * fix: Move the dialogue script outside the canvas to avoid it to be disabled while the canvas is going to be disabled * fix: remove dual camera * fix: fix crossbow system (#27) * fix: add request to back (room name) * fix: Revert trap manager * hotfix: Fix things that weren't working * feat: RPS (#29) * feat : add multiple option and itemscollider for RockPaperCissor * feat: Link Rock Paper Scissors to backend socket * feat: Link RockPaperScissors, but display missing --------- Co-authored-by: Thomas Lamiable <lamiablethomas@gmail.com> * hotfix: Change RPS size to match the screen * fix: fix Crossbow up sprite and arrow system, change color pixel dead font * chore: change EmptyRoom2 * feat: add death system (#30) * feat: add death system * chore: add socket emiter for end game * fix: fix heart generator if develop don't have socket * fix: remove crossbow * feature: add audio system and fix crossbow with sound (#32) Co-authored-by: Guillaume MORET <90462045+AyakorK@users.noreply.github.com> * chore: Fix env for windows (#31) * feat: add death system * chore: add socket emiter for end game * fix: fix heart generator if develop don't have socket * fix: remove crossbow * chore: try to fix .env for Windows and Unity * fix: Quick Fix in production * fix: QuickFx PlayerHealth fail merge * Fix: fix Room * feat: Adapt Waiting Room (#33) * feat: Instantiate waiting room when arriving in the corridor 0 * fix: Add a flag to change message one time and avoid repetition of it * feat: Add the creation of the room when instanciating the WaitingRoom process * feat: Try to remove the Door collider before game has started * fix: fix lock and door system, add waiting room, last fix for dialogue system for pity --------- Co-authored-by: Thomlam <lamiablethomas@gmail.com> * fix: rename bear_trap to prefab * fix: quick fix prefab room for crossbow * fix: quickfix for bear_trap * feat: Add room deletion when disconnection from a game * Wip/streaming back (#35) * feat: add streaming system with recording and sending frame jpeg * feat: add config * feat: first try to add socketIOSystem * feat: Add the right socket * feature : deploy for 60fps --------- Co-authored-by: AyakorK <guillaume.moret@yahoo.com> * hotfix: Get rid of a Debug * fix: fix arrows component and stade 24 fps to streaming * fix: Global rendering fixes (#36) * fix: Update corridor displays + additions of colliders to avoid glitching * fix: Add a door transition lock * feat: Add collision to the walls in the room * fix: Fix collisions of the hole * fix: Fix glitched hitboxes * fix: Destory arrows when going to an other room --------- Co-authored-by: Guillaume MORET <90462045+AyakorK@users.noreply.github.com> Co-authored-by: AyakorK <guillaume.moret@yahoo.com>
Summary by CodeRabbit
Nouvelles Fonctionnalités
Modifications
EmptyRoom_2.EmptyRoom_2.Fichiers de Métadonnées
Camera.metaetStreamingSystem.prefab.meta.