<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Kenji | Unity Game Dev</title>
    <description>The latest articles on Forem by Kenji | Unity Game Dev (@kenjidev9662).</description>
    <link>https://forem.com/kenjidev9662</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3737349%2F7717d20c-e73a-4d2f-aef7-060d453a15aa.jpg</url>
      <title>Forem: Kenji | Unity Game Dev</title>
      <link>https://forem.com/kenjidev9662</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/kenjidev9662"/>
    <language>en</language>
    <item>
      <title>Practical Workflow for AI Pixel Art: Gemini 2D Animation Experiment</title>
      <dc:creator>Kenji | Unity Game Dev</dc:creator>
      <pubDate>Sat, 14 Mar 2026 21:56:29 +0000</pubDate>
      <link>https://forem.com/kenjidev9662/practical-workflow-for-ai-pixel-art-gemini-2d-animation-experiment-21le</link>
      <guid>https://forem.com/kenjidev9662/practical-workflow-for-ai-pixel-art-gemini-2d-animation-experiment-21le</guid>
      <description>&lt;p&gt;For this experiment, I summarized the workflow of using Gemini's image generation model, "Nano Banana 2," to generate sprite sheets for a 2D action game and implement them into Unity, along with tips to stabilize the output. To jump straight to the conclusion: the results were far more practical than expected.&lt;/p&gt;

&lt;p&gt;

&lt;iframe class="tweet-embed" id="tweet-2032170858035257577-727" src="https://platform.twitter.com/embed/Tweet.html?id=2032170858035257577"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2032170858035257577-727');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2032170858035257577&amp;amp;theme=dark"
  }





 &lt;/p&gt;



&lt;p&gt;&lt;strong&gt;【The Prompt Used】&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//{Prompt}
//2D side-scrolling pixel art style (dot-picture).
//Only requires the side view; no other directions.
//Create a female sword-wielding protagonist with long red hair.
//The style should be RPG-like, a fusion of medieval and modern fashion, making it cute.
//The character naturally has red hair, which changes to platinum blonde when holding a sword. 
//Include a visual sequence for the transition from red to platinum blonde while drawing the sword.
//Must include the following actions:
//1. Idle Action
//2. Attack Actions (Combo 1,2,3)
//3. Walking/Runing Action
//4. Death Action
//5. Action of eating a steamed bun
//Pure black background for all of the above actions.
//Each action must have its corresponding animation frames.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;【Basic Action Generation and the Strength of the "Infinite Gacha"】&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First, regarding basic motions like idling and walking. In this regard, Gemini handles the task perfectly.&lt;/p&gt;

&lt;p&gt;The biggest advantage of using Gemini is that you can endlessly "pull the gacha" (regenerate) up to 100 times a day until you are satisfied. The consistency of the character design is also exceptionally high; by continuing the chat, you can successively derive different action modules based on the same character.&lt;/p&gt;

&lt;p&gt;Furthermore, based on a generated image, you can give instructions like, "Keep this part unchanged, but fix only this specific area." This makes it possible to repeatedly make minor adjustments while maintaining the overall design and vibe of the character. When creating a series of motions for the same character over the long term, this feature is indispensable.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;【Challenges and Limitations of Complex Attack Combos】&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffdwbwfkxzmz2wwpjktnl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffdwbwfkxzmz2wwpjktnl.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;While simple movements are perfect, once you specify "complex and continuous actions" like attack combos, it suddenly becomes difficult to maintain movement consistency.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Countermeasures and Compromises:&lt;/p&gt;

&lt;p&gt;Instead of trying to generate complex actions in a single shot, break down the flow and give instructions frame by frame. &lt;br&gt;
Subdivide the prompts into steps like "raise the sword" and "swing down," and relentlessly regenerate (loop) like a gacha game until you pull an output that is closest to your ideal.&lt;/p&gt;

