using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
Vector2 mousePosition;
Vector2 objectPosition;
Camera camera;
public float Speed;
private void Start()
{
camera = GameObject.Find("Main Camera").GetComponent<Camera>();
}
private void Update()
{
objectPosition = this.gameObject.transform.position;
if (Input.GetMouseButton(0))
{
mousePosition = Input.mousePosition;
mousePosition = camera.ScreenToWorldPoint(mousePosition);
Debug.Log("ob: " + objectPosition);
Debug.Log("mo: " + mousePosition);
}
if (mousePosition != null)
{
transform.position = PosMove();
}
}
public Vector2 PosMove()
{
float incline = (mousePosition.y - objectPosition.y) / (mousePosition.x - objectPosition.x);
float angle = Mathf.Atan2(mousePosition.y - objectPosition.y, mousePosition.x - objectPosition.x);
float x_pos = objectPosition.x + Speed * Mathf.Cos(angle) * Time.deltaTime;
float y_pos = incline * (x_pos - objectPosition.x) + objectPosition.y;
Debug.Log("x: " + x_pos);
Debug.Log("y= " + y_pos);
Vector2 pos = new Vector2(x_pos, y_pos);
return pos;
}
}
--------------------------------------------------------------------------------------------------
์ด๋ฐ ์์ผ๋ก ๋ง์ฐ์ค ์ขํด๋ฆญ ์์ ๋ง์ฐ์ค ํฌ์ธํฐ์ ์์น๋ก ์ค๋ธ์ ํธ๋ฅผ ์ด๋์ํค๋ ์ฝ๋๋ฅผ ์งฐ๋๋ฐ ์ด๋ ํ ๋ฒ ์ํค๊ณ ๋๋ฉด ์ค๋ธ์ ํธ๊ฐ ๊ณ์ ๋ถ๋ค๋๋๋ผ๊ณ ์ฌ ์ ๊ทธ๋ฐ๊ฐ์ฌ?
---------------------------------------------------------------------------------------------
์์ ์๋ฃโ
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
ย ย Vector2 mousePosition;
ย ย Vector2 objectPosition;
ย ย Camera camera;
ย ย public GameObject markerObj;
ย ย public float Speed;
ย ย float distance;
ย ย private void Start()
ย ย {
ย ย ย ย camera = GameObject.Find("Main Camera").GetComponent<Camera>();
ย ย }
ย ย private void Update()
ย ย {
ย ย ย ย objectPosition = this.gameObject.transform.position;
ย ย ย ย if (Input.GetMouseButton(1))
ย ย ย ย {
ย ย ย ย ย ย mousePosition = Input.mousePosition;
ย ย ย ย ย ย mousePosition = camera.ScreenToWorldPoint(mousePosition);
ย ย ย ย ย ย //Debug.Log("ob: " + objectPosition);
ย ย ย ย ย ย //Debug.Log("mo: " + mousePosition);
ย ย ย ย }
ย ย ย ย distance = Mathf.Sqrt(Mathf.Pow(mousePosition.x - objectPosition.x,2) + Mathf.Pow(mousePosition.y - objectPosition.y,2));
ย ย ย ย ย
ย ย }
ย ย private void FixedUpdate()
ย ย {
ย ย ย ย transform.position = PosMove();
ย ย ย ย if (distance < Speed * Time.deltaTime) transform.position = mousePosition;
ย ย }
ย ย public Vector2 PosMove()
ย ย {
ย ย ย ย ย
ย ย ย ย float incline = (mousePosition.y - objectPosition.y) / (mousePosition.x - objectPosition.x);
ย ย ย ย float angle = Mathf.Atan2(mousePosition.y - objectPosition.y, mousePosition.x - objectPosition.x);
ย ย ย ย float x_pos = objectPosition.x + Speed * Mathf.Cos(angle) * Time.deltaTime;
ย ย ย ย float y_pos = (mousePosition.x - objectPosition.x != 0) ? incline * (x_pos - objectPosition.x) + objectPosition.y : objectPosition.y;
ย ย ย ย
ย ย ย ย Vector2 pos = new Vector2(x_pos, y_pos);
ย ย ย ย return pos;
ย ย }
}
์๋ง ์ค๋ธ์ ํธ์ ํธ๋์คํผํ๊ณ ๋ง์ฐ์ค์ ํ๋ฉด์ขํ ์์น๊ฐ ์๋ก ๋ฌ๋ผ์ ๊ทธ๋ด๊ป? ๋์ถฉ transform๊ณผ UI์ rect Transform์ ๋ ์ฐจ์ด
๋ก์ปฌ ์ขํ๋ ์๋ ์ขํ ๊ฐ์ ๊ฑด๊ฐ์..? ์ด๋ป๊ฒ ์์ ํ๋ฉด ๋ ๊น์..?
์๋๋ค ๊ทธ๋ฅ ๋ฐฉํฅ์ ๊ตฌํ ๊ฑฐ๋๊น ์๊ด์๋ค ใ ใ
์ด๋ํ๋๊ฑด ์ผ๋ถ๋ฌ ์ ๋ ๊ฒ ์ง ๊ฑฐ์? ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ๋ ๋ง์๋ฐ
๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ๋ชฐ๋ผ์์... ์ ๊ฐ ํ ์ ์๋ ๋ฐฉ์์ผ๋ก ํด๋ดค์ด์
์์ธ์ xPos ๊ตฌํ ๋ + speed *Cos ๊ฐ์ผ๋ก ํ๋๋ฐ ์ฌ๊ธฐ์ ๋ชฉํ ์์น๋ณด๋ค ๋์ด๊ฐ๋ ๊ฒฝ์ฐ๊ฐ ์๊ฒจ์ ์๋ค๋ก ์๋ค๊ฐ๋ค ํด์ ๋ถ๋ค๊ฑฐ๋ฆฌ๋๊ฒ์ฒ๋ผ ๋ณด์ด๋๊ฑธ๊ฑฐ์
์ค์ค ๊ธ๋ค์ speed*Time.deltaTime ๋ณด๋ค ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๊ฐ ์์ ๋ ๋๊ฐ ์ ์ด ๊ฐ๋ค๊ณ ํ๋๊น ๋ฉ์ถ๋ค์ฉ
๋ด ์๊ฐ์๋ xPos = Object.x * mathf.Cos(angle) + mousePosition; yPos =Object.y * mathf.Sin(angle) + mousePosition;
๋ง์ฐ์ค ํด๋ฆญ์ด๋ ์ฒ์ํด๋ด์ ์ด๋ก ์ผ๋ก ๊ตฌํ๋ ๊ฑด๋ฐ ๋ง์ ์ง ๋ชจ๋ฅด๊ฒ ๋ค ํ๋ฆฌ๋ฉด cos๊ณผ sin์ sin๊ณผ cos๋ก ๋ฐ๊ฟ์ ํด๋ด
์ฅ? mousePosition์ ์ด๋ป๊ฒ ๋ํด์?
mouseposition.x
์๋๋ค์ฌ
๋ญ ์ด์ฉ ์ ์์ง ์ ์๋๋ก ์ ํ๋ธ์์ ์ฐพ์๋ณด์
๋ด
๋ชฉํ ์์น๋ ๊ฐ๊น์ฐ๋ฉด ๋ฉ์ถ๊ฒ ํด์ผ์ง