角色控制

1.角色2d游戏八方向wasd控制代码。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CharCTR : MonoBehaviour
{
    public GameObject myChar;
    float moveSpeed = 1.5f;

    public Animator ani;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        //通过刚体控制物体移动,需要添加刚体
        Vector3 moveForward = Vector3.zero;
        
         
            if (Input.GetKey(KeyCode.W) && !Input.GetKey(KeyCode.A) && !Input.GetKey(KeyCode.D))
            {
                moveForward.y += 1;
                ani.SetInteger("charState", 1);
                ani.SetInteger("walkState", 4);
                ani.SetInteger("idleState", 4);
            }
            else if (Input.GetKey(KeyCode.S) && !Input.GetKey(KeyCode.A) && !Input.GetKey(KeyCode.D))
            {
                moveForward.y += -1;
            ani.SetInteger("charState", 1);
            ani.SetInteger("walkState", 0);
            ani.SetInteger("idleState", 0);
            }
            else if (Input.GetKey(KeyCode.A) && !Input.GetKey(KeyCode.W) && !Input.GetKey(KeyCode.S))
            {
                moveForward.x += -1;
            ani.SetInteger("charState", 1);
            ani.SetInteger("walkState", 2);
            ani.SetInteger("idleState", 2);
            }
            else if (Input.GetKey(KeyCode.D) && !Input.GetKey(KeyCode.W) && !Input.GetKey(KeyCode.S))
            {
                moveForward.x += 1;
            ani.SetInteger("charState", 1);
            ani.SetInteger("walkState", 6);
            ani.SetInteger("idleState", 6);

            }
        else if (Input.GetKey(KeyCode.D) && Input.GetKey(KeyCode.W) )
        {
            moveForward.x += 1;
            moveForward.y += 1;
            ani.SetInteger("charState", 1);
            ani.SetInteger("walkState", 5);
            ani.SetInteger("idleState", 5);

        }
        else if (Input.GetKey(KeyCode.A) && Input.GetKey(KeyCode.W))
        {
            moveForward.x += -1;
            moveForward.y += 1;
            ani.SetInteger("charState", 1);
            ani.SetInteger("walkState", 3);
            ani.SetInteger("idleState", 3);

        }
        else if (Input.GetKey(KeyCode.A) && Input.GetKey(KeyCode.S))
        {
            moveForward.x += -1;
            moveForward.y += -1;
            ani.SetInteger("charState", 1);
            ani.SetInteger("walkState", 1);
            ani.SetInteger("idleState", 1);

        }
        else if (Input.GetKey(KeyCode.D) && Input.GetKey(KeyCode.S))
        {
            moveForward.x += 1;
            moveForward.y += -1;
            ani.SetInteger("charState", 1);
            ani.SetInteger("walkState", 7);
            ani.SetInteger("idleState", 7);

        }
        else
        {
            ani.SetInteger("charState", 0);
        }
        
        GetComponent<Rigidbody2D>().MovePosition(moveForward * moveSpeed * Time.fixedDeltaTime+transform.position);
        
    }
}

animator

锁定Z轴旋转

2.鼠标控制

        Vector3 moveForward = Vector3.zero;
        //将世界坐标换算成屏幕坐标

        Vector3 vpos3 = Camera.main.WorldToScreenPoint(transform.position);
        Vector2 vpos2 = new Vector2(vpos3.x, vpos3.y);
        //取得鼠标点击的屏幕坐标

        Vector2 input = new Vector2(Input.mousePosition.x, Input.mousePosition.y);

        //取得主角到目标点的向量

        Vector2 normalied = ((vpos2-input)).normalized;

        //注意normalized是格式化向量,以为vpos2 – input是计算两个向量之间的距离,格式化后才是它们的方向。格式化后向量的取值范围在 - 1 到 + 1 之间。

        //我们忽略Z轴的向量,把2D向量应用在3D向量中。

        Vector3 targetDirection = new Vector3(normalied.x,  normalied.y,0.0f);

 

posted on 2020-11-08 20:35  怪客  阅读(135)  评论(0)    收藏  举报