当前位置:   article > 正文

Unity 3D基本的移动操作_unity3d控制物体移动代码

unity3d控制物体移动代码

一、使用transform组件进行移动

transform组件是每一个游戏物体自带的组件,它表示的是Object的外在改变,里面的属性如图所示:

 Position-->Object的位置.  Rotation-->对Object进行旋转. Scale-->对Object进行缩放

而且Transform组件有很多内置方法,比如这次移动用到的就是--Translate方法.

实例代码如下:

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class move2 : MonoBehaviour
  5. {
  6. public float moveSpeed;
  7. private float x_direction;
  8. private float z_direction;
  9. // Start is called before the first frame update
  10. void Start()
  11. {
  12. }
  13. // Update is called once per frame
  14. void Update()
  15. {
  16. x_direction = Input.GetAxis("Horizontal");
  17. z_direction = Input.GetAxis("Vertical");
  18. this.transform.Translate(x_direction * moveSpeed, 0, z_direction * moveSpeed);
  19. }
  20. }

这样就可以实现一个简单的Object移动.Translate里面的可以是一个三维向量当作参数.

二、使用Rigidbody组件进行移动

Mass-->质量.   Drag-->阻力.   Angular Drag-->角阻力.   Use Gravity-->重力模式.  

Is Kinematic --> 是一种很自由的运动,抛开重力 

关于Interpolate和Collision Detection 笔者也没有用过,所以无法告知大家了.有大佬会的麻烦在评论区告诉我一声呗..

Constraints-->约束...下面分别是冻结位置和冻结旋转.

那么我们怎么使用Rigidbody来控制物体移动呢?    简单!!!!!

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class move2 : MonoBehaviour
  5. {
  6. private Rigidbody rb;
  7. public float moveSpeed;
  8. private float x_direction;
  9. private float z_direction;
  10. // Start is called before the first frame update
  11. void Start()
  12. {
  13. rb = GetComponent<Rigidbody>();
  14. }
  15. // Update is called once per frame
  16. void Update()
  17. {
  18. x_direction = Input.GetAxis("Horizontal");
  19. z_direction = Input.GetAxis("Vertical");
  20. rb.velocity = new Vector3(x_direction * moveSpeed, 0, z_direction * moveSpeed);
  21. }
  22. }

我们利用的是Rigidbody.velocity这个属性,这个属性可以获取当前Object的速度.只需要创建一个矢量单位,并且根据输入操作判断方向,就可以实现Object在这个方向移动.

三、利用鼠标控制移动

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class move2 : MonoBehaviour
  5. {
  6. Vector3 tempPoint = new Vector3(0, 0, 0);
  7. // Start is called before the first frame update
  8. // Update is called once per frame
  9. void Update()
  10. {
  11. PlayerMove_FollowMouse();
  12. }
  13. private void PlayerMove_FollowMouse()
  14. {
  15. if(Input.GetMouseButtonDown(1))
  16. {
  17. Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  18. RaycastHit hitInfo;
  19. if (Physics.Raycast(ray, out hitInfo))
  20. {
  21. tempPoint = hitInfo.point;
  22. }
  23. }
  24. float step = 10 * Time.deltaTime;
  25. this.transform.localPosition = Vector3.MoveTowards(this.transform.localPosition, tempPoint, step);
  26. this.transform.LookAt(tempPoint);
  27. }
  28. }

 行啦,笔者不才.目前还是一个新手会的移动控制只有这么多了

如果对您有所帮助,请关注一下吧........

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/109207
推荐阅读
相关标签
  

闽ICP备14008679号