unity通过点击地面进行移动

运行效果

unity通过点击地面进行移动

1、创建项目

2、创建Plane充当地面

3、修改地面的尺寸

4、为地面创建材质

1.创建Materals文件夹

2.右键创建Materal并命名为地面

3.将材质拖给地面Ground

4.修改材质颜色

5.修改贴图

6.修改平铺值

6.修改地面标签

点击地面在Inspector面板点击tag再add标签

最后将Ground的tag选择Ground

5、创建(胶囊体)Capsule充当玩家Player

修改player高度将他提高

创建一个方块充当Player的头

修改方块大小变得更合适一些

重复上述创建素材给他的头变成红色

6、修改摄像头角度

选中MainCamera,并在场景中将其调整合适的角度,使用快捷键ctrl+shift+F修改摄像机角度

7、创建脚本

创建一个Scripts文件夹,并在里面创建player脚本

8、编写脚本

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

public class Player : MonoBehaviour
{
    //是否正在移动
    private bool isMoving = false;
    //移动目标点
    private Vector3 targetPosition;
    //移动速度
    public float speed = 1.2f;

    //移动到某处
    public void MoveTo(Vector3 pos)
    {
        targetPosition = pos;
    }
    //移动 Update
    public void MoveUpdate()
    {
        if (isMoving == false)
        {
            return;

        }
        Vector3 pos = transform.position;
        //防止高度不一致造成低头等等行为
        targetPosition.y = pos.y;
        //将处于当前位置的物体匀速移动到
        transform.position = Vector3.MoveTowards(pos, targetPosition, speed * Time.
        deltaTime);
        transform.LookAt(targetPosition);
        if (Vector3.Distance(pos, targetPosition) < 0.05f)
        {
            isMoving = false;
        }
    }
    protected void Update()
    {
        MoveUpdate();

        //鼠标点击左键 
        if (Input.GetMouseButtonDown(0))
        {
            //接收左键点击屏幕的射线
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            //射线信息
            RaycastHit hit;
            //返回点击的射线
            Physics.Raycast(ray, out hit);
            //开启移动行为
            isMoving = true;
            //判断点击的物体标签是不是Ground
            if (hit.collider.tag == "Ground")
            {
                //将点击的位置传给MoveTo
                MoveTo(hit.point);
            }
        }
    }
}


8、完成将脚本给Player即可

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,下面是一个基本的Unity3D点选地面控制人物移动的示例代码: ``` using UnityEngine; public class PlayerController : MonoBehaviour { public float speed = 10f; // 移动速度 private Rigidbody rb; // 刚体组件 private Vector3 movement; // 移动方向 // 初始化,获取刚体组件 void Start() { rb = GetComponent<Rigidbody>(); } // 每帧更新 void FixedUpdate() { // 获取鼠标点击地面的位置 if (Input.GetMouseButton(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; if (Physics.Raycast(ray, out hit)) { // 计算移动方向 movement = (hit.point - transform.position).normalized; } } // 移动人物 rb.MovePosition(transform.position + movement * speed * Time.fixedDeltaTime); } } ``` 这个脚本会获取鼠标点击地面的位置,然后计算出人物需要移动的方向,并通过刚体组件移动人物。您可以根据自己的需要进行修改和扩展。 ### 回答2: 下面是一个基本的Unity3D代码段,用于在点击地面时控制人物移动到目标位置。 ```csharp using UnityEngine; public class PlayerMovement : MonoBehaviour { private Rigidbody playerRigidbody; // 玩家刚体组件 private bool isMoving; // 是否正在移动 private void Start() { playerRigidbody = GetComponent<Rigidbody>(); } private void Update() { if (Input.GetMouseButtonDown(0)) // 鼠标左键点击 { RaycastHit hit; Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit)) // 发出射线检测到地形 { MoveToDestination(hit.point); } } } private void MoveToDestination(Vector3 destination) { isMoving = true; playerRigidbody.MovePosition(destination); } } ``` 以上代码中,`PlayerMovement`类用于控制玩家角色的移动。在`Start`函数中,获取玩家的刚体组件。在`Update`函数中,如果鼠标左键被点击,发出一条射线从摄像机射向鼠标点击的位置。如果射线检测到地面(或其他可点击的层),则调用`MoveToDestination`函数,将角色移动点击位置。 `MoveToDestination`函数将`isMoving`标记为`true`表示角色正在移动,并使用`MovePosition`方法直接将玩家刚体移动到目标位置。 ### 回答3: 在Unity3D中点击地面控制人物的代码可以使用Raycast来实现。以下是一个简单的示例代码: ```csharp using UnityEngine; public class ClickToMove : MonoBehaviour { public float speed = 5f; // 人物移动速度 private CharacterController characterController; // 人物控制器 private void Start() { characterController = GetComponent<CharacterController>(); } private void Update() { if (Input.GetMouseButtonDown(0)) // 当左键点击时 { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); // 创建一条从相机到鼠标位置的射线 RaycastHit hit; if (Physics.Raycast(ray, out hit)) // 将射线投射到场景中 { // 如果射线碰到地面 if (hit.collider.CompareTag("Ground")) { // 获取射线碰撞点位置 Vector3 targetPosition = new Vector3(hit.point.x, transform.position.y, hit.point.z); // 计算人物的移动方向和距离 Vector3 moveDirection = targetPosition - transform.position; float distance = Vector3.Distance(transform.position, targetPosition); // 设置人物朝向 transform.LookAt(targetPosition); // 移动人物 characterController.Move(moveDirection.normalized * speed * Time.deltaTime); } } } } } ``` 以上代码中,我们创建了一个名为`ClickToMove`的脚本,将其挂载到主角物体上。当我们点击地面时,射线将会从相机位置发射到鼠标点击的地点,并将其射线碰撞到的位置设置为主角需要移动到的目标位置。然后,我们计算了主角的移动方向和距离,并将其朝向目标位置,最后根据移动方向和速度移动主角。请注意,在场景中需要有一个被标记为"Ground"的地面对象,以便射线可以正确碰撞到地面上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值