&lt;p&gt;While there is still significant room for improvement in the overall fluidity of the animation, looking at it frame by frame reveals pixel art of more than sufficient quality. Sometimes, it even renders effects that can be used directly as VFX.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Background Transparency Workflow (Black Background + Photoshop)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A clear issue at this point is that the AI alone cannot directly output a "PNG image with a transparent background."&lt;/p&gt;

&lt;p&gt;Countermeasure:&lt;br&gt;
Forcefully instruct the prompt to "make the background completely black (or a solid color like green)." After that, bring the generated image into a tool like Photoshop and manually cut out the black background to apply transparency. It takes a bit of extra effort, but this is the most reliable method at present.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pros:&lt;/p&gt;

&lt;p&gt;Simple movements (idle, walk, etc.) can be generated perfectly while maintaining consistency.&lt;/p&gt;

&lt;p&gt;By continuing the chat, you can mass-produce derivative motions of the same character.&lt;br&gt;
Partial modification instructions are possible while preserving the base image.&lt;/p&gt;

&lt;p&gt;Cons (Challenges):&lt;/p&gt;

&lt;p&gt;It is difficult to maintain continuity for complex actions (combos, etc.), requiring frame-by-frame instructions and trial-and-error (gacha).&lt;br&gt;
Since it cannot output with a transparent background, specifying a solid color background and manually cutting it out with an external tool is mandatory.&lt;/p&gt;




&lt;p&gt;While still in the trial-and-error stage, it already has sufficient potential as a tool to dramatically speed up prototype production. I plan to continue verifying and testing this going forward!&lt;/p&gt;




&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;X (Twitter):&lt;/strong&gt; &lt;a href="https://twitter.com/kenjiDev9662" rel="noopener noreferrer"&gt;@kenjiDev9662&lt;/a&gt; (I post daily devlogs!)&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Portfolio:&lt;/strong&gt; &lt;a href="https://kenji-gamedev.vercel.app" rel="noopener noreferrer"&gt;KenjiDev Portoflio&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Kenji966" rel="noopener noreferrer"&gt;Github@Kenji966&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;BLUESKY:&lt;/strong&gt; &lt;a href="https://bsky.app/profile/kenjidev9662.bsky.social" rel="noopener noreferrer"&gt;@kenjidev9662&lt;/a&gt; (I post daily devlogs!)&lt;/li&gt;
&lt;li&gt;🇯🇵 &lt;strong&gt;Japanese Post (Zenn):&lt;/strong&gt; &lt;a href="https://zenn.dev/kenji966/articles/9f6f3e43e0f007" rel="noopener noreferrer"&gt;Zenn@kenji966&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gamedev</category>
      <category>unity3d</category>
      <category>tooling</category>
      <category>ai</category>
    </item>
    <item>
      <title>Designing Instant Impact: How I Used Shader &amp; URP to Craft the Rhythm of a Dash Attack</title>
      <dc:creator>Kenji | Unity Game Dev</dc:creator>
      <pubDate>Sun, 08 Feb 2026 23:23:26 +0000</pubDate>
      <link>https://forem.com/kenjidev9662/designing-instant-impact-how-i-used-shader-urp-to-craft-the-rhythm-of-a-dash-attack-440b</link>
      <guid>https://forem.com/kenjidev9662/designing-instant-impact-how-i-used-shader-urp-to-craft-the-rhythm-of-a-dash-attack-440b</guid>
      <description>&lt;h3&gt;
  
  
  ✦ Preface | I Don’t Know Shaders—But I Know When It Needs to “Feel Right”
&lt;/h3&gt;




&lt;p&gt;From the start, I never intended to make purely decorative effects.&lt;br&gt;
What I wanted was for players to instantly feel what the character was doing with every action.I’ve never formally learned shaders. This was my first time touching URP as well. My approach was simply:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Watching how the values in the inspector changed&lt;/li&gt;
&lt;li&gt;Keyframing animation frame by frame&lt;/li&gt;
&lt;li&gt;Experimenting with whatever tools I had on hand, cobbling things together through trial and error.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the whole dash attack sequence is built on a set of “unconventional,” but practical, techniques.&lt;/p&gt;


