美文网首页
Unity物体移动的三种方式(CharacterControll

Unity物体移动的三种方式(CharacterControll

作者: MaloFleur | 来源:发表于2022-09-19 23:07 被阅读0次

    在Unity中,想让物体移动,比较常见的方式有三种

    1. 借助CharacterController
      CharacterController中包含一个Move函数,调用cc.Move(distance)即可实现移动
    2. 借助RigidBody
      若物体中挂载了RigidBody,则也可以通过给物体施加力的方式实现移动
      即rigidBody.AddForce(force)
    3. 借助NavMeshAgent
      NavMeshAgent是Unity内置的一款寻路插件,将地平面plane设置为Navigation Static后,在Navigation页面进行Bake,即可生成路网,之后调用agent.SetDestination(targetPosition)即可实现移动
    1.png 2.png

    下面的代码展示了三种移动方式的简单使用方法
    但要注意几点

    1. RigidBody和CharacterController不能同时挂在一个物体上(下面的代码只是一个示例,实际同时挂上两个组件,rigidbody的方法是无法运行的), 因为这两个组件是冲突的,添加了CharacterController组件后,人物将不受力影响,在脚本中通过rigidbody对人物施加力也是无效的。
    2. NavMeshAgent默认开启了UpdatePosition,只要调用SetDestination后,agent会自动带动gameobject开始移动,为了方便控制transform,往往会将UpdatePosition置为false,然后在gameobject自己的update中,令transform.position = agent.nextposition,也可以实现物体跟随agent移动
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class RigidMove : MonoBehaviour
    {
        private Rigidbody rigidBody;
        private CharacterController cc;
        private UnityEngine.AI.NavMeshAgent agent;
        // Start is called before the first frame update
        void Start()
        {
            rigidBody = gameObject.GetComponent<Rigidbody>();
            cc = gameObject.GetComponent<CharacterController>();
            agent = gameObject.GetComponent<UnityEngine.AI.NavMeshAgent>();
        }
    
        // Update is called once per frame
        void Update()
        {
            if(Input.GetKey(KeyCode.A))
            {
                rigidBody.AddForce(transform.up * 20);
            }
            if (Input.GetKey(KeyCode.S))
            {
                cc.Move(transform.forward);
            }
            if (Input.GetKey(KeyCode.D))
            {
                agent.SetDestination(transform.forward * 10);
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:Unity物体移动的三种方式(CharacterControll

          本文链接:https://www.haomeiwen.com/subject/fxzvortx.html