<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Seede XR]]></title><description><![CDATA[We specialize in using AR, VR, MR, 3D animations, and AI. We provide custom software development focused on automation and scalability, plus hybrid marketing th]]></description><link>https://blog.seedexr.com</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1725377120588/c1ee9824-d44e-4dca-bdfd-46405e02f22a.png</url><title>Seede XR</title><link>https://blog.seedexr.com</link></image><generator>RSS for Node</generator><lastBuildDate>Wed, 15 Apr 2026 18:03:32 GMT</lastBuildDate><atom:link href="https://blog.seedexr.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[What Makes A Man Real?]]></title><description><![CDATA[Art has a way of challenging the norms we take for granted. It forces us to pause and reflect, to see things from a different perspective. When I first saw Honesty by Annah Lot Nkyalu, I was struck by its message about masculinity and vulnerability. ...]]></description><link>https://blog.seedexr.com/what-makes-a-man-real</link><guid isPermaLink="true">https://blog.seedexr.com/what-makes-a-man-real</guid><category><![CDATA[Socialnorms]]></category><category><![CDATA[mentalhealth]]></category><category><![CDATA[Art]]></category><dc:creator><![CDATA[Bernard Masika]]></dc:creator><pubDate>Mon, 24 Feb 2025 13:50:34 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1740399897171/661e7850-1b00-4b78-a304-983968ca78c2.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Art has a way of challenging the norms we take for granted. It forces us to pause and reflect, to see things from a different perspective. When I first saw <em>Honesty</em> by Annah Lot Nkyalu, I was struck by its message about masculinity and vulnerability. It made me question the rigid ideas society has placed on what it means to be a man.</p>
<h3 id="heading-biography"><strong>Biography</strong></h3>
<p>Annah Lot Nkyalu (b.1997) is a Tanzanian figurative visual artist and art facilitator. She specializes in ink drawings, a skill she honed during her studies. Her work, built through layers of pen strokes, reflects societal struggles and strength, particularly focusing on youth. Annah’s art has been exhibited in Uganda, Canada, Zambia, and Germany. She has won multiple awards, including the Tanzania Fine Artists Competition (2019) and a residency in Ireland supporting children with cancer (2023). Currently, she is based in Dar es Salaam.</p>
<h3 id="heading-whats-special"><strong>What’s Special?</strong></h3>
<p>What immediately fascinated me about Annah’s work was her choice of medium ballpoint pen. Unlike other art tools that allow for erasures and corrections, every stroke of a pen is permanent. This means the artist has to be incredibly precise and confident in every line they draw. It’s amazing how she transforms an everyday object into something so powerful and expressive, whether on a canvas or wooden boards.</p>
<h3 id="heading-what-makes-a-man-real">What Makes A Man Real?</h3>
<p>Flowers in relationships are often seen as symbols of tenderness and emotion. When a man is shown holding and smelling flowers, it challenges the traditional belief that men should always be tough and unemotional. This artwork questions those stereotypes and asks: why should sensitivity and emotional openness be seen as weaknesses?</p>
<p>There’s a serious issue in society where men are discouraged from expressing emotions. Studies show that men, on average, live shorter lives than women, often because they suppress their struggles rather than seek help. From a young age, they are taught to “man up,” never to openly admit they are emotionally short, as a man you cannot cry no matter how sad you are, a man should always have solutions, a man cannot fail. Opening up about how bad you feel is seen as a weakness. You feel stressed or overwhelmed ? As a man, you cannot talk about it, especially with a woman, whether your wife or girlfriend. As a man, you cannot seek advice about a decision you want to make, just decide, no matter how foolish it may be. A strong man bears the bad consequences of his actions, even if he could have avoided them in the first place.</p>
<p>This mindset plants the roots of more stress, loneliness, and untreated mental health issues.</p>
<p>Many books have challenged these ideas. Mark Manson, in <em>The Subtle Art of Not Giving a F</em>ck*, puts it simply:</p>
<blockquote>
<p>“Being vulnerable or being okay with being seen as weak is in itself a strength.”</p>
</blockquote>
<p>Similarly, in <em>The Mask of Masculinity</em>, Lewis Howes explores how men hide behind emotional masks to fit societal expectations. He argues that true strength comes from embracing vulnerability and forming deeper connections. (<a target="_blank" href="https://www.mentallyfitpro.com/c/share-a-resource/5-must-read-books-on-men-s-self-improvement-and-mental-health?utm_source=chatgpt.com">Source</a>)</p>
<p>Another important book, <em>Man Kind: Tools for Mental Health, Well-Being, and Modernizing Masculinity</em> by Zachary Gerdes, discusses how traditional masculinity can limit men's emotional health. He provides tools to break free from outdated beliefs and embrace a healthier, more balanced identity. (<a target="_blank" href="https://pmc.ncbi.nlm.nih.gov/articles/PMC10666520/?utm_source=chatgpt.com">Source</a>)</p>
<p>A study published in the <em>American Journal of Men’s Health</em> highlights that rigid masculine norms contribute to mental health struggles. The research suggests that moving toward a more open, flexible understanding of masculinity leads to better emotional well-being. (<a target="_blank" href="https://pmc.ncbi.nlm.nih.gov/articles/PMC10666520/?utm_source=chatgpt.com">Source</a>)</p>
<p><em>Honesty</em> is a powerful reminder that true strength comes from being human, not from hiding emotions.</p>
<h3 id="heading-the-art-of-the-art"><strong>The Art of the Art</strong></h3>
<p>Annah’s shading technique is incredible. The details in the dreadlocks, the texture of the fabric, and the depth in the drawing make the artwork feel alive. And she did all of this using just a pen no room for mistakes, no shortcuts.</p>
<p>Her choice to include flowers is brilliant. You can see a man who is letting his guard down, embracing something delicate. This small yet meaningful detail speaks volumes about the need to break free from outdated ideas about masculinity.</p>
<h3 id="heading-why-this-matters"><strong>Why This Matters</strong></h3>
<p>Men’s mental health is a crisis that’s often overlooked. Many men struggle alone because they fear being judged if they show vulnerability. This artwork forces us to ask: what truly makes a man real? Is it being strong all the time, or is it the ability to be open, to ask for help, to admit struggles?</p>
<p>Being a real man isn’t about fitting into old stereotypes, it’s about being human.</p>
<h3 id="heading-other-works"><strong>Other Works</strong></h3>
<p>For over five years, Annah has mastered the use of ballpoint pens to create stunning, thought-provoking pieces. Her portfolio is filled with incredible artwork, and you can explore more of her work <a target="_blank" href="https://linktr.ee/annahnkyalu">Here (link to portfolio)</a> or on Instagram at <a target="_blank" href="https://www.instagram.com/Annahnkyalu">@Annahnkyalu</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Unity Video Player: How to know if the video has finished playing]]></title><description><![CDATA[Introduction
Unity Engine has a special component for playing a video file during runtime. It’s called Video Player. It works by attaching the Video file to the GameObjects and play them on that GameObject’s Texture at run time.

How to use Video Pla...]]></description><link>https://blog.seedexr.com/unity-video-player-how-to-know-if-the-video-has-finished-playing</link><guid isPermaLink="true">https://blog.seedexr.com/unity-video-player-how-to-know-if-the-video-has-finished-playing</guid><category><![CDATA[unity]]></category><category><![CDATA[Game Development]]></category><dc:creator><![CDATA[Bernard Masika]]></dc:creator><pubDate>Tue, 15 Oct 2024 06:00:51 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1728983393901/9482a314-f83a-4aea-9edb-a7cebc970142.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-introduction">Introduction</h2>
<p>Unity Engine has a special component for playing a video file during runtime. It’s called <strong><em>Video Player</em></strong>. It works by attaching the Video file to the GameObjects and play them on that GameObject’s <strong><em>Texture</em></strong> at run time.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1728900800017/109dad58-fd8c-4479-82e0-3f28fa8e9342.png" alt="Screenshot of a Unity editor interface showing a scene with a selected plane object in the center. The hierarchy panel on the left lists &quot;Main Camera,&quot; &quot;Directional Light,&quot; and &quot;Plane.&quot; The inspector panel on the right displays properties for the plane, including &quot;Transform,&quot; &quot;Mesh Filter,&quot; &quot;Mesh Renderer,&quot; &quot;Mesh Collider,&quot; and &quot;Video Player&quot; components. A green arrow points at the &quot;Video Player&quot; component." class="image--center mx-auto" /></p>
<p><strong>How to use Video Player</strong></p>
<p>To achieve what’s shown on the screenshot above;</p>
<ul>
<li><p>Create a GameObject on the hierarchy by right clicking on it and select the object you want ( I chose plane),</p>
</li>
<li><p>Then on the inspector column (at your far right, if you didn’t change the default editor layout) click <em>add component</em> and search for Video Player.</p>
</li>
<li><p><strong>REMEMBER:</strong> The GameObject you select must have a texture on it, as per our definition.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1728901547331/3d14685f-0494-4629-8871-824287a73ada.png" alt class="image--center mx-auto" /></p>
<ul>
<li><p>Now, drag your video file to the Video clip property on the Video player component.</p>
</li>
<li><p>Click play to watch your video, Easy right!</p>
</li>
<li><p><strong>NB:</strong> The above example uses the default texture of the gameobject, there are more ways to specify the texture depending on your scenario, but I won’t cover them today!</p>
</li>
</ul>
<h2 id="heading-why-will-you-want-to-know-the-video-has-finished-play">Why will you want to know the video has finished play</h2>
<p>In one or more scenarios, you may want part of your app to be aware when a certain video has finished playing. just to mention a few;</p>
<ul>
<li><p><strong>Transition to Another Scene or Event</strong>: You might want to transition to a new scene, trigger an animation, or load new content once the video is done. For example, after an intro video plays, you could switch to the main menu.</p>
</li>
<li><p><strong>Display User Interface (UI)</strong>: When a video ends, you could bring up buttons or menus, such as a "Replay" button, or options for the player to proceed to the next level or restart</p>
</li>
<li><p><strong>Tutorials or Guides</strong>: After a tutorial video finishes, you may want to unlock a new feature, prompt users with the next instruction, or trigger the next step in a learning sequence.</p>
</li>
<li><p>and many more..</p>
</li>
</ul>
<p>At the moment of writing, there’s no direct indicator in the Inspector to know when a video has finished, you will have to create a custom script for it.</p>
<h2 id="heading-how-to-do-it">How to do it.</h2>
<p>There are a few quick ways to do it;</p>
<ol>
<li><p>By Using Video Player Event called <code>loopPointReached</code><strong><em>.</em></strong> An Event Invoked when the Video Player reaches the end of the content to play. <strong>(Recommended Way)</strong></p>
<pre><code class="lang-csharp"> <span class="hljs-keyword">using</span> UnityEngine;
 <span class="hljs-keyword">using</span> UnityEngine.Video;

 <span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title">VideoEndCheck</span> : <span class="hljs-title">MonoBehaviour</span>
 {
     <span class="hljs-keyword">public</span> VideoPlayer videoPlayer;

     <span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">Start</span>(<span class="hljs-params"></span>)</span>
     {
         videoPlayer.loopPointReached += OnVideoEnd;
     }

     <span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">OnVideoEnd</span>(<span class="hljs-params">VideoPlayer vp</span>)</span>
     {
         Debug.Log(<span class="hljs-string">"Video has finished playing!"</span>);
         <span class="hljs-comment">// You can add any action you want to take here.</span>
     }
 }
