[U3D 画起重机,绑脚本和控制它运动的基本操作]

之前在学习Unity3D,不知为何网上的教学资源真是少啊...我某段时间还卡在不知如何让物体绑个脚本自动运动。。

之所以要学习U3D是因为导师让我做的IOS项目里有个需要模拟起重机,从而控制真实起重机的动画(为何不是挖掘机)。。。

这里就总结下U3D的基础知识。

==================================================

1.Unity画物体

在左边的Hierarchy(层次)表处,找到Create,然后选择Cube。Mac系统也可以从上面菜单栏选择GameObject创建。

Cube就是立方体。

创建完成后,点击该物体,在右边inspector设置长宽高,xyz轴,粗细等,自己搭个起重机吧,这种怎么放真是靠天分的。。

   

差不多就是这样。期间光源和摄像机角度要自己调整好。

2.给物体绑定脚本。

在下方Assets文件夹右键新建js脚本,复制下面的。

// 0==STOP,1==FORWARD,2==BACK
var Move=0;

//绘制UI界面
function OnGUI(){
    //设置GUI背景色
    GUI.backgroundColor = Color.red;
    if(GUI.Button(Rect(10,10,70,30),"向前移动")){
    	Move=1;
    	/*
        //向前移动
        if(transform.position.x<10){
        	transform.position.x+=0.1;
        }*/
    }
    if(GUI.Button(Rect(10,50,70,30),"向后移动")){
  		Move=2;
  		/*
        //向后移动
        if(transform.position.x>-9.5){
       	 transform.position.x-=0.1;
       	 }*/
    }  

    //显示模型位置信息
    GUI.Label(Rect(250,10,200,30),"模型位置"+transform.position); 

}  

function setxPosition(message:String){
	var xPosition=parseFloat(message);
	transform.position.x=xPosition;
}

function Start(){
	setxPosition("-5");
}

function Update(){
	switch(Move){
		case 0:
			break;
		case 1:
		    if(transform.position.x<10){
				transform.Translate(Time.deltaTime * 1, 0, 0);
			}
			break;
		case 2:
       		if(transform.position.x>-9.5){
				transform.Translate(Time.deltaTime * -1, 0, 0);
			}
			break;
		default:
			break;
	}
}

绑到想要绑定的物体上,如果想要绑定多个物体,比如我绑定的是中间那根杆子,绳子(cube模拟的),和下面的重物,让他们一起向前移动,就GameObject新建一个Empty的,然后把3个拖进去合并成一个再设定。

绑定脚本:直接把脚本拖到该物体的inspector就OK了。

3.研究下脚本:

代码里,OnGUI()函数创建了2个按钮,用来给用户控制,Update()函数是每帧都刷新的,这样的话,可以实现通过点击按钮来设置它的运动模式,下一帧挖掘机就会超你设定的方向走。

不过这里没写停止的按钮,所以根本停不下来...

当然我设置了一些边界,以防起重机散架。。。- -

4.获取GameObject(获取吊钩和绳子,让它俩上升下降)

// 0==STOP,1==UP,2==DOWN
var Move=0;

function OnGUI(){
    //设置GUI背景色
    GUI.backgroundColor = Color.red;  

    if(GUI.RepeatButton(Rect(10,190,70,30),"下降吊钩")){
        Move=1;
    /*
        //下降吊钩
        shengzi.localScale.y+=0.05;
        shengzi.position.y-=0.025;
        gouzi.position.y-=0.05;
    */
    }
    if(GUI.RepeatButton(Rect(10,230,70,30),"上升吊钩")){
        Move=2;
        //上升吊钩
        /*
        if(gouzi.position.y<19){
            shengzi.localScale.y-=0.05;
            shengzi.position.y+=0.025;
                gouzi.position.y+=0.05;
        }*/
    }
}  

function MoveUp(){
    Move=1;
}

function MoveDown(){
    Move=2;
}

function setyPosition(message:String){
    var yHeight=parseFloat(message);
    var shengzi = transform.Find("shengsuo");
    var gouzi = transform.Find("gouzi");
    shengzi.localScale.y=(20-yHeight);
    shengzi.position.y=20-(20-yHeight)/2;
    gouzi.position.y=yHeight;

}

function Start(){
    setyPosition("15");
}

function Update(){
    var shengzi = transform.Find("shengsuo");
    var gouzi = transform.Find("gouzi");
    switch(Move){
        case 0:
            break;
        case 1:
            if(gouzi.position.y>0){
                shengzi.localScale.y+=0.05;
                shengzi.position.y-=0.025;
                gouzi.position.y-=0.05;
            }
            break;
        case 2:
               if(gouzi.position.y<19){
                shengzi.localScale.y-=0.05;
                shengzi.position.y+=0.025;
                    gouzi.position.y+=0.05;
            }
            break;
        default:
            break;
    }
}

首先,这段代码正确的地方是获取物体的方式,网上实在不好找:

var shengzi = transform.Find("shengsuo");
"shengsuo"是创建的GameObject的名字。

