unity一道有意思的面试题

学校享受的日子一去不复还了,呜呜。话说面试了几个公司,真心没准备好就上了,结果当然是小悲催。还好有容身之处,就算是搬砖,也有可能为自己盖楼,吼吼。

好,下面我来分享一道有意思的面试题,说他有意思,是因为这个题目的意义很重要的,好了不卖官司了,先看看题目:

三维空间,Y轴朝上,重力加速度为大小为g, 已知A(x1, y1, z1), B(x2, y2, z2)是三维空间中的两个点,现在从A点发射一个物体,希望该物体经过时间t之后,落在B点,请给出计算发射速度向量。

说到这,请把unity相关的API全部忘记吧,因为这道题是考察物理和几何的,跟unity API,引擎无关。(话说我面试的公司虽然招unity,可连一句unity的知识都没问啊!)

怎么做呢?在思考题目的解法之前,我先说说这个目的实用价值,你在做AI的时候绝对用得着。就算不写AI,拿个简单的例子,愤怒的小鸟中,可以实现“金手指”功能,给个时间,角度和力度都算出来了,

多神气啊。再举个例子,做动态过场动画的时候,例如需要一发炮弹击中某物体,如果你写的炮弹准确度不高,那过场动画不就完了(当然也有其他方案可以避免),我的意思

就是说,可以使用这个方案实现炮弹的精确打击,而且一切又是那么自然,有重力,也有抛物线,多美好的轨迹啊!

好吧,我说这么多,就是提醒大家,如果在学习中遇到一些有意思的算法或者功能,可以结合到项目实际中去,这样的才发挥他的价值。

嗯,是时候写出答案了。伪代码如下:

//发射初速度V在X,Y,Z轴的速度分量Vx,Vy,Vz,abs(float value)是绝对值函数

Vx =  abs (x2-x1)   /t;

Vy =abs (y1-y2)/t+(1/2f)gt;

Vz =  abs (x2-x1)    /t;

V =Vector3 (Vx,Vy,Vz);

V就是我们要求的结果。看上去这个式子没什么大不了的,现在来看看把他怎么放到工程里面吧。

我们自己掌握的变量:时间T,坐标P1,坐标P2,有了这三个,一道完美的轨迹就出现了!

代码如下:

using UnityEngine;
using System.Collections;

public class TestSpeed : MonoBehaviour {
    public float time=3;//代表从A点出发到B经过的时长
    public Transform pointA;//点A
    public Transform pointB;//点B
    public float g=-10;//重力加速度
    // Use this for initialization
    private Vector3 speed;//初速度向量
    private Vector3 Gravity;//重力向量
    void Start () {

        transform.position = pointA.position;//将物体置于A点
        //通过一个式子计算初速度
        speed = new Vector3((pointB.position.x - pointA.position.x)/time,
            (pointB.position.y-pointA.position.y)/time-0.5f*g*time, (pointB.position.z - pointA.position.z) / time);
        Gravity = Vector3.zero;//重力初始速度为0
    }
    private float dTime=0;
    // Update is called once per frame
    void FixedUpdate () {

        Gravity.y = g * (dTime += Time.fixedDeltaTime);//v=at
        //模拟位移
        transform.Translate(speed*Time.fixedDeltaTime);
        transform.Translate(Gravity * Time.fixedDeltaTime);
    }
}

点击运行之前,先将A,B两点赋值。然后运行,一个完美的曲线就此划下。

本文链接:http://www.cnblogs.com/jqg-aliang/p/4806017.html,转载请申明出处,谢谢!

时间: 2024-10-25 06:51:53

unity一道有意思的面试题的相关文章

一道有意思的笔试题引发的对于new操作符的思考

楼主比较喜欢看一些很短但很有意思的题目,无意间又瞥到了一题,大家不妨可以一试.(原题链接猛戳这里) function Fn1() { this.name = 'peter'; return { name: 'jack' }; } function Fn2() { this.name = 'peter'; return 'jack'; } var obj1 = new Fn1(); var obj2 = new Fn2(); console.log(obj1.name, obj2.name); 或

一道SQL的面试题之联想

