<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>crowlib</title>
	<atom:link href="https://crowlib.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://crowlib.com</link>
	<description>hory&#039;s archives</description>
	<lastBuildDate>Tue, 10 Mar 2026 05:15:41 +0000</lastBuildDate>
	<language>ko-KR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>
	<item>
		<title>[Unity Tip] 복합 콜라이더와 CharacterController의 물리 간섭 해결</title>
		<link>https://crowlib.com/2026/03/10/unity-tip-%eb%b3%b5%ed%95%a9-%ec%bd%9c%eb%9d%bc%ec%9d%b4%eb%8d%94%ec%99%80-charactercontroller%ec%9d%98-%eb%ac%bc%eb%a6%ac-%ea%b0%84%ec%84%ad-%ed%95%b4%ea%b2%b0/</link>
					<comments>https://crowlib.com/2026/03/10/unity-tip-%eb%b3%b5%ed%95%a9-%ec%bd%9c%eb%9d%bc%ec%9d%b4%eb%8d%94%ec%99%80-charactercontroller%ec%9d%98-%eb%ac%bc%eb%a6%ac-%ea%b0%84%ec%84%ad-%ed%95%b4%ea%b2%b0/#respond</comments>
		
		<dc:creator><![CDATA[hory]]></dc:creator>
		<pubDate>Tue, 10 Mar 2026 05:15:41 +0000</pubDate>
				<category><![CDATA[Tip]]></category>
		<category><![CDATA[Unity]]></category>
		<category><![CDATA[미분류]]></category>
		<guid isPermaLink="false">https://crowlib.com/2026/03/10/unity-tip-%eb%b3%b5%ed%95%a9-%ec%bd%9c%eb%9d%bc%ec%9d%b4%eb%8d%94%ec%99%80-charactercontroller%ec%9d%98-%eb%ac%bc%eb%a6%ac-%ea%b0%84%ec%84%ad-%ed%95%b4%ea%b2%b0/</guid>

					<description><![CDATA[유니티에서 몬스터의 공격 판정을 위해 자식 오브젝트로 트리거 콜라이더(Hitbox)를 추가했을 때, 플레이어가 해당 영역에 물리적으로 밀리거나 접근하지 못하는 현상이 발생할 수 있습니다. 오늘 해결한 사례를 바탕으로 그 원인과 최적의 해결책을 정리합니다. 1. 문제 현상 상황: 몬스터(부모)에게 Rigidbody가 있고, 무기(자식)에 isTrigger가 켜진 박스 콜라이더가 있음. 증상: 몬스터가 공격 중이 아님에도 플레이어가 몬스터 근처(무기 콜라이더 영역)에 가려고<a class="more-link" href="https://crowlib.com/2026/03/10/unity-tip-%eb%b3%b5%ed%95%a9-%ec%bd%9c%eb%9d%bc%ec%9d%b4%eb%8d%94%ec%99%80-charactercontroller%ec%9d%98-%eb%ac%bc%eb%a6%ac-%ea%b0%84%ec%84%ad-%ed%95%b4%ea%b2%b0/">더 보기 <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<p>유니티에서 몬스터의 공격 판정을 위해 자식 오브젝트로 트리거 콜라이더(Hitbox)를 추가했을 때, 플레이어가 해당 영역에 물리적으로 밀리거나 접근하지 못하는 현상이 발생할 수 있습니다. 오늘 해결한 사례를 바탕으로 그 원인과 최적의 해결책을 정리합니다.</p>
<h2>1. 문제 현상</h2>
<ul>
<li><strong>상황:</strong> 몬스터(부모)에게 Rigidbody가 있고, 무기(자식)에 <code>isTrigger</code>가 켜진 박스 콜라이더가 있음.</li>
<li><strong>증상:</strong> 몬스터가 공격 중이 아님에도 플레이어가 몬스터 근처(무기 콜라이더 영역)에 가려고 하면 &#8216;투명한 벽&#8217;에 막힌 것처럼 밀려남.</li>
<li><strong>의문:</strong> 트리거(<code>isTrigger</code>)는 물리적 충돌을 일으키지 않아야 하는데 왜 <code>CharacterController</code>는 이를 벽으로 인식하는가?</li>
</ul>
<hr />
<h2>2. 원인 분석: 복합 콜라이더(Compound Collider)와 소유권</h2>
<p>유니티 물리 엔진(PhysX)은 <strong>부모에게 Rigidbody가 있고 자식에게 Colliders가 있는 경우</strong> 이를 하나의 <strong>단일 물리 유닛(Actor)</strong>으로 취급합니다.</p>
<h3>핵심 매커니즘:</h3>
<ol>
<li><strong>메시지 통합:</strong> 자식 콜라이더에서 발생하는 모든 충돌 이벤트(<code>OnTriggerEnter</code> 등)는 Rigidbody가 있는 부모 오브젝트로 전달됩니다.</li>
<li><strong>레이어 간섭 (The Trap):</strong> 유니티의 <code>CharacterController</code>는 물리 연산 시 &quot;이 Actor(Rigidbody)와 내가 부딪혀야 하는가?&quot;를 먼저 판단합니다. </li>
<li>만약 <strong>부모(Rigidbody)의 레이어</strong>가 플레이어와 충돌하도록 설정되어 있다면, 물리 엔진은 그 리지드바디에 속한 <strong>모든 콜라이더(자식 트리거 포함) 영역</strong>을 &quot;안전을 위해 진입을 막아야 할 물리적 공간&quot;으로 과하게 인식해 버립니다.</li>
</ol>
<hr />
<h2>3. 해결 전략 (Action Plan)</h2>
<h3>단계 1: 레이어 충돌 매트릭스 최적화 (가장 중요)</h3>
<p>액션 게임(하데스 스타일)에서는 캐릭터 본체끼리 밀어내는 물리력을 제거하는 것이 조작감 면에서 유리합니다.</p>
<ul>
<li><strong>설정:</strong> <code>Project Settings &gt; Physics &gt; Layer Collision Matrix</code></li>
<li><strong>조치:</strong> <code>Player</code> 레이어와 <code>Monster</code>(본체) 레이어 간의 충돌 체크를 <strong>해제</strong>합니다.</li>
<li><strong>결과:</strong> 부모의 &quot;물리적 차단막&quot;이 사라지면서, 자식인 <code>Monster Weapon</code> 레이어의 트리거가 본래 의도대로(벽이 아닌 감지 영역으로) 작동하게 됩니다.</li>
</ul>
<h3>단계 2: 히트박스 활성화 제어 (성능 및 정확도)</h3>
<p>공격 중이 아닐 때는 물리 엔진이 아예 해당 콜라이더를 무시하도록 코드로 제어합니다.</p>
<ul>
<li><strong>방법:</strong> <code>_isActive</code> 플래그만 사용하는 대신, <code>Collider.enabled = false</code>를 직접 사용합니다.</li>
<li><strong>장점:</strong> 물리 엔진의 공간 쿼리 목록에서 완전히 제외되어 불필요한 연산을 줄이고 <code>CharacterController</code>와의 간섭을 원천 차단합니다.</li>
</ul>
<h3>단계 3: 무기 리지드바디 설정</h3>
<p>자식 오브젝트(무기)에 리지드바디가 꼭 필요하다면 반드시 <strong><code>Is Kinematic = true</code></strong>로 설정해야 합니다. Non-Kinematic 리지드바디는 트리거일지라도 물리적 반발력을 발생시킬 확률이 높습니다.</p>
<hr />
<h2>4. 최종 결과 코드 예시 (Hitbox.cs)</h2>
<pre><code class="language-csharp">public void Activate(DamageData data)
{
    _currentDamageData = data;
    _hitTargets.Clear();
    _isActive = true;
    if (_collider) _collider.enabled = true; // 물리 엔진에 등록
}

public void Deactivate()
{
    _isActive = false;
    _hitTargets.Clear();
    if (_collider) _collider.enabled = false; // 물리 엔진에서 제거
}</code></pre>
<h2>요약</h2>
<blockquote>
<p><strong>&quot;부모 리지드바디의 레이어가 자식 콜라이더의 물리적 성질을 결정한다.&quot;</strong><br />
플레이어를 밀어내지 않으면서 트리거 판정만 남기고 싶다면, 부모 레이어의 충돌 체크를 끄고 자식 레이어의 트리거만 활용하십시오.</p>
</blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://crowlib.com/2026/03/10/unity-tip-%eb%b3%b5%ed%95%a9-%ec%bd%9c%eb%9d%bc%ec%9d%b4%eb%8d%94%ec%99%80-charactercontroller%ec%9d%98-%eb%ac%bc%eb%a6%ac-%ea%b0%84%ec%84%ad-%ed%95%b4%ea%b2%b0/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>구글 검색 팁</title>
		<link>https://crowlib.com/2018/11/18/%ea%b5%ac%ea%b8%80-%ea%b2%80%ec%83%89-%ed%8c%81/</link>
					<comments>https://crowlib.com/2018/11/18/%ea%b5%ac%ea%b8%80-%ea%b2%80%ec%83%89-%ed%8c%81/#respond</comments>
		
		<dc:creator><![CDATA[hory]]></dc:creator>
		<pubDate>Sun, 18 Nov 2018 04:43:26 +0000</pubDate>
				<category><![CDATA[etc]]></category>
		<guid isPermaLink="false">https://crowlib.com/?p=20</guid>

					<description><![CDATA[&#8220;&#8221; 반드시 포함될 단어/문장 지정하기 ex) &#8220;c# linq list&#8221; &#8211; 제외할 검색어 지정하기 ex) 현대-그랜져 ~ 유의어 검색 ex) ~저렴한 맛집 define: 단어의 정의 검색 ex) define:자동차 intitle: 특정 단어를 반드시 포함하여 제목 검색 ex) intitle:i30 fastback * 불확실한 검색어 입력 ex) 아인슈타인 * 이론 .. 숫자 범위 지정 ex) 2010..2012년 축구경기 or 두 단어<a class="more-link" href="https://crowlib.com/2018/11/18/%ea%b5%ac%ea%b8%80-%ea%b2%80%ec%83%89-%ed%8c%81/">더 보기 <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<h3>&#8220;&#8221;</h3>
<ul>
<li>반드시 포함될 단어/문장 지정하기</li>
<li>ex) &#8220;c# linq list&#8221;</li>
</ul>
<h3>&#8211;</h3>
<ul>
<li>제외할 검색어 지정하기</li>
<li>ex) 현대-그랜져</li>
</ul>
<h3>~</h3>
<ul>
<li>유의어 검색</li>
<li>ex) ~저렴한 맛집</li>
</ul>
<h3>define:</h3>
<ul>
<li>단어의 정의 검색</li>
<li>ex) define:자동차</li>
</ul>
<h3>intitle:</h3>
<ul>
<li>특정 단어를 반드시 포함하여 제목 검색</li>
<li>ex) intitle:i30 fastback</li>
</ul>
<h3>*</h3>
<ul>
<li>불확실한 검색어 입력</li>
<li>ex) 아인슈타인 * 이론</li>
</ul>
<h3>..</h3>
<ul>
<li>숫자 범위 지정</li>
<li>ex) 2010..2012년 축구경기</li>
</ul>
<h3>or</h3>
<ul>
<li>두 단어 중 아무거나</li>
<li>ex) 갤럭시or아이폰</li>
</ul>
<h3>site:</h3>
<ul>
<li>지정된 사이트 내에서 검색</li>
<li>ex)site:crowlib.com linux</li>
</ul>
<h3>rel:</h3>
<ul>
<li>지정된 사이트와 연관된 사이트 검색</li>
<li>ex)rel:crowlib.com</li>
</ul>
<h3>link:</h3>
<ul>
<li>지정된 사이트를 링크한 사이트 검색</li>
<li>ex) link:crowlib.com</li>
</ul>
<h3>filetype:</h3>
<ul>
<li>지정된 파일타입만 검색하기</li>
<li>ex) unity ecs filetype:pdf</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://crowlib.com/2018/11/18/%ea%b5%ac%ea%b8%80-%ea%b2%80%ec%83%89-%ed%8c%81/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Change swap size in Ubuntu 18.04</title>
		<link>https://crowlib.com/2018/09/09/change-swap-size-in-ubuntu-18-04/</link>
					<comments>https://crowlib.com/2018/09/09/change-swap-size-in-ubuntu-18-04/#respond</comments>
		
		<dc:creator><![CDATA[hory]]></dc:creator>
		<pubDate>Sun, 09 Sep 2018 05:00:49 +0000</pubDate>
				<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[swap]]></category>
		<guid isPermaLink="false">https://crowlib.com/?p=16</guid>

					<description><![CDATA[ swap 관련 모든 프로세스를 끈다. sudo swapoff -a 주) sudo reboot 후에 진행하면 더 빨리 끝낼 수도 있다.  swap 크기 조정 sudo dd if=/dev/zero of=/swapfile bs=1G count=8 if = input file of = output file bs = block size count = multiplier of blocks  swap 파일을 만든다. sudo mkswap /swapfile  swap을 활성화 한다. sudo swapon<a class="more-link" href="https://crowlib.com/2018/09/09/change-swap-size-in-ubuntu-18-04/">더 보기 <span class="meta-nav">&#8594;</span></a>]]></description>
										<content:encoded><![CDATA[<ol>
<li> swap 관련 모든 프로세스를 끈다.
<pre><span role="presentation"><span class="cm-builtin">sudo</span> swapoff <span class="cm-attribute">-a

<em>주)</em> sudo reboot 후에 진행하면 더 빨리 끝낼 수도 있다.
</span></span></pre>
</li>
<li> swap 크기 조정
<pre><span role="presentation"><span class="cm-builtin">sudo</span> dd <span class="cm-def">if</span><span class="cm-operator">=</span>/dev/zero <span class="cm-def">of</span><span class="cm-operator">=</span>/swapfile <span class="cm-def">bs</span><span class="cm-operator">=</span>1G <span class="cm-def">count</span><span class="cm-operator">=</span><span class="cm-number">8
</span></span></pre>
<p><span role="presentation"><span class="cm-number">if = input file<br />
of = output file<br />
bs = block size<br />
count = multiplier of blocks</span></span></li>
<li> swap 파일을 만든다.
<pre><span role="presentation"><span class="cm-builtin">sudo</span> mkswap /swapfile</span></pre>
</li>
<li> swap을 활성화 한다.
<pre><span role="presentation"><span class="cm-builtin">sudo</span> swapon /swapfile</span></pre>
</li>
<li> swap 크기 확인
<pre><span role="presentation"><span class="cm-builtin">grep</span> SwapTotal /proc/meminfo</span></pre>
</li>
</ol>
]]></content:encoded>
					
					<wfw:commentRss>https://crowlib.com/2018/09/09/change-swap-size-in-ubuntu-18-04/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