&lt;h3&gt;
  
  
  ✦ Starting Out: The Character Instantly Disappears
&lt;/h3&gt;

&lt;p&gt;When the Dash begins, I didn’t just want to stretch out an animation—I wanted the whole character to vanish.&lt;/p&gt;

&lt;p&gt;I created a float parameter called _Alpha in the shader graph and used the Animator to control this value.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu5hmflzwtp381km4o6p3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu5hmflzwtp381km4o6p3.png" alt=" " width="621" height="279"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F84gcdqrh7v9arfy69t30.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F84gcdqrh7v9arfy69t30.png" alt=" " width="624" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When the character disappears, the scene naturally enters an “unexpected” moment of empty space—a brief pause that hints at what’s coming next.&lt;br&gt;
It wasn’t about making things flashy, but rather creating the illusion of a real, sudden dodge—breaking the usual rhythm and making the player subconsciously tense up.&lt;/p&gt;


&lt;h3&gt;
  
  
  ✦ Fisheye with URP: Creating Momentum Visually (Not with Sound)
&lt;/h3&gt;

&lt;p&gt;When the dash starts, I added a fisheye squeeze effect to the center of the screen using URP’s post-processing volume.&lt;br&gt;
This wasn’t a visual gimmick—it was about “tightening the space” to signal: “Now comes a fast movement.”&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fumzpaogtulb631op2657.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fumzpaogtulb631op2657.png" alt=" " width="664" height="594"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The effect is: “character disappears → screen compresses → camera zooms in”—a transition from stillness to motion.&lt;/p&gt;


&lt;h3&gt;
  
  
  ✦ Reappear &amp;amp; Attack: Sudden Entrance + Camera Closes In
&lt;/h3&gt;

&lt;p&gt;The end of the dash isn’t at the starting point—it’s in front of the enemy.At the moment the character reappears, I swapped in a different shader with a glowing edge, as if a flash of light bursts out, and the screen shakes slightly.For the camera, I didn’t use a binding method to lock it to the character. Instead, I wrote a script that constantly calculates the character’s position and uses slerp to move towards it.&lt;br&gt;
So when the character teleports in front of the enemy, the camera doesn’t just hard cut—instead, it slides smoothly to the new target, making it feel like you’re right behind the character, delivering the hit.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Vector3 targetPosition = Vector3.Lerp(transform.position, targetTransform.position, delta / followSpeed);
transform.position = targetPosition;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;“I didn’t use a binding method to lock the camera, but scripted it to constantly track the character’s position and slerp over.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This approach is built into the entire camera system as “calculated tracking”—the dash just causes the camera to slide naturally to a new spot, creating a bonus effect: the camera smoothly sticks back to the character.&lt;/p&gt;




&lt;h3&gt;
  
  
  Finale: Resetting Everything, Letting the Rhythm Calm Down
&lt;/h3&gt;

&lt;p&gt;Finale: Resetting Everything, Letting the Rhythm Calm DownAfter the attack, all shader and volume effects are removed, the character returns to an idle pose, and the scene becomes still—no extra movement.This calm isn’t any technical trick; it’s about bringing the rhythm down, letting the player know: “The move’s finished, it’s your turn now.”&lt;/p&gt;




&lt;h3&gt;
  
  
  Development Process: Iterative Experimentation
&lt;/h3&gt;

&lt;p&gt;The entire flow didn’t use Timeline or any fancy VFX tools. I simply:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Used the Animator to control material float values;&lt;/li&gt;
&lt;li&gt;Used shader dissolve for the death effect, slowly fading the character out;&lt;/li&gt;
&lt;li&gt;Managed all shader states with a custom material controller script;&lt;/li&gt;
&lt;li&gt;Implemented transparency, flashing, and dissolve just by swapping shaders/controlling values.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//Normal Mode
public Material[] PlayerNormalMaterialList;

