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即可

### Unity 中实现点击地面行走与光圈视觉反馈 在 Unity 游戏开发中,要实现角色通过点击地面移动,并伴随光圈效果作为视觉反馈,可以按照如下方法构建功能。 #### 角色控制器设置 为了使角色能够响应鼠标点击位置并朝向该方向前进,需编写脚本来处理输入逻辑以及运动控制。下面是一个简单的 C# 脚本用于检测玩家的点击事件并将目标点传递给角色: ```csharp using UnityEngine; public class ClickToMove : MonoBehaviour { private CharacterController controller; void Start() { controller = GetComponent<CharacterController>(); } void Update() { if (Input.GetMouseButtonDown(0)) { // 当左键被按下时触发 HandleClick(); } } void HandleClick() { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; if (Physics.Raycast(ray, out hitInfo)) { MoveCharacter(hitInfo.point); // 将命中点的位置传入函数 } } void MoveCharacter(Vector3 targetPosition) { Vector3 direction = targetPosition - transform.position; direction.y = 0; // 忽略高度差 float step = Time.deltaTime * speed; controller.Move(direction.normalized * step); ShowVisualFeedback(targetPosition); // 显示光圈特效 } } ``` 此段代码实现了基本的角色跟随鼠标的交互机制[^1]。 #### 添加光圈视觉反馈 对于创建一个圆形光环的效果,在场景里放置预制件(Prefab),比如粒子系统或者 UI 图像组件,当接收到命令后激活它。这里假设已经有一个名为 `CircleEffect` 的预制体可用,则可以在上述类中加入以下部分完成效果展示: ```csharp [SerializeField] private GameObject circleEffectPrefab; void ShowVisualFeedback(Vector3 position) { Instantiate(circleEffectPrefab, position, Quaternion.identity); } ``` 这段附加的代码片段负责实例化预先准备好的光晕对象到指定地点上,从而提供即时性的用户界面提示[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值