這段角色移動的程式,使用鍵盤aswd控制上下左右,我想要改成用滑鼠控制,滑鼠點擊位置,角色能自動走過去(不是瞬間移動),然后配合相應的影片 有沒有大佬能幫我改一下程式,影片用的混合樹
public class PlayerMovement : MonoBehaviour
{
Rigidbody2D rb;
Collider2D coll;
Animator anim;
public float speed;
Vector2 movement;
private void Awake()
{
rb = GetComponent<Rigidbody2D>();
coll = GetComponent<Collider2D>();
anim = GetComponent<Animator>();
}
private void Update()
{
Movement();
SwitchAnim();
}
void Movement()//移動
{
movement.x = Input.GetAxisRaw("Horizontal");
movement.y = Input.GetAxisRaw("Vertical");
rb.MovePosition(rb.position + movement * speed * Time.deltaTime);
}
void SwitchAnim()//切換影片
{
if (movement != Vector2.zero)//保證Horizontal歸0時,保留movment的值來切換idle影片的blend tree
{
anim.SetFloat("horizontal", movement.x);
anim.SetFloat("vertical", movement.y);
}
anim.SetFloat("speed", movement.magnitude);//magnitude 也可以用 sqrMagnitude 具體可以參考Api 默認回傳值永遠>=0
}
}
uj5u.com熱心網友回復:
可以用射線來做uj5u.com熱心網友回復:
1.搞一個plane 可點擊2.update中判斷狀態量控制 是否可點擊狀態
string m_strClickArea_Tag = "ClickArea";
if (m_isChoiceGameObject) //可點擊狀態
{
if (Input.GetMouseButtonDown(0))
{
m_isChoiceGameObject = false; //點完重置為不可點擊
Vector3 touchPos = Input.mousePosition;
Camera curCamera = m_mainCamera;
if (curCamera != null)
{
touchPos.z = curCamera.nearClipPlane;
touchPos = curCamera.ScreenToWorldPoint(touchPos);
Vector3 dir = touchPos - curCamera.transform.position;
RaycastHit[] hits = Physics.RaycastAll(curCamera.transform.position, dir);
for (int i = 0; i < hits.Length; i++)
{
RaycastHit hit = hits[i];
if (hit.transform.CompareTag(m_strClickArea_Tag))
{
//if (EventSystem.current.IsPointerOverGameObject())
//{
// return;
//}
//世界坐標
Vector3 vector3 = new Vector3(hit.point.x, 0, hit.point.z);
//螢屏坐標
Vector3 vector3Screen = curCamera.WorldToScreenPoint(vector3);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/22255.html
標籤:Unity3D