//Attack Mode
public Material[] PlayerAttackMaterialList
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;To avoid hardcoding during implementation, I used a separate material for each state. This way, switching effects just takes a single line, and future tweaks are easy.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I didn’t have a complete VFX pipeline. Everything came from experimentation, observation, breaking things down, and putting them back together.&lt;/p&gt;




&lt;h3&gt;
  
  
  ✦ My Effects Aren’t Design—They’re About Making the Action Feel Right
&lt;/h3&gt;

&lt;p&gt;I don’t really see myself as doing “visual design”—what I’m actually doing is deconstructing the feel of the action on screen.For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start → character vanishes (stillness + squeeze)&lt;/li&gt;
&lt;li&gt;Reappear → attack (entrance + camera zoom + FX)&lt;/li&gt;
&lt;li&gt;End → reset (scene goes still)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each part is something I tried out by feel, always asking myself: “Does this bit feel right? Is it clear enough?”&lt;/p&gt;




&lt;h3&gt;
  
  
  ✦ My Effects Aren’t Design—They’re About Making the Action Feel Right
&lt;/h3&gt;

&lt;p&gt;This dash combo definitely isn’t industry-standard VFX. It’s something I figured out, step by step, by picturing it in my head.I don’t know how to write shaders, but I know how to make things make sense;&lt;/p&gt;

&lt;p&gt;I don’t have an artistic sense, but I know when there needs to be a “key moment” on screen;&lt;/p&gt;

&lt;p&gt;I don’t rely on prebuilt tools—I build up the rhythm step by step.If you’re a beginner, a solo dev, or just unfamiliar with shaders—but you have a vision, intuition, and imagination—you can absolutely create your own sense of impact too.&lt;/p&gt;

&lt;p&gt;This post builds on the main RPG development log.&lt;br&gt;
For the full story and system overview, read the main post here:&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;a href="https://dev.to/kenjidev9662/from-animation-to-game-feel-my-rpg-battle-system-development-log-1n7h"&gt;My RPG Battle System Development Log&lt;/a&gt;
&lt;/h2&gt;




&lt;h3&gt;
  
  
  📬 Connect with me
&lt;/h3&gt;

&lt;p&gt;HI I’m Kenji, a &lt;strong&gt;Unity Dev &amp;amp; Technical Designer&lt;/strong&gt; with a background in AR, Motion Games &amp;amp; WebGL. &lt;br&gt;
Currently experimenting with diverse Unity tech (Action, VFX, Shaders) and logging the R&amp;amp;D process. Follow for daily devlogs!&lt;/p&gt;

&lt;p&gt;I am currently &lt;strong&gt;open to new opportunities&lt;/strong&gt; (Remote / Japan / UK). If you are looking for someone who bridges the gap between Code and Art, let's talk!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;BLUESKY:&lt;/strong&gt; &lt;a href="https://bsky.app/profile/kenjidev9662.bsky.social" rel="noopener noreferrer"&gt;@kenjidev9662&lt;/a&gt; (I post daily devlogs!)&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;X (Twitter):&lt;/strong&gt; &lt;a href="https://twitter.com/kenjiDev9662" rel="noopener noreferrer"&gt;@kenjiDev9662&lt;/a&gt; (I post daily devlogs!)&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Portfolio:&lt;/strong&gt; &lt;a href="https://kenji-gamedev.vercel.app" rel="noopener noreferrer"&gt;KenjiDev Portoflio&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Kenji966" rel="noopener noreferrer"&gt;Github@Kenji966&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🇯🇵 &lt;strong&gt;Japanese Post (Zenn):&lt;/strong&gt; &lt;a href="https://zenn.dev/kenji966/articles/9f6f3e43e0f007" rel="noopener noreferrer"&gt;Zenn@kenji966&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gamedev</category>
      <category>unity3d</category>
      <category>vroid</category>
      <category>csharp</category>
    </item>
    <item>
      <title>From Animation to Game Feel: My RPG Battle System Development Log</title>
      <dc:creator>Kenji | Unity Game Dev</dc:creator>
      <pubDate>Wed, 28 Jan 2026 12:08:50 +0000</pubDate>
      <link>https://forem.com/kenjidev9662/from-animation-to-game-feel-my-rpg-battle-system-development-log-1n7h</link>
      <guid>https://forem.com/kenjidev9662/from-animation-to-game-feel-my-rpg-battle-system-development-log-1n7h</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3x42i0470sypnq8chymf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3x42i0470sypnq8chymf.png" alt=" " width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This post records how, while building an RPG prototype in Unity, I integrated character animation, effect systems, combo mechanics, and shader implementation into a cohesive battle scene. Through diagrams, code snippets, and animation breakdowns, I’ll share what I learned through hands-on experimentation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Preface: This Isn’t Just Testing Hit Effects—It’s an Experiment in Interactive Rhythm