至于为什么要用这些乱七八糟的数字,是因为我不知道把绳子某段设为中心点,一旦长度修改了,其伸长是向两端的,所以为了模拟下降,就把重心位置一直向下改。。谁看到了知道的话就在评论区教教我吧。3Q.

最后的效果:

时间: 2024-10-13 00:55:01

[U3D 画起重机,绑脚本和控制它运动的基本操作]的相关文章

Linux shell脚本流程控制

博主搬家至51CTO,初来乍到,请多指教. 此次我们来通过实例解析Linux shell脚本流程控制 Linux shell脚本流程控制可分为三类:顺序执行,条件选择执行,循环执行 顺序执行:简单理解就是逐行执行脚本内容,逐行解读,逐行执行.(此处不做实例解析) 条件选择执行:可以理解为先进行某一条件的判断选择,再决定执行怎样的脚本内容.常见语句if case 条件选择语句:if if语句用法: 单分支 if 判断条件;then 条件为真的分支代码 fi 双分支 if 判断条件; then 条件

使用Js脚本 修改控制IE的注册表相关设置(activex等)

使用Js脚本 修改控制IE的注册表相关设置(activex等) 分类: PHP2012-12-05 18:51 2035人阅读 评论(2) 收藏 举报 脚本写法: <SCRIPT LANGUAGE="JavaScript"><!--var WshShell=new ActiveXObject("WScript.Shell"); //添加信任站点ipWshShell.RegWrite("HKCU\\Software\\Microsoft\\

制作由下向上的滚动字幕,字幕内容要求包含网站超级链接和图片超级链接, 使用鼠标移动事件控制字幕运动和停止。 2、在下拉列表框中设置五种以上颜色,选择颜色后, 滚动字幕背景色改变成相应颜色

<!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <title></title>    </head>    <!--        时间:2016-12-28        描述:1.制作由下向上的滚动字幕,字幕内容要求包含网站超级链接和图片超级链接,                   使用鼠标移动事件控制

shell脚本流程控制

shell 脚本变成使用过程中通常需要流程控制,一般情况下是顺序执行,在实际使用过程中根据不同情况需要执行不同命令,这时就用到选择执行比如if.case,有时需要重复执行多次,循环执行比如for.while.until 条件选择执行语句if 单分支 双分支 if 判断条件;then 条件为真的分支代码 fi if 判断条件; then 条件为真的分支代码 else 条件为假的分支代码 fi [[email protected] ~]# vim score.sh   1 #!/bin/bash  

U3D 场景切换时 脚本对象,GO对象,资源对象的问题

脚本对象:在LUA中写了一个actor类,它封装了角色逻辑,引用了一个GO. GO对象:通过 GameObject.Instantiate(资源对象)生成的. 资源对象:制作好的模型prefab. 在场景切换时: actor是逻辑控制的,可以销毁也可以不销毁.销毁时可以手动销毁它使用的GO,也可以不手动销毁而坐等U3D在场景切换时销毁. GO对象是挂在场景上的(也即hierachy层级),如果不设置为 dontdestroyonload,则GO会在场景切换时被U3D销毁.这时我们的actor只剩

脚本的控制

处理信号 Linux通过信号在不同进程之间通信.Linux编程时可能遇到的常见信号如下: 信号 值 描述 1 SIGHUP 挂起进程 2 SIGINT 终止进程 3 SIGQUIT 停止进程 9 SIGKILL 无条件终止进程 15 SIGTERM 可能的话终止进程 17 SIGSTOP 无条件停止但不终止进程 18 SIGTSTP 停止或暂停但不终止进程 19 SIGCONT 继续执行停止的进程 1 信号的捕捉 trap命令用来指定shell需要捕捉哪些Linux信号,以及如何处理这些信号.格

Mininet实验 脚本实现控制交换机行为

实验原理 在SDN环境中,控制器可以通过对交换机下发流表操作来控制交换机的转发行为.在本实验中,使用Mininet基于python的脚本,调用“ovs-vsctl”命令直接控制Open vSwitch. 实验内容 一台交换机两台主机,实现从1端口进入的数据流转发到2端口,从2端口进入的数据流转发到1端口 mininet脚本代码如下: 1 from mininet.net import Mininet 2 from mininet.node import Node 3 from mininet.l

15Shell脚本—流程控制

流程控制语句 尽管可以通过使用Linux命令.管道符.重定向以及条件测试语句编写最基本的Shell脚本,但是这种脚本并不适用于生产环境.原因是它不能根据真实的工作需求来调整具体的执行命令,也不能根据某些条件实现自动循环执行. 例如,我们需要批量创建 1000 为用户,首先要判断这些用户是否已经存在:若不存在,则通过循环语句让脚本一次创建他们. 常用的有if.for.while.case这4种流程控制语句. if 条件测试语句 1.1 单分支结构 if 条件测试操作 then 命令序列 fi #s

python脚本来控制SecureCRT

对于不熟悉VB语法的童鞋们,不妨使用python来操作CRT命令行. 如下代码: #$language = "Python" #$interface = "1.0" def Main():     tab = crt.GetScriptTab()     if tab.Session.Connected != True:         crt.Dialog.MessageBox(             "Error.\n" +