<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Python on GameSweetGame</title><link>https://gamesweetgame.com/en/tags/python/</link><description>Recent content in Python on GameSweetGame</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Tue, 20 Jan 2026 11:00:00 +0900</lastBuildDate><atom:link href="https://gamesweetgame.com/en/tags/python/index.xml" rel="self" type="application/rss+xml"/><item><title>Applying Custom Motion Capture Animations to Your Game</title><link>https://gamesweetgame.com/en/p/applying-custom-motion-capture-animations-to-your-game/</link><pubDate>Tue, 20 Jan 2026 11:00:00 +0900</pubDate><guid>https://gamesweetgame.com/en/p/applying-custom-motion-capture-animations-to-your-game/</guid><description>&lt;p&gt;I want to make a polished action game. Let&amp;rsquo;s custom-make the attack animations.&lt;/p&gt;
&lt;p&gt;I referenced this motion capture project on GitHub:&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://github.com/SAKTHIVINASH2/3D-Motion-Capture-From-Video" target="_blank" rel="noopener"
 &gt;GitHub - 3D Motion Capture From Video&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Using a Python pose estimation library, you can extract keypoint coordinates for head, shoulders, arms, legs, etc. These coordinates are then converted for use in Unity.&lt;/p&gt;
&lt;h2 id="overall-flow"&gt;Overall Flow
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;External pose data (33 keypoints)&lt;/li&gt;
&lt;li&gt;Convert to Unity coordinate system&lt;/li&gt;
&lt;li&gt;Point objects (P0~P32)&lt;/li&gt;
&lt;li&gt;Estimate rotation relative to bind direction&lt;/li&gt;
&lt;li&gt;Root direction (yaw + slight tilt) estimation with smoothing&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="normalizing-file-values--axis-correction"&gt;Normalizing File Values + Axis Correction
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;float&lt;/span&gt; px = &lt;span style="color:#66d9ef"&gt;float&lt;/span&gt;.Parse(toks[i * &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt; + &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;]) / scaleXY;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;float&lt;/span&gt; py = &lt;span style="color:#66d9ef"&gt;float&lt;/span&gt;.Parse(toks[i * &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt; + &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;]) / scaleXY;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;float&lt;/span&gt; pz = &lt;span style="color:#66d9ef"&gt;float&lt;/span&gt;.Parse(toks[i * &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt; + &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;]) / scaleZ;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;Different XY/Z scales: Video-based pose estimation has much more noise in depth (Z)&lt;/li&gt;
&lt;li&gt;invertZ: Corrects coordinate system difference between MediaPipe and Unity&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="storing-bind-rotation"&gt;Storing Bind Rotation
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lUpperBind = lUpperArm.rotation;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Reference rotation from the T-Pose.&lt;/p&gt;
&lt;h2 id="automatic-bind-direction-estimation"&gt;Automatic Bind Direction Estimation
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;lUpperBindDir = (lLowerArm.position - lUpperArm.position).normalized;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The core concept: &lt;strong&gt;which direction was this bone originally facing?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;UpperArm → LowerArm direction = &lt;strong&gt;bone&amp;rsquo;s reference forward vector&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Motion capture result" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px"&gt;&lt;/p&gt;
&lt;p&gt;A bit rough, but the motion came through. Now it&amp;rsquo;s time to refine it in Blender.&lt;/p&gt;</description></item><item><title>Python Star Pattern with While Loop</title><link>https://gamesweetgame.com/en/p/python-star-pattern-with-while-loop/</link><pubDate>Sun, 28 Nov 2021 00:00:00 +0900</pubDate><guid>https://gamesweetgame.com/en/p/python-star-pattern-with-while-loop/</guid><description>&lt;p&gt;Instead of a simple star pattern, let&amp;rsquo;s take user input to decide how many rows to print.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;☆
☆☆
☆☆☆
☆☆☆☆
☆☆☆☆☆
&lt;/code&gt;&lt;/pre&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; int(input(&lt;span style="color:#e6db74"&gt;&amp;#34;Enter the number of rows: &amp;#34;&lt;/span&gt;))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;star &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;True&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; print(&lt;span style="color:#e6db74"&gt;&amp;#34;☆&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; star)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; star &lt;span style="color:#f92672"&gt;==&lt;/span&gt; i:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;break&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; star &lt;span style="color:#f92672"&gt;+=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;input()&lt;/code&gt; returns a string by default. Convert it to &lt;code&gt;int&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;while True&lt;/code&gt; creates an infinite loop.&lt;/li&gt;
&lt;li&gt;Each iteration prints stars and increments by 1. When it matches the input, &lt;code&gt;break&lt;/code&gt; stops the loop.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="Result" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px"&gt;&lt;/p&gt;
&lt;p&gt;Entering 7 prints stars from 1 to 7 rows.&lt;/p&gt;</description></item><item><title>Python: Search Lists and Strings with the "in" Operator</title><link>https://gamesweetgame.com/en/p/python-search-lists-and-strings-with-the-in-operator/</link><pubDate>Wed, 24 Nov 2021 00:00:00 +0900</pubDate><guid>https://gamesweetgame.com/en/p/python-search-lists-and-strings-with-the-in-operator/</guid><description>&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;result1 &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;in&lt;/span&gt; [&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;result2 &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt; &lt;span style="color:#f92672"&gt;in&lt;/span&gt; [&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;result3 &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;not&lt;/span&gt; &lt;span style="color:#f92672"&gt;in&lt;/span&gt; [&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;result4 &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt; &lt;span style="color:#f92672"&gt;not&lt;/span&gt; &lt;span style="color:#f92672"&gt;in&lt;/span&gt; [&lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;, &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;result5 &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;j&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;in&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;python&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;result6 &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;y&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;in&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;python&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;result7 &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;y&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;not&lt;/span&gt; &lt;span style="color:#f92672"&gt;in&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;python&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print(result1) &lt;span style="color:#75715e"&gt;# True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print(result2) &lt;span style="color:#75715e"&gt;# False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print(result3) &lt;span style="color:#75715e"&gt;# False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print(result4) &lt;span style="color:#75715e"&gt;# True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print(result5) &lt;span style="color:#75715e"&gt;# False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print(result6) &lt;span style="color:#75715e"&gt;# True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;print(result7) &lt;span style="color:#75715e"&gt;# False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img alt="Output" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;result1&lt;/code&gt;: Is 1 in &lt;code&gt;[1, 2, 3]&lt;/code&gt;? → Yes → &lt;code&gt;True&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;result2&lt;/code&gt;: Is 5 in &lt;code&gt;[1, 2, 3]&lt;/code&gt;? → No → &lt;code&gt;False&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;not in&lt;/code&gt; is simply the opposite&lt;/li&gt;
&lt;li&gt;Strings work just like lists&lt;/li&gt;
&lt;li&gt;&lt;code&gt;result5&lt;/code&gt;: Is &amp;ldquo;j&amp;rdquo; in &amp;ldquo;python&amp;rdquo;? → No → &lt;code&gt;False&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>