</code></pre>
</li>
</ol>
<p><strong>Script Breakdown</strong></p>
<ul>
<li><p>We created a public variable of type <code>VideoPlayer</code> to allow us assign a <code>VideoPlayer</code> component from the Unity Editor to the script.</p>
</li>
<li><p>In the Start Method, we registered Our method <code>OnVideoEnd</code> as an event handler for the <code>loopPointReached</code> event of the <code>VideoPlayer</code>. Basically it means,</p>
<p>  <em>“Hey unity when you trigger the event loopPointReached for this video player, please call our method OnVideoEnd()”</em></p>
</li>
<li><p>We then define our Method where you can do what you wanted when the video ends.</p>
<p>  <strong>Must I include the parameters in the method?</strong></p>
<p>  Absolutely YES, why?;</p>
<ul>
<li><p><strong>Event Structure</strong>: The <code>loopPointReached</code> event passes a <code>VideoPlayer</code> parameter, so the event handler (<code>OnVideoEnd</code>) must match that expected signature, meaning it should take a <code>VideoPlayer</code> parameter.</p>
</li>
<li><p><strong>Accessing the VideoPlayer</strong>: Inside the event handler, you might need to interact with the specific <code>VideoPlayer</code> instance that finished playing, such as for pausing, restarting, or querying its state. The <code>vp</code> argument provides a way to do that.</p>
</li>
<li><p><strong>Scalability</strong>: If you are handling multiple <code>VideoPlayer</code> instances in a scene, you can differentiate which one triggered the event by referencing <code>vp</code>. Without this parameter, the event would be less flexible for more complex scenarios.</p>
</li>
</ul>
</li>
</ul>
<ol start="2">
<li><p>By comparing between <code>videoPlayer.frameCount</code> and <code>videoPlayer.frame</code> properties.</p>
<pre><code class="lang-csharp"> <span class="hljs-keyword">using</span> UnityEngine;
 <span class="hljs-keyword">using</span> UnityEngine.Video;

 <span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title">VideoFrameCheck</span> : <span class="hljs-title">MonoBehaviour</span>
 {
     <span class="hljs-keyword">public</span> VideoPlayer videoPlayer;

     <span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">Update</span>(<span class="hljs-params"></span>)</span>
     {
         <span class="hljs-comment">// Check if the current frame is the last frame of the video</span>
         <span class="hljs-keyword">if</span> (videoPlayer.frame &gt;= (<span class="hljs-keyword">long</span>)(videoPlayer.frameCount - <span class="hljs-number">1</span>))
         {
             Debug.Log(<span class="hljs-string">"Video has finished playing!"</span>);
             <span class="hljs-comment">// Add any other action you want to take here.</span>
         }
     }
 }
