[Unity] ๋ง์ฐ์ค ํด๋ฆญํ ์ง์ ์ผ๋ก ์บ๋ฆญํฐ ์ด๋์ํค๊ธฐ
๋๋ถ๋ถ ์ ๋ํฐ ์บ๋ฆญํฐ ์ด๋ ์์ ๋ฅผ ๋ณด๋ฉด ํค๋ณด๋์ ์ ๋ ฅ์ ๋ฐ์ ์ด๋์ํค๋ ์์ ๋ค์ด ๋ง์๋ฐ,
๋ง์ฐ์ค๋ก ์บ๋ฆญํฐ๋ฅผ ์ด๋์ํค๋ ์์ ๋ฅผ ์์ฑํด๋ณด๋ ค ํ๋ค.
์ค๋น ๊ณผ์
๊ฐ๋จํ ์บ๋ฆญํฐ ์ค๋ธ์ ํธ๋ฅผ ํ๋ ์์ฑํ๊ณ ์บ๋ฆญํฐ ์ค๋ธ์ ํธ์ ์๋์ ๊ฐ์ ๋๊ฐ์ ์คํฌ๋ฆฝํธ๋ฅผ ๋ถ์ฌ๋ฃ๋๋ค.
- Control.cs: ๋ง์ฐ์ค๋ ํค๋ณด๋์ ์ ๋ ฅ์ ๋ฐ์ ์บ๋ฆญํฐ์๊ฒ ๋ช ๋ น์ ๋ด๋ฆฌ๋ ์คํฌ๋ฆฝํธ
- Behavior.cs: ์ค์ ์บ๋ฆญํฐ์ ํ๋์ ๋ด๋นํ๋ ์คํฌ๋ฆฝํธ
์คํฌ๋ฆฝํธ๋ฅผ ๋ถ๋ฆฌํ ์ด์ ๋ ์บ๋ฆญํฐ๊ฐ ์ฌ๋ฌ๊ฐ ์กด์ฌํ ๋, ๋ด ์์ ์ ์บ๋ฆญํฐ๋ง ์์ง์ด๊ณ ์ถ๋ค๋ฉด ๋ด ์์ ์ ์บ๋ฆญํฐ์๋ง Control.cs๋ง ํ์ฑํ ํด์ฃผ๊ณ ๋ค๋ฅธ ์บ๋ฆญํฐ๋ค์ ๋นํ์ฑํ ํด์ฃผ๋ฉด ๋ด ์บ๋ฆญํฐ๋ง ๊น๋ํ๊ฒ ์กฐ์ข ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
์บ๋ฆญํฐ๊ฐ ์์ง์ด๊ธฐ ์ํด 27x27์ ์งํ์ ๊ฐ๋จํ๊ฒ ๋ง๋ค์๋ค.
๊ทธ ๋ค์ ๊ฒ์ ์ค๋ธ์ ํธ(๋น๋ฒ ์บ๋ฆญํฐ๊ฐ ๋ )๋ง๋ค์ด ์บ๋ฆญํฐ๋ฅผ ์ ํ๊ณ Box Collider์ Rigidbody(์ค๋ ฅ๊ณผ ์ถฉ๋ ์ ์ฉ)๋ฅผ ๋ง๋ค์ด์ค๋ค.
์ด ๋ถ๋ถ์ ์ด๋ ์์ ์๋ ํฐ ๊ด๋ จ์ด ์์ผ๋ฏ๋ก ์๋ตํ๋ค.
๊ทธ๋ฆฌ๊ณ Behavior.cs, Control.cs ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ฌ ๊ฒ์ ์ค๋ธ์ ํธ์ ๋ฃ์ด์ค๋ค.
์คํฌ๋ฆฝํธ
[Control.cs]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Control : MonoBehaviour
{
private Behavior behavior; // ์บ๋ฆญํฐ์ ํ๋ ์คํฌ๋ฆฝํธ
private Camera mainCamera; // ๋ฉ์ธ ์นด๋ฉ๋ผ
private Vector3 targetPos; // ์บ๋ฆญํฐ์ ์ด๋ ํ๊ฒ ์์น
void Start()
{
behavior = GetComponent<Behavior>();
mainCamera = GameObject.Find("Main Camera").GetComponent<Camera>();
}
void Update()
{
// ๋ง์ฐ์ค ์
๋ ฅ์ ๋ฐ์ ์ ๋
if (Input.GetMouseButtonUp(0))
{
// ๋ง์ฐ์ค๋ก ์ฐ์ ์์น์ ์ขํ ๊ฐ์ ๊ฐ์ ธ์จ๋ค
Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, 10000f))
{
targetPos = hit.point;
}
}
// ์บ๋ฆญํฐ๊ฐ ์์ง์ด๊ณ ์๋ค๋ฉด
if(behavior.Run(targetPos))
{
// ํ์ ๋ ๊ฐ์ด ์์ผ์ค๋ค
behavior.Turn(targetPos);
}
else
{
// ์บ๋ฆญํฐ ์ ๋๋ฉ์ด์
(์ ์ง ์ํ)
behavior.SetAnim(PlayerAnim.ANIM_IDLE);
}
}
}
์คํฌ๋ฆฝํธ์ ๋ํด ์ค๋ช ํ์๋ฉด
1. Updateํจ์๋ฅผ ํตํด ์ฃผ๊ธฐ์ ์ผ๋ก ๋ง์ฐ์ค์ ์ ๋ ฅ์ ๊ฐ์งํ๋ค.
2. ๋ง์ฐ์ค์ ์ ๋ ฅ์ด ๊ฐ์ง๋์๋ค๋ฉด ํ์ฌ ๋ง์ฐ์ค์ ์์น๋ฅผ ์บ๋ฆญํฐ๊ฐ ์ด๋ ํ ์ขํ๊ฐ์ผ๋ก ๋ณํํ๋ค.
2๋ฒ์ ๋ด์ฉ์ ํด๋น ๋งํฌ์ ์์ธํ๊ฒ ์ค๋ช ๋์ด์๋ค์
https://www.youtube.com/watch?v=hRRTv8hhCe0
3. Behavior.cs ์คํฌ๋ฆฝํธ์ ์ด๋ํ๊ณ ์ ํ๋ ์ขํ๊ฐ์ ์ ๋ฌํ์ฌ ์ค์ ์ด๋์ํค๊ณ (Run), ์ด๋ํ๊ณ ์๋ค๋ฉด(true) ํ์ ๋ ๊ฐ์ด ์ํจ๋ค.
[Behavior.cs]
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Behavior : MonoBehaviour
{
public float speed = 2.0f;
private Rigidbody rigid;
void Awake()
{
rigid = GetComponent<Rigidbody>();
}
public bool Run(Vector3 targetPos)
{
// ์ด๋ํ๊ณ ์ํ๋ ์ขํ ๊ฐ๊ณผ ํ์ฌ ๋ด ์์น์ ์ฐจ์ด๋ฅผ ๊ตฌํ๋ค.
float dis = Vector3.Distance(transform.position, targetPos);
if (dis >= 0.01f) // ์ฐจ์ด๊ฐ ์์ง ์๋ค๋ฉด
{
// ์บ๋ฆญํฐ๋ฅผ ์ด๋์ํจ๋ค.
transform.localPosition = Vector3.MoveTowards(transform.position, targetPos, speed * Time.deltaTime);
//SetAnim(PlayerAnim.ANIM_WALK); // ๊ฑท๊ธฐ ์ ๋๋ฉ์ด์
์ฒ๋ฆฌ
return true;
}
return false;
}
public void Turn(Vector3 targetPos)
{
// ์บ๋ฆญํฐ๋ฅผ ์ด๋ํ๊ณ ์ ํ๋ ์ขํ๊ฐ ๋ฐฉํฅ์ผ๋ก ํ์ ์ํจ๋ค
Vector3 dir = targetPos - transform.position;
Vector3 dirXZ = new Vector3(dir.x, 0f, dir.z);
Quaternion targetRot = Quaternion.LookRotation(dirXZ);
rigid.rotation = Quaternion.RotateTowards(transform.rotation, targetRot, 550.0f * Time.deltaTime);
}
}
Behavior ์คํฌ๋ฆฝํธ๋ Control ์คํฌ๋ฆฝํธ์ ์ํด ์คํ๋๋ ์คํฌ๋ฆฝํธ์ธ๋ฐ ๋ถ์ํด ๋ณด๋ฉด
1. Control ์คํฌ๋ฆฝํธ์ ์ํด Run ํจ์๊ฐ ์คํ๋๋ค.
2. ์ด๋ ์ขํ๋ฅผ ์ ๋ฌ ๋ฐ๋๋ฐ ์บ๋ฆญํฐ์ ์์น๊ฐ ์ด๋ํ๊ณ ์ ํ๋ ์์น์ ๊ทผ์ ํ๋ค๋ฉด ์ด๋์ ํ์ง ์๊ณ
3. ๊ทผ์ ํ์ง ์๋ค๋ฉด ํด๋น ๋ฐฉํฅ์ผ๋ก ์ด๋์ํจ๋ค.
4. ์ด๋ํ๊ณ ์๋ค๋ฉด true, ์ด๋ํ๊ณ ์์ง ์๋ค๋ฉด false๋ฅผ ๋ฆฌํดํ์ฌ Control ์คํฌ๋ฆฝํธ์๊ฒ ๋ด๊ฐ ์ ์ง์ํ์ธ์ง ์ด๋์ํ์ธ์ง ์๋ ค์ค๋ค.
5. Turn(ํ์ ) ํจ์๋ ์ด๋ํ๊ณ ์ ํ๋ ๋ฐฉํฅ์ผ๋ก ์บ๋ฆญํฐ๋ฅผ ํ์ ์์ผ์ค๋ค.
Runํจ์์์ Vector3.MoveTowards๋ฅผ ํจ์๋ฅผ ์ฌ์ฉํ์๋๋ฐ
์ด ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ์บ๋ฆญํฐ๊ฐ ์ผ์ ํ ์๋๋ก ํด๋น ์์น๋ก ์ด๋ํ๊ณ ,
Vector3.Lerpํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋น ์ขํ๋ก ์๋๋ฅผ ๋ด์ ์์ง์ด๋ค๊ฐ ๋์ฐฉ์ง์ ์ ๊ทผ์ ํ์ ๋ ์์ํ ๋๋ ค์ง๋ค.
๊ฒฐ๊ณผ
'Development > Game' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Unity] ๋ง์ฐ์ค๋ก ์นด๋ฉ๋ผ ์ค ์ธ, ์ค ์์, ํ์ ์ํค๊ธฐ (2) | 2019.06.26 |
---|
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[Unity] ๋ง์ฐ์ค๋ก ์นด๋ฉ๋ผ ์ค ์ธ, ์ค ์์, ํ์ ์ํค๊ธฐ
[Unity] ๋ง์ฐ์ค๋ก ์นด๋ฉ๋ผ ์ค ์ธ, ์ค ์์, ํ์ ์ํค๊ธฐ
2019.06.26