Unity3D控制物体移动

在游戏开发中,游戏物体的移动是最基本的,如果连物体都移动不起来,那就不用说玩游戏了。

下面记录了自己在开发中实现的物体移动,不同项目可能有不同的物体移动实现,也有很多种不同的物体移动实现,文章会持续更新。

1.rigidbody.MovePosition()控制物体上下左右移动(简单好用)

// Update is called once per frame
    void Update()
    {
        //控制移动
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");

        rigidbody.MovePosition(transform.position + new Vector3(h, 0, v) * speed * Time.deltaTime);
    }

2.transform.Translate();上下左右移动

using UnityEngine;
using System.Collections;

public class Move : MonoBehaviour
{
    public float speed = 5;
    private Transform transform;

    // Use this for initialization
    void Start()
    {
        transform = this.GetComponent<Transform>();
    }

    // Update is called once per frame
    void Update()
    {
        float h = Input.GetAxis("Horizontal");
        float v = Input.GetAxis("Vertical");

        transform.Translate(new Vector3(h, 0, v) * speed * Time.deltaTime);
    }
}

3.点击鼠标,物体移动到鼠标位置(2D,transform.position)

if (isMouseDown && GameManager._instance.gameState == GameState.Runing)
        {
            if (lastMousePosition != Vector3.zero)
            {
                //Camera.main.ScreenToWorldPoint(Input.mousePosition)
                Vector3 offest = Camera.main.ScreenToWorldPoint(Input.mousePosition) - lastMousePosition;//位移
                transform.position = transform.position + offest;
                checkPosition();
            }
            lastMousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        }

4.rigidbody2D.AddForce();(2D游戏添加力左右移动物体,忍者跑酷)

void Update()
    {
        if (isSlide == false)
        {
            float h = Input.GetAxis("Horizontal");
            Vector2 velocity = rigidbody2D.velocity;


            if (h > 0.05f)
            {
                rigidbody2D.AddForce(Vector2.right * force_move);
            }
            else if (h < -0.05f)
            {
                rigidbody2D.AddForce(-Vector2.right * force_move);
            }
    }
 

5.点击鼠标,物体移动到鼠标的位置(3D,Vector3.MoveToWards()函数,BeatPlane飞机大战)

实现代码:

protected Transform _transform;
protected Vector3 targetPos;//目标位置

    // Use this for initialization
    void Start()
    {
        _transform = this.transform;
        targetPos = this._transform.position;
    }

    void MoveTo()
    {
        if (Input.GetMouseButton(0))
        {
            //获得鼠标屏幕位置
            Vector3 mousePos = Input.mousePosition;
            //将屏幕位置转为射线
            Ray ray = Camera.main.ScreenPointToRay(mousePos);
            //用来记录射线碰撞记录
            RaycastHit hitInfo;
            //产生射线
            bool isCast = Physics.Raycast(ray, out hitInfo, 1000, inputMask);
            if (isCast)
            {
                //如果射中目标,记录射线碰撞点 
                targetPos = hitInfo.point;
            }
        }
        //使用Vector3提供的MoveTowards函数,获得朝目标移动的位置
        Vector3 pos = Vector3.MoveTowards(this._transform.position, targetPos, speed * Time.deltaTime);
        //更新当前位置
        this._transform.position = pos;
    }

游戏运行时,点击鼠标,物体就会移动到鼠标所点击的位置。

6.键盘WSAD控制物体的上下左右移动(这个比较复杂。。)

void Control()
    {

        //获取鼠标移动距离
        float rh = Input.GetAxis("Mouse X");
        float rv = Input.GetAxis("Mouse Y");

        // 旋转摄像机
        m_camRot.x -= rv;
        m_camRot.y += rh;
        m_camTransform.eulerAngles = m_camRot;

        // 使主角的面向方向与摄像机一致
        Vector3 camrot = m_camTransform.eulerAngles;
        camrot.x = 0; camrot.z = 0;
        m_transform.eulerAngles = camrot;

        // 定义3个值控制移动
        float xm = 0, ym = 0, zm = 0;

        // 重力运动
        ym -= m_gravity * Time.deltaTime;

        //按键盘W向上移动
        if (Input.GetKey(KeyCode.W))
        {
            zm += m_movSpeed * Time.deltaTime;
        }
        else if (Input.GetKey(KeyCode.S))//按键盘S向下移动
        {
            zm -= m_movSpeed * Time.deltaTime;
        }

        if (Input.GetKey(KeyCode.A))//按键盘A向左移动
        {
            xm -= m_movSpeed * Time.deltaTime;
        }
        else if (Input.GetKey(KeyCode.D))//按键盘D向右移动
        {
            xm += m_movSpeed * Time.deltaTime;
        }<pre name="code" class="csharp">}
 
 


  • 17
    点赞
  • 113
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值