</code></pre>
<p> <strong>How it works:</strong></p>
<ul>
<li><p><code>videoPlayer.frameCount</code> gives the total number of frames in the video.</p>
</li>
<li><p><code>videoPlayer.frame</code> provides the current frame the video player is on.</p>
</li>
<li><p>When the current frame (<code>videoPlayer.frame</code>) reaches or exceeds the total number of frames minus one (<code>videoPlayer.frameCount - 1</code>), it means the video has finished.</p>
</li>
<li><p>We subtract 1 from <code>videoPlayer.frameCount</code> because frames in Unity are <strong>zero-indexed</strong>. This means that the first frame of the video is frame 0, and the last frame is <code>frameCount - 1</code>. If a video has, for example, 100 frames, they are indexed from 0 to 99.</p>
</li>
</ul>
</li>
<li><p>Using <code>isPlaying</code> Property to check if the video has stopped playing.</p>
</li>
</ol>
<ul>
<li><p>This means we need to check the video player if its still playing the video or not every time (every frame).</p>
<pre><code class="lang-csharp">  <span class="hljs-keyword">using</span> UnityEngine;
  <span class="hljs-keyword">using</span> UnityEngine.Video;

  <span class="hljs-keyword">public</span> <span class="hljs-keyword">class</span> <span class="hljs-title">VideoCheckIsPlaying</span> : <span class="hljs-title">MonoBehaviour</span>
  {
      <span class="hljs-keyword">public</span> VideoPlayer videoPlayer;

      <span class="hljs-function"><span class="hljs-keyword">void</span> <span class="hljs-title">Update</span>(<span class="hljs-params"></span>)</span>
      {
          <span class="hljs-keyword">if</span> (!videoPlayer.isPlaying)
          {
              Debug.Log(<span class="hljs-string">"Video has finished playing!"</span>);
              <span class="hljs-comment">// You can add any action you want to take here.</span>
          }
      }
  }