&lt;/h3&gt;

&lt;p&gt;I’ve always been hypersensitive to “action rhythm” and “impact feel.”&lt;br&gt;
It’s not because I’m good at fighting games, but because I always imagine: what if, when a character attacks, the screen could pause, give feedback, or even have a certain atmosphere—wouldn’t that feel more real than just seeing a damage number?That’s why I started making this prototype. I wasn’t aiming to finish a full game, but to construct a system that could hold all the elements of impact design, skill effects, animation combos, feedback, and visual clarity. What follows is a record of my development process.&lt;/p&gt;




&lt;h3&gt;
  
  
  Part 1: From Animation Design to Combo Flow—How I Structured Character Attacks
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqi6zqurah7sszqmr7cyc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqi6zqurah7sszqmr7cyc.png" alt=" " width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fne0siiys7hrr56vqsuxl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fne0siiys7hrr56vqsuxl.png" alt=" " width="800" height="328"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of starting from animation design, I began by imagining the rhythm of a three-hit combo in my head:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The first hit is quick, not heavy.&lt;/li&gt;
&lt;li&gt;The second hit can link up, but with a slight delay.&lt;/li&gt;
&lt;li&gt;The third hit pauses for dramatic effect and visual “pop.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I used Unity’s Animator to assemble different states and set up a combo buffer and animation tags to judge input timing, making chaining natural and error-tolerant. The idea wasn’t just to “play animations,” but to keep the logic between inputs and rhythm under control and visualized.&lt;/p&gt;




&lt;h3&gt;
  
  
  Part 2: Impact Isn’t Just About Visuals—How I Handled Dash and Magic Effects
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0h8hfqea2pksgll0g99p.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0h8hfqea2pksgll0g99p.gif" alt=" " width="200" height="113"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkoz8qedzr51zv3qcsfp0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkoz8qedzr51zv3qcsfp0.png" alt=" " width="516" height="692"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When developing the dash attack, I realized just moving the character didn’t convey the feeling of “dashing through” the enemy. So I added:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A fisheye-style camera shader to create a sense of compressed space,&lt;/li&gt;
&lt;li&gt;A sword trail shader for afterimages,&lt;/li&gt;
&lt;li&gt;Hitstop for that “frozen hit” sensation,&lt;/li&gt;
&lt;li&gt;Sound effects and knockback timed together for a sharper sense of contact.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also tried a “spatial magic” effect—letting the enemy phase through walls, using a custom shader to display their silhouette behind obstacles, as a foundation for future environment-based magic skills.&lt;/p&gt;




&lt;h3&gt;
  
  
  Part 3: Character Modeling—No Asset Store: I Drew the Hair and Textures Myself
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7rjuhoksj878r35iwyk9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7rjuhoksj878r35iwyk9.png" alt=" " width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;(Vroid) Drawing the main character’s hair&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo7iyyy59mnhe3dv17abi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo7iyyy59mnhe3dv17abi.png" alt=" " width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;(Vroid) How I painted the face texture&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F845qgjrldwuzfzpf3gws.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F845qgjrldwuzfzpf3gws.png" alt=" " width="800" height="956"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Finished version&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m not an artist, but I wanted my protagonist to have more personality than just a default model—I wanted them to reflect my own ideas.So I used Vroid Studio for the first time, painting hair layer by layer and designing custom textures.&lt;/p&gt;

