GDPU unity游戏开发 角色控制器与射线检测

在你的生活中,你一直扮演着你的角色,别被谁控制了。

小试

1. 创建一个角色控制器,通过键盘控制角色控制器的移动,角色控制器与家具发生碰撞后,通过Debug语句打印出被碰撞物体的信息(搜索OnControllerColliderHit的使用方法)。

2. 通过屏幕射线进行碰撞检测,使得鼠标点击某个家具后,通过Debug语句打印该物体的信息。

先搭建好场景

 

然后以玩具小车做角色控制器

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    private CharacterController controller;
    float speed = 5.0f;

    void Start()
    {
        // 获取角色控制器组件
        controller = GetComponent<CharacterController>();
    }
    void Update()
    {
        // 获取键盘输入,相对全局坐标移动
        float hInput = Input.GetAxis("Horizontal");
        float vInput = Input.GetAxis("Vertical");

        // 计算移动方向
        Vector3 moveDirection = new Vector3(hInput, 0, vInput);
        moveDirection = transform.TransformDirection(moveDirection);//转为全局坐标

        // 使用角色控制器进行移动
        controller.Move(moveDirection * speed * Time.deltaTime);
    }
//    // 获取角色的 Transform 组件
//Transform characterTransform = characterController.transform;

 将全局坐标系中的输入值转换为角色本地坐标系中的输入值
//Vector3 moveInput = new Vector3(hInput, 0, vInput);
//moveInput = characterTransform.InverseTransformDirection(moveInput);

 在角色的本地坐标系中应用输入值
//characterController.Move(moveInput * Time.deltaTime * moveSpeed);
    // 当角色控制器与其他碰撞体发生碰撞时调用
    void OnControllerColliderHit(ControllerColliderHit hit)
    {
        // 打印被碰撞物体的信息
        Debug.Log("Collision with: " + hit.collider.gameObject.name);
    }
}

 

把射线检测挂载在相机上

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

public class sctoRay : MonoBehaviour
{
    void Update()
    {
        // 检测鼠标左键是否被点击
        if (Input.GetMouseButtonDown(0))
        {
            // 发射一条射线从鼠标点击的位置
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;

            // 检测射线是否击中物体
            if (Physics.Raycast(ray, out hit))
            {
                // 获取击中物体的信息并打印
                GameObject hitObject = hit.collider.gameObject;
                //Debug.DrawLine(ray.origin, hit.point, Color.red,5);
                Debug.DrawRay(ray.origin, ray.direction * hit.distance, Color.red, 5);
                Debug.Log("Clicked on: " + hitObject.name);
                Debug.Log("Position: " + hitObject.transform.position);
                Debug.Log("Rotation: " + hitObject.transform.rotation.eulerAngles);
                Debug.Log("Scale: " + hitObject.transform.localScale);
                // 可以打印更多信息,如碰撞体、脚本组件等

                
            }
        }
    }
}

实验心得 

哪家的天才少年亦为情所束缚,所以归途在哪。

 

 

相关推荐

  1. 【Unity入门】详解Unity中的射线射线检测

    2024-05-13 20:16:02       31 阅读
  2. uniapp开发射击类小游戏

    2024-05-13 20:16:02       26 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-13 20:16:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-13 20:16:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-05-13 20:16:02       82 阅读
  4. Python语言-面向对象

    2024-05-13 20:16:02       91 阅读

热门阅读

  1. KUKA机器人专业名词解释

    2024-05-13 20:16:02       36 阅读
  2. 大型ERP设计-业务与功能指引:供应商寄售业务

    2024-05-13 20:16:02       39 阅读
  3. docker-compose使用

    2024-05-13 20:16:02       38 阅读
  4. Pytorch中的self.parameters()

    2024-05-13 20:16:02       35 阅读
  5. leetCode33. 搜索旋转排序数组

    2024-05-13 20:16:02       37 阅读
  6. 视觉SLAM14精讲——三维空间刚体运动1.1

    2024-05-13 20:16:02       38 阅读
  7. C++拓展之万能头

    2024-05-13 20:16:02       88 阅读