当前位置: 首页 > article >正文

【日志】力扣167.两数之和2 - 输入有序数组 // Unity——Roll A Ball(一)

2024.11.11

【力扣刷题】

167. 两数之和 II - 输入有序数组 - 力扣(LeetCode)

这题返回的是一个指针数组,所以得动态创建这个数组。因为给了一个有序数组,所以可以通过双指针的方式,进行首尾相加判断。

malloc 是C语言的动态内存分配函数,它从堆上分配指定大小的连续内存空间,并返回指向这块内存区域的指针。如果分配成功,则返回非空指针;否则(例如,当系统内存不足时),返回NULL。

int* twoSum(int* numbers, int numbersSize, int target, int* returnSize) {
    int* ret = (int*)malloc(sizeof(int) * 2);
    *returnSize = 2;

    int left = 0, right = numbersSize - 1;
    while (left < right) {
        int sum = numbers[left] + numbers[right];
        if (sum == target) {
            ret[0] = left + 1;
            ret[1] = right + 1;
            return ret;
        }
        if (sum < target) {
            left++;
        } 
        if (sum > target) {
            right--;
        }
    }
    ret[0] = -1, ret[1] = -1;
    return ret;
}

【Unity】

Roll A Ball

1.搭建场景

一个球体(Player)以及一个平面(Ground),并赋予其不同颜色的材质。

小球需要赋予一个刚体(RigidBody)组件。

2.实现小球移动
2.1安装Input System

2.2编写并挂载玩家移动脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;

public class PlayerController : MonoBehaviour
{
    public float speed = 5f;
    private Rigidbody rb;
    private float movementX;
    private float movementY;

    // Start is called before the first frame update
    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void OnMove(InputValue movementValue)
    {
        // 获取到输入的移动向量
        Vector2 movementVector = movementValue.Get<Vector2>();
        movementX = movementVector.x;
        movementY = movementVector.y;
    }
    
    // 物理帧更新
    void FixedUpdate()
    {
        // Vector2 记录了水平方向上的移动,转换成 Vector3 时对应x、z轴,y轴为0
        Vector3 movement = new Vector3(movementX, 0.0f, movementY);
        rb.AddForce(movement * speed);
    }
}
2.3编写并挂载摄像机跟随脚本

摄像机需要加高,并且向下旋转45度。

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

public class CameraController : MonoBehaviour
{
    public GameObject player;
    private Vector3 offset;

    // Start is called before the first frame update
    void Start()
    {
        offset = transform.position - player.transform.position;
    }

    // Update is called once per frame
    void LateUpdate() // 确保是在所有的Update函数执行完之后才执行
    {
        transform.position = player.transform.position + offset;
    }

}

——每天努力十五分钟,一年就努力了5475分钟,也就是91.25小时。(记得乘上0.7,这是扣去双休和法定的节假日的时间的)


http://www.kler.cn/a/390368.html

相关文章:

  • 第74期 | GPTSecurity周报
  • uniapp+vue2 设置全局变量和全局方法 (兼容h5/微信小程序)
  • 如何用WordPress和Shopify提升SEO表现?
  • 软件测试面试题(800道)【附带答案】持续更新...
  • Rust 整数
  • vwmare虚拟机繁忙的解决办法
  • diboot低代码中使用junit测试controller,入参不生效问题解决
  • Java学习教程,从入门到精通,Java修饰符语法知识点及案例代码(23)
  • openlayers实现图层裁剪,只展示关心区域,抹掉无关区域,“抠”地图
  • ARM64环境使用docker-compose进行ElasticSearch8集群部署
  • Scala中的可变Map操作:简单易懂指南 #Scala Map #Scala
  • CTF 入门指南:从零开始学习网络安全竞赛
  • 数据结构 栈和队列
  • kafka面试题解答(四)
  • 软件测试学习记录 Day1
  • Mysql中数据添加,修改,删除
  • python实战(七)——基于LangChain的RAG实践
  • Simulink对仿真数据进行FFT频谱分析
  • Unity中IK动画与布偶死亡动画切换的实现
  • 【学习记录丨UVM】2.1uvm_component 与uvm_object
  • 人到一定年纪,要学会远离多巴胺
  • 群控系统服务端开发模式-应用开发-前端框架
  • 必应 Bing 国内广告开户及代运营服务的优势有哪些?
  • UE5.3 CineCameraRigRail组件实测
  • 实现3D热力图
  • VPN相关学习笔记