一道SQL的面试题之联想 本人工作在一家小型的民营企业,主要从事业务系统的日常维护,二次开发,菜鸟一枚.周五经理准备面试两个开发人员,据简历,都还比较不错,让经理产生了想法,于是准备了一套面试题目,给我们亮了一道SQL题目,非他之手,据出此题者说,如果面试者只能写出一种方法,基本可以pass.请读者仔细看题: 题目:如下表,用一条select语句求出所有课程在80分(含80分)以上的学生姓名,请写出所有可行方案.(注意:表名为sc,字段为name,kc,score) 这道题目并不陌生吧,相信大家

有意思的笔试题记录与分析

昨天参加了某公司的笔试,总的来说题目很简单.但是还是有几个个题目是很有意思的,拿来和大家分享下! 1.小周带着他的鸵鸟穿越1000公里的沙漠,运送3000颗白菜.已知鸵鸟一次性可驼1000颗白菜,但每走1公里又要吃掉1棵白菜,问:小周最终可以运多少颗白菜? 分析:记得以前算法设计书上有个类似的油车过沙漠的问题,当时这问题是用倒推法来解决的,因为它有个结题突破口:油车以最少的耗油量穿过沙漠.本题同是过沙漠问题,但是却没有像油车过沙漠的解题突破口,怎么办呢?我们先想一个极限:让小周直接带着1000颗

一道线程的面试题

线程1循环3次,线程2循环6次,线程3循环9次,接着又回到线程1循环3次,线程2循环6次,线程3循环9次...如此循环50次 1 package ch03; 2 3 import java.util.concurrent.locks.Condition; 4 import java.util.concurrent.locks.Lock; 5 import java.util.concurrent.locks.ReentrantLock; 6 7 public class ConditionCom

一道线程同步面试题

package com.wsy.model; /** * 完成主线程循环10次,接着子线程循环5次,如此往复10次 * * @author wsy * */ public class TraditionalThreadCommunication { static Bussiness bussiness = new Bussiness(); public static void main(String[] args) { new Thread(new Runnable() { @Override

一道Android OpenGL笔试题

一道Android OpenGL笔试题 SkySeraph May. 5th 2016 Email:[email protected] 更多精彩请直接访问SkySeraph个人站点:www.skyseraph.com 题目 设计一个Android平台的Gallery组件,要求Gallery中每个item内的图片显示达成有效显示的最大精度,并保证Gallery在滚屏时能够全60FPS帧率地及时显示出加载的图片.请详细说明实现架构.关键技术点及APIs. 约束条件:GPU空间传输通道带宽较小,对于4

[笔记]一道C语言面试题:IPv4字符串转为UInt整数

题目:输入一个IPv4字符串,如“1.2.3.4”,输出对应的无符号整数,如本例输出为 0x01020304. 来源:某500强企业面试题目 思路:从尾部扫描到头部,一旦发现无法转换,立即返回,减少无谓操作. #include "stdio.h" #include "stdlib.h" #include "string.h" bool ConvertIPv4ToUInt(const char *strIP, unsigned int *ip) {

一道有意思的C语言编程题

最近在看经典的C语言入门书籍K&R,虽然是一本入门书籍,可是其中的精妙之处却需要慢慢体会.其中的经典题很多,仔细琢磨一定会收获良多. 今天看到这样一道题:编写一个删除C语言程序中所有的注释语句.感觉颇有意思,与大家一起分享一下: 我的思路: 找到注释的起始符号 \ 判断紧接着的输入字符,如果是*或者是\,则说明后面全是注释,跳过即可,否则照样输出 其他则直接输出 疑问: 所配套的答案书中提出要考虑引号后面的内容以做出响应,不是很明白这是为什么.个人认为无需考虑引号的影响也能将注释去除,希望有高手

解析js中作用域、闭包——从一道经典的面试题开始

如何理解js中的作用域,闭包,私有变量,this对象概念呢? 就从一道经典的面试题开始吧! 题目:创建10个<a>标签,点击时候弹出相应的序号 先思考一下,再打开看看 //先思考一下你会怎么写,是不是这样? 可是结果呢,弹出来的都是10,为啥? var i,a for(i=0;i<10;i++){ a=document.createElement('a') a.innerHTML=i+'<br>' a.addEventListener('click',function(eve