&lt;p&gt;Layering the hair actually feels a lot like building a character: deciding where the rhythm should be, which edges should be neat, where to express personality. For me, that’s also a part of “impact and rhythm”—just visualized on the character itself.&lt;/p&gt;




&lt;h3&gt;
  
  
  Part 4: For Maintainability—I Designed a Simple Yet Expandable Battle System
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F739748hkojmvesullfly.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F739748hkojmvesullfly.png" alt=" " width="617" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Exposing "Game Feel" variables (frames, distance) to the Inspector allows non-programmers to tweak the combat rhythm without touching the code.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of hardcoding a single fighting character, I thought about how to build a reusable combo/skill system. Key points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Combo system and input judgment are independent, so different characters can share the same input logic,&lt;/li&gt;
&lt;li&gt;Skill execution is stored as ScriptableObjects, allowing new skills to be added dynamically without rewriting code,&lt;/li&gt;
&lt;li&gt;Enemy reactions (hitstun / state changes when hit) are a separate reaction system, making it easy to add effects and combo interactions,&lt;/li&gt;
&lt;li&gt;All hit detection and reactions can be reused for any character—just swap out the animation or timings.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These four code sections became a sort of “core battle language”—each time I create a character, I can piece together a fighting style like building sentences, not rewriting everything from scratch.&lt;/p&gt;




&lt;h3&gt;
  
  
  Closing: This Isn’t a Product—It’s a Practice in Understanding Rhythm and Feel
&lt;/h3&gt;

&lt;p&gt;I don’t plan to turn this demo into a finished game, but I do want to use it to build my sense of character movement, skill design, and scene rhythm.&lt;/p&gt;

&lt;p&gt;Impact isn’t just about adding effects and sounds—it comes from input rhythm, enemy reactions, animation transitions, and layered visual feedback.This is my current understanding of “battle systems,” and my first action development project that reflects my own logic and style.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Kenji966/Rpg-Action-Character-Controller-Combat-System" rel="noopener noreferrer"&gt;Github Link → &lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next: For a deep dive into dash attack shaders and animation integration, check out the follow-up post&lt;/p&gt;




&lt;h3&gt;
  
  
  📬 Connect with me
&lt;/h3&gt;

&lt;p&gt;HI I’m Kenji, a &lt;strong&gt;Unity Dev &amp;amp; Technical Designer&lt;/strong&gt; with a background in AR, Motion Games &amp;amp; WebGL. &lt;br&gt;
Currently experimenting with diverse Unity tech (Action, VFX, Shaders) and logging the R&amp;amp;D process. Follow for daily devlogs!&lt;/p&gt;

&lt;p&gt;I am currently &lt;strong&gt;open to new opportunities&lt;/strong&gt; (Remote / Japan / UK). If you are looking for someone who bridges the gap between Code and Art, let's talk!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;X (Twitter):&lt;/strong&gt; &lt;a href="https://twitter.com/kenjiDev9662" rel="noopener noreferrer"&gt;@kenjiDev9662&lt;/a&gt; (I post daily devlogs!)&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Portfolio:&lt;/strong&gt; &lt;a href="https://kenji-gamedev.vercel.app" rel="noopener noreferrer"&gt;KenjiDev Portoflio&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Kenji966" rel="noopener noreferrer"&gt;Github@Kenji966&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;🇯🇵 &lt;strong&gt;Japanese Post (Zenn):&lt;/strong&gt; &lt;a href="https://zenn.dev/kenji966/articles/9f6f3e43e0f007" rel="noopener noreferrer"&gt;Zenn@kenji966&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gamedev</category>
      <category>unity3d</category>
      <category>vroid</category>
      <category>csharp</category>
    </item>
  </channel>
</rss>
