*์์ด๋ณด์ฃผ์*
๋
ธ์
์ ์ผ๊ธฐ์ฒ๋ผ ์ฐ๋ ๊ฑด๋ฐ
์ฌ๋ฐ๊ฐ๋ ์ฌ๋ ค๋ด
๊ตฌ์
![01b8d421e0f52aa76cf1c6bb11f11a39cbd68f2771c47749d1]()
์์ง ํ๋กํ ํ์ดํ ๋จ๊ณ๋ผ ์์ธํ ๊ธฐํ์ ์ ์ง ์๊ฒ ์ต๋๋ค.
Control_GrabLedge๋
1. PC๊ฐ ๊ณต์ค์ ์์ ๋
2. ํ๋ ์ด์ด๊ฐ Key โSpaceโ๋ฅผ ์
๋ ฅํ๋ฉด
3. Hand์ Ledge์ Collide ์ฌ๋ถ๋ฅผ ํ์ธ
4. ์ฐธ์ผ ๊ฒฝ์ฐ PC๊ฐ Ledge์ ๋งค๋ฌ๋ฆฌ๊ฒ ๋๋
์์คํ
์
๋๋ค.
์ฐ๊ตฌ
์์คํ
๊ตฌํ์ ํ์ํ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
PC๊ฐ ์ ํ ์ค์ธ์ง ์ฒดํฌ
Hand์ Ledge๊ฐ Collide ์ค์ธ์ง ์ฒดํฌ
Key โSpaceโ ์
๋ ฅ ์ฒดํฌ
PC๊ฐ ์ถ๋ฝํ๋ Physics ์ผ์ ์ค์งํ๊ธฐ
๊ตฌํ์ ๋์์ด ๋ ๋งํ ์ฐธ๊ณ ์๋ฃ
์ค๊ณ
์ผ์ฐจ์ ์ผ๋ก ๊ตฌํํด์ผ ํ ๋์์ ์ ๋ฆฌํ Flow Chart์
๋๋ค.
์ค๋ธ์ ํธ ๋ชฉ๋ก
โPCโ ํ๋ ์ด์ด ์บ๋ฆญํฐ
โHandโ PC์ ์์ ์ค๋ธ์ ํธ, Ledge์ Collide ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๋ ์ฉ๋
โLedgeโ ๋งค๋ฌ๋ฆด ์ ์๋ ์งํ ๊ตฌ์กฐ๋ฌผ
๋ณ์ ๋ชฉ๋ก
โgravityScaleโ RigidBody2D ์ปดํฌ๋ํธ์ ์ ์ญ ๋ณ์, ์ค๋ธ์ ํธ๊ฐ ๋ฐ๋ ์ค๋ ฅ์ ๋ฐฐ์
๊ตฌํ
์ฐ์ โHandโ์ โLedgeโ๋ฅผ sprite renderer๋ก ๊ฐ๋จํ๊ฒ ๊ตฌํํ์ต๋๋ค.
![7ff3c028e2f206a26d81f6e6448972]()
๋ถ์์ ์์ด โHandโ์ด๊ณ , ํ๋์ ์ง์ฌ๊ฐํ์ด โLedgeโ์
๋๋ค.
๋ ์ค๋ธ์ ํธ ๋ชจ๋ collider ์ฝคํฌ๋ํธ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , โHandโ๋ โLedgeโ์ collision ์ฒดํฌ๋ฅผ ํด์ผํ๋ rigidbody2d ์ฝคํฌ๋ํธ๋ ๋ฃ์ด ์ฃผ์์ต๋๋ค.
๋ โLedgeโ์ ๊ฒฝ์ฐ PC์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ถฉ๋์ ํด์๋ ์ ๋๋, Ledge๋ผ๋ ์ด๋ฆ์ ๋ ์ด์ด๋ฅผ ์๋ก ๋ง๋ค๊ณ ํ๋ก์ ํธ ์ธํ
์์ Layer collision matrix๋ฅผ ์๋ก ๊ฐ์ญํ์ง ์๊ฒ ์ค์ ํด ์ฃผ์์ต๋๋ค.
๋์ผ๋ก ํ๊ทธ๋ฅผ ์ฌ์ฉํด โHandโ์ โLedgeโ์ collision์ ์ฒดํฌํ ๊ณํ์ด๋, Ledge๋ผ๋ ์ด๋ฆ์ ํ๊ทธ๋ ์๋ก ์์ฑํด ์ฃผ์์ต๋๋ค.
์ด์ ์ฌ์ ์ค๋น๊ฐ ๋ชจ๋ ๋๋ฌ์ต๋๋ค.
public class Ledge : MonoBehaviour
{
public bool inLedge = false;
public bool isHanging = false;
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("Ledge"))
{
inLedge = true;
}
}
private void OnTriggerExit2D(Collider2D collision)
{
if (collision.CompareTag("Ledge"))
{
inLedge=false;
}
}
}
๋จผ์ โHandโ์ โLedgeโ๊ฐ collide ์ค์ธ์ง ์ฒดํฌํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ต๋๋ค.
Boolean ๋ณ์๋ช
์ง๋ ๊ฑธ ํ์ฐธ ๊ณ ๋ฏผํ์ต๋๋ค.
๊ทผ๋ฐ ์ฌ์ ํ ๋ง์์ ๋ค์ง๊ฐ ์์ต๋๋ค.
public class GrabLedge : MonoBehaviour
{
private Ledge _ledge
;
private Ground _ground
;
private Controller _controller
;
private Rigidbody2D _body
;
void Start()
{
_ledge
= GetComponentInChildren<Ledge>();
_ground
= GetComponent<Ground>();
_controller
= GetComponent<Controller>();
_body
= GetComponent<Rigidbody2D>();
}
void Update()
{
if(_ledge
.inLedge
&& !_ground
.OnGround
)
{
if (_controller
.input
.RetrieveJumpInput())
{
_ledge
.isHanging
= true;
_body
.gravityScale
= 0f;
Debug
.Log("it's working");
}
}
}
๋ค์์ผ๋ก ์ค์ GrabLedge ๋์์ด ์ด๋ฃจ์ด์ง๋ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ํ
์คํธ๋ฅผ ํด ๋ณด๋โฆ.
๋ฌธ์
![28a7d72fe39f69eb6cbc85e015d3763ec286b2ada9ecdb05c523922a1c53d2c12260]()
๋ถ๋ช
โitโs workingโ ๋๋ฒ๊ทธ ๋ฉ์ธ์ง๊ฐ ์ ์์ ์ผ๋ก ์ถ๋ ฅ๋๊ฑด๋ง,
์ด์งธ์์ธ์ง gravityScale์ 0์ผ๋ก ๋ณ๊ฒฝํ ๊ฒ์ ์ ์ฉ์ด ์ ๋๋ค์.
PC๊ฐ ์ฌ์ ํ ์ค๋ ฅ์ ์ํฅ์ ๋ฐ์ ์๋๋ก ๋จ์ด์ง๊ณ ์์ต๋๋ค.
๋ช ๋ฒ์ ํ
์คํธ ๊ฒฐ๊ณผ ์์ฃผ ์ ๊น์ด์ง๋ง ์ธ์คํํฐ ์ฐฝ์์ gravityScale์ด 0์ผ๋ก ๋ฐ๋๋ ๊ฒ์ ํ์ธํ ์ ์์์ต๋๋ค.
GrabLedge ์ด์ธ์ ๋ฌด์ธ๊ฐ ๋ค๋ฅธ ์คํฌ๋ฆฝํธ๊ฐ gravityScale์ ๊ณ์ํด์ ๋ณ๊ฒฝํ๊ณ ์๋ค๋ ์๋ฏธ๊ฒ ๋ค์.
์์ธ์ Jump.cs ์คํฌ๋ฆฝํธ์ ์์์ต๋๋ค.
private void FixedUpdate()
{
_onGround
= _ground
.OnGround
;
_velocity
= _body
.velocity
;
if (_onGround
)
{
_jumpPhase
= 0;
}
if (_desiredJump
)
{
_desiredJump
= false;
JumpAction();
}
if (_body
.velocity
.y
> 0)
{
_body
.gravityScale
= _upwardMovementMultiplier
;
}
else if (_body
.velocity
.y
< 0)
{
_body
.gravityScale
= _downwardMovementMultiplier
;
}
else if(_body
.velocity
.y
== 0)
{
_body
.gravityScale
= _defaultGravityScale
;
}
_body
.velocity
= _velocity
;
}์บ๋ฆญํฐ๊ฐ Ledge์ ๋งค๋ฌ๋ ค์๋ ๋ง๋, gravityScale์ ๊ณ์ํด์ ์กฐ์ ํ๊ณ ์์๋ค์.
(์ฐธ๊ณ ๋ก ์ ๊ฐ ์ง ์คํฌ๋ฆฝํธ๊ฐ ์๋๋ผ ๊นํ๋ธ์์ ๊ธ์ด์จ ์คํฌ๋ฆฝํธ์
๋๋ค.)
๋๋ฒ๊น
if (!_ledge
.isHanging
)
{
if (_body
.velocity
.y
> 0)
{
_body
.gravityScale
= _upwardMovementMultiplier
;
}
else if (_body
.velocity
.y
< 0)
{
_body
.gravityScale
= _downwardMovementMultiplier
;
}
else if (_body
.velocity
.y
== 0)
{
_body
.gravityScale
= _defaultGravityScale
;
}
}
Jump ์คํฌ๋ฆฝํธ์ ๋ฌธ์ ๊ฐ ์๋ ๋ถ๋ถ์ ์ถ๊ฐ๋ก if ๋ฌธ์ ์ฌ์ฉํด PC๊ฐ ๋งค๋ฌ๋ ค ์์ง ์์ ๋๋ง ๋์๋๊ฒ๋ ์์ ํ์ต๋๋ค.
![28a7d72fe39f6ceb3ceed4e312d2766ae1d34eb53ddf06409a19f42a1166f41156ac]()
โฆโฆโฆโฆโฆ?
![24b0d121e09270f727f1c6bb11f11a399a8c3b59fb6f7998]()
๋ค์ ํธ์ ๊ณ์.
์ ๋
ธ์
์์ ๋ฐ๋ก ๋ถํ๋ฃ๊ธฐ๊ฐ ์ ๋๋ ๋๋ชจ ๋ถํธํด์ ์ฌ๋ฐ ๋ ์ฌ๋ฆด์ง ๋ชฐ๊ฒ ์
์งค ํธ์งํด๋์๊ฑฐ ์ค์ผ์๊ฒจใ ใ ใ ใ ใ ํ์ดํ !!
์ด์ด ์ ๋ง ์ ๋ ์๊ฐ๋