</code></pre>
</li>
<li><p>We put our block of code for checking the status in the Update() method because it gets called every frame.</p>
</li>
</ul>
<h2 id="heading-conclusion">Conclusion.</h2>
<p><strong>Which one is the best way then!?</strong></p>
<ul>
<li><p>The most recommended approach is using the <strong>event</strong> (<code>loopPointReached</code>). This is because it is event-driven, meaning it only triggers when the video ends, making it efficient and avoiding unnecessary checks every frame.</p>
</li>
<li><p>The second best option is <strong>checking the frame count</strong>, which provides precise control by allowing you to directly compare the current frame with the total frame count of the video. However, this requires additional computation and frame checks in every <code>Update()</code> cycle, which can be very expensive in terms of performance</p>
</li>
<li><p>Lastly, <strong>using</strong> <code>isPlaying</code> is the least recommended as it only checks if the video is currently playing. It doesn't differentiate between the video ending or being paused, so it may require extra conditions to accurately detect the video's completion.</p>
</li>
</ul>
<h2 id="heading-references">References.</h2>
<ul>
<li><p><a target="_blank" href="https://discussions.unity.com/t/how-to-know-video-player-is-finished-playing-video/671347/3">https://discussions.unity.com/t/how-to-know-video-player-is-finished-playing-video/671347/3</a></p>
</li>
<li><p><a target="_blank" href="https://docs.unity3d.com/ScriptReference/Video.VideoPlayer.html">https://docs.unity3d.com/ScriptReference/Video.VideoPlayer.html</a></p>
</li>
</ul>
<div data-node-type="callout">
<div data-node-type="callout-emoji">💡</div>
<div data-node-type="callout-text">I welcome any feedback in the comments, Let’s linkup on <a target="_blank" href="https://www.linkedin.com/in/bernard-masika/">LinkedIn</a>. Happy coding!</div>
</div>]]></content:encoded></item></channel></rss>