Ⅰ unity3d 有个官方的车的例子 速度为什么乘2.23693629
控制角色移动播放动作或者其他逻辑则需要给这个橘色节点绑定逻辑脚本,UNity支持多种脚本语言,在此是用JAVA脚本.
创建 脚本Assets --> Create ----> JavaScript 创建一个空的逻辑脚本,并将这个脚本绑定在主角对象身上,绑定方式是直接拖拽到主角节点即可。
对脚本的编写:
类及接口主要参照帮助文档,这里只介绍脚本基本结构和简单示例:
每个脚本至少都有两个函数: function Start() 可以认为是初始化 function Updata()则是每帧更新函数。
要实现对角色位置的控制移动首先要定义该角色,
首先 定义GameObject对象也就是要控制的目标: private var _MainRole:GameObject;;
在function Start() 函数中初始化该对象: inRole = GameObject.Find("MainRole"); // 从场景中查找到名叫"MainRole"的对象也就是主角。
在每帧更新时侦听键盘事件,如果按键按下W则空对象向前移动
if(Input.GetKey(KeyCode.W))
{
_MainRole.transform.Translate( Vector3.forward * 0.05 );
}
至此,就已经完成按键控制角色移动的全部过程,运行游戏就可以用按键控制角色移动。
Ⅱ 求一段unity3D汽车自动驾驶的脚本代码
1、把脚本直接连到汽车车身网格上,车身要有Rigidbody Component,要有四个轮子网格做子物体。 要想有声音的话还要有AudioSource Component。
2、打开Inspector,选择汽车脚本,把四个轮子连接到相对应的Transform参数上。设置wheelRadius参数为你轮子网格的大小。WheelCollider是自动生成的,所以无需手动添加。这样就能保证运行了,其他的声音和灰尘可以再添加。
脚本源代码如下:*/
#pragma strict
//maximal corner and braking acceleration capabilities
var maxCornerAccel=10.0;
var maxBrakeAccel=10.0;
//center of gravity height - effects tilting in corners
var cogY = 0.0;
//engine powerband
var minRPM = 700;
var maxRPM = 6000;
//maximum Engine Torque
var maxTorque = 400;
//automatic transmission shift points
var shiftDownRPM = 2500;
var shiftUpRPM = 5500;
//gear ratios
var gearRatios = [-2.66, 2.66, 1.78, 1.30, 1.00];
var finalDriveRatio = 3.4;
//a basic handling modifier:
//1.0 understeer
//0.0 oversteer
var handlingTendency = 0.7;
//graphical wheel objects
var wheelFR : Transform;
var wheelFL : Transform;
var wheelBR : Transform;
var wheelBL : Transform;
//suspension setup
var suspensionDistance = 0.3;
var springs = 1000;
var dampers = 200;
var wheelRadius = 0.45;
//particle effect for ground st
var groundDustEffect : Transform;
private var queryUserInput = true;
private var engineRPM : float;
private var steerVelo = 0.0;
private var brake = 0.0;
private var handbrake = 0.0;
private var steer = 0.0;
private var motor = 0.0;
//private var skidTime = 0.0;
private var onGround = false;
private var cornerSlip = 0.0;
private var driveSlip = 0.0;
private var wheelRPM : float;
private var gear = 1;
//private var skidmarks : Skidmarks;
private var wheels : WheelData[];
private var wheelY = 0.0;
private var rev = 0.0;
//Functions to be used by external scripts
//controlling the car if required
//===================================================================
//return a status string for the vehicle
function GetStatus(gui : GUIText) {
gui.text="v="+(rigidbody.velocity.magnitude * 3.6).ToString("f1") km/h\ngear= "+gear+"\nrpm= "+engineRPM.ToString("f0");
}
//return an information string for the vehicle
function GetControlString(gui : GUIText) {
gui.text="Use arrow keys to control the jeep,\nspace for handbrake."; }
//Enable or disable user controls
function SetEnableUserInput(enableInput)
{
queryUserInput=enableInput;
}
//Car physics
//===================================================================
//some whee calculation data
class WheelData{ + "
var rotation = 0.0;
var coll : WheelCollider;
var graphic : Transform;
var maxSteerAngle = 0.0;
var lastSkidMark = -1;
var powered = false;
var handbraked = false;
var originalRotation : Quaternion;
};
function Start () {
//setup wheels
wheels=new WheelData[4];
for(i=0;i<4;i++)
wheels[i] = new WheelData();
wheels[0].graphic = wheelFL;
wheels[1].graphic = wheelFR;
wheels[2].graphic = wheelBL;
wheels[3].graphic = wheelBR;
wheels[0].maxSteerAngle=30.0;
wheels[1].maxSteerAngle=30.0;
wheels[2].powered=true;
wheels[3].powered=true;
wheels[2].handbraked=true;
wheels[3].handbraked=true;
for(w in wheels)
{
if(w.graphic==null)
Debug.Log("You need to assign all four wheels for the car script!"); if(!w.graphic.transform.IsChildOf(transform))
Debug.Log("Wheels need to be children of the Object with the car script");
w.originalRotation = w.graphic.localRotation;
//create collider
colliderObject = new GameObject("WheelCollider");
colliderObject.transform.parent = transform;
colliderObject.transform.position = w.graphic.position;
w.coll = colliderObject.AddComponent(WheelCollider);
w.coll.suspensionDistance = suspensionDistance;
w.coll.suspensionSpring.spring = springs;
w.coll.suspensionSpring.damper = dampers;
//no grip, as we simulate handling ourselves
w.coll.forwardFriction.stiffness = 0;
w.coll.sidewaysFriction.stiffness = 0;
w.coll.radius = wheelRadius;
}
//get wheel height (height forces are applied on)
wheelY=wheels[0].graphic.localPosition.y;
//setup center of gravity
rigidbody.centerOfMass.y = cogY;
//find skidmark object
// skidmarks = FindObjectOfType(typeof(Skidmarks));
//shift to first
gear=1;
}
//update wheel status
function UpdateWheels()
{
//calculate handbrake slip for traction gfx
handbrakeSlip=handbrake*rigidbody.velocity.magnitude*0.1;
if(handbrakeSlip>1)
handbrakeSlip=1;
totalSlip=0.0;
onGround=false;
for(w in wheels)
{
//rotate wheel
w.rotation += wheelRPM / 60.0 * -rev * 360.0 * Time.fixedDeltaTime; w.rotation = Mathf.Repeat(w.rotation, 360.0);
w.graphic.localRotation= Quaternion.Euler( w.rotation, w.maxSteerAngle*steer, 0.0 ) * w.originalRotation;
//check if wheel is on ground
if(w.coll.isGrounded)
onGround=true;
slip = cornerSlip+(w.powered?driveSlip:0.0)+(w.handbraked?handbrakeSlip:0.0); totalSlip += slip;
var hit : WheelHit;
var c : WheelCollider;
c = w.coll;
if(c.GetGroundHit(hit))
{
//if the wheel touches the ground, adjust graphical wheel position to reflect springs
w.graphic.localPosition.y-=Vector3.Dot(w.graphic.position-hit.point,transform.up)-w.coll.radius;
//create st on ground if appropiate
if(slip>0.5 && hit.collider.tag=="Dusty")
{
groundDustEffect.position=hit.point;
groundDustEffect.particleEmitter.worldVelocity=rigidbody.velocity*0.5; groundDustEffect.particleEmitter.minEmission=(slip-0.5)*3; groundDustEffect.particleEmitter.maxEmission=(slip-0.5)*3;
groundDustEffect.particleEmitter.Emit(); }
//and skid marks
/*if(slip>0.75 && skidmarks != null)
w.lastSkidMark=skidmarks.AddSkidMark(hit.point,hit.normal,(slip-0.75)*2,w.lastSkidMark);
else
w.lastSkidMark=-1; */
}
// else w.lastSkidMark=-1;
}
totalSlip/=wheels.length;
}
//Automatically shift gears
function AutomaticTransmission()
{
if(gear>0)
{
if(engineRPM>shiftUpRPM&&gear<gearRatios.length-1)
gear++;
if(engineRPM<shiftDownRPM&&gear>1)
gear--;
}
}
//Calculate engine acceleration force for current RPM and trottle
function CalcEngine() : float
{
if(brake+handbrake>0.;motor=0.0;;//ifcarisairborne,justre;if(!onGround);engineRPM+=(motor-0.3)*2;engineRPM=Mathf.Clamp(en;return0.0;;else;AutomaticTransmission();;engineRPM=whee
if(brake+handbrake>0.1)
motor=0.0;
//if car is airborne, just rev engine
if(!onGround)
{
engineRPM += (motor-0.3)*25000.0*Time.deltaTime;
engineRPM = Mathf.Clamp(engineRPM,minRPM,maxRPM);
return 0.0;
}
else
{
AutomaticTransmission();
engineRPM=wheelRPM*gearRatios[gear]*finalDriveRatio;
if(engineRPM<minRPM)
engineRPM=minRPM;
if(engineRPM<maxRPM)
{
//fake a basic torque curve
x = (2*(engineRPM/maxRPM)-1);
torqueCurve = 0.5*(-x*x+2);
torqueToForceRatio = gearRatios[gear]*finalDriveRatio/wheelRadius; return
motor*maxTorque*torqueCurve*torqueToForceRatio;
}
else
//rpm delimiter
return 0.0;
}
}
//Car physics
//The physics of this car are really a trial-and-error based extension of
//basic "Asteriods" physics -- so you will get a pretty arcade-like feel. //This
may or may not be what you want, for a more physical approach research //the
wheel colliders
function HandlePhysics () {
var velo=rigidbody.velocity;
wheelRPM=velo.magnitude*60.0*0.5;
rigidbody.angularVelocity=new
Vector3(rigidbody.angularVelocity.x,0.0,rigidbody.angularVelocity.z);
dir=transform.TransformDirection(Vector3.forward);
flatDir=Vector3.Normalize(new Vector3(dir.x,0,dir.z));
flatVelo=new Vector3(velo.x,0,velo.z);
rev=Mathf.Sign(Vector3.Dot(flatVelo,flatDir));
//when moving backwards or standing and brake is pressed, switch to
reverse
if((rev<0||flatVelo.sqrMagnitude<0.5)&&brake>0.1)
gear=0;
if(gear==0)
{
//when in reverse, flip brake and gas
tmp=brake;
brake=motor;
motor=tmp;
//when moving forward or standing and gas is pressed, switch to drive
if((rev>0||flatVelo.sqrMagnitude<0.5)&&brake>0.1)
gear=1;
}
engineForce=flatDir*CalcEngine();
totalbrake=brake+handbrake*0.5;
if(totalbrake>1.0)totalbrake=1.0;
brakeForce=-flatVelo.normalized*totalbrake*rigidbody.mass*maxBrakeAccel;
flatDir*=flatVelo.magnitude;
flatDir=Quaternion.AngleAxis(steer*30.0,Vector3.up)*flatDir;
flatDir*=rev;
diff=(flatVelo-flatDir).magnitude;
cornerAccel=maxCornerAccel;
if(cornerAccel>diff)cornerAccel=diff;
cornerForce=-(flatVelo-flatDir).normalized*cornerAccel*rigidbody.mass;
cornerSlip=Mathf.Pow(cornerAccel/maxCornerAccel,3);
rigidbody.AddForceAtPosition(brakeForce+engineForce+cornerForce,transform.position+transform.up*wheelY);
handbrakeFactor=1+handbrake*4;
if(rev<0)
handbrakeFactor=1;
veloSteer=((15/(2*velo.magnitude+1))+1)*handbrakeFactor;
steerGrip=(1-handlingTendency*cornerSlip);
if(rev*steer*steerVelo<0)
steerGrip=1;
maxRotSteer=2*Time.fixedDeltaTime*handbrakeFactor*steerGrip;
fVelo=velo.magnitude;
veloFactor=fVelo<1.0?fVelo:Mathf.Pow(velo.magnitude,0.3);
steerVeloInput=rev*steer*veloFactor*0.5*Time.fixedDeltaTime*handbrakeFactor;
if(velo.magnitude<0.1)
steerVeloInput=0;
if(steerVeloInput>steerVelo)
{
steerVelo+=0.02*Time.fixedDeltaTime*veloSteer;
if(steerVeloInput<steerVelo)
steerVelo=steerVeloInput;
}
else
{
steerVelo-=0.02*Time.fixedDeltaTime*veloSteer;
if(steerVeloInput>steerVelo)
steerVelo=steerVeloInput;
}
steerVelo=Mathf.Clamp(steerVelo,-maxRotSteer,maxRotSteer);
transform.Rotate(Vector3.up*steerVelo*57.295788);
}
function FixedUpdate () {
//query input axes if necessarry
if(queryUserInput)
{
brake = Mathf.Clamp01(-Input.GetAxis("Vertical"));
handbrake = Input.GetButton("Jump")?1.0:0.0;
steer = Input.GetAxis("Horizontal");
motor = Mathf.Clamp01(Input.GetAxis("Vertical"));
}
else
{
motor = 0;
steer = 0;
brake = 0;
handbrake = 0;
}
//if car is on ground calculate handling, otherwise just rev the engine
if(onGround)
HandlePhysics();
else
CalcEngine();
//wheel GFX
UpdateWheels();
//engine sounds
audio.pitch=0.5+0.2*motor+0.8*engineRPM/maxRPM;
audio.volume=0.5+0.8*motor+0.2*engineRPM/maxRPM;
}
//Called by DamageReceiver if boat destroyed
function Detonate()
{
//destroy wheels
for( w in wheels )
w.coll.gameObject.active=false; //no more car physics
enabled=false;
}
Ⅲ unity3D中我在camera上绑定了smoothfollow.js脚本,target设定为一辆车,可是为什么camera不跟着车动呢
难道车是prefab,游戏开始的时候才初始化的?你把车直接拖入场景看看,另外附一段第3人称C#脚本,只需把车的tag改成Player,赋到camera就行了
using UnityEngine;
using System.Collections;
public class ThirdPersonCamera : MonoBehaviour
{
public float distanceAway; // distance from the back of the craft
public float distanceUp; // distance above the craft
public float smooth; // how smooth the camera movement is
private GameObject hovercraft; // to store the hovercraft
private Vector3 targetPosition; // the position the camera is trying to be in
Transform follow;
void Start(){
follow = GameObject.FindWithTag ("Player").transform;
}
void LateUpdate ()
{
// setting the target position to be the correct offset from the hovercraft
targetPosition = follow.position + Vector3.up * distanceUp - follow.forward * distanceAway;
// making a smooth transition between it's current position and the position it wants to be in
transform.position = Vector3.Lerp(transform.position, targetPosition, Time.deltaTime * smooth);
// make sure the camera is looking the right way!
transform.LookAt(follow);
}
}
Ⅳ unity公交游戏 停车上下客
我玩过这个游戏,挺不错的,可是为何每次上下车都是那三个人?一个女的,两个男的,有点吓人。还有一辆红色跑车每次都故意撞我开的公交车,还有一辆警车每次都挡住我的路。在城市中开公交车拉客赚钱买新车,一共20关,前10关没有时间限制,后十关有。这个游戏挺难的,我开车总是撞墙,无语了。
Ⅳ 用unity3d做了一个卡丁车,用关节连接了各个零部件,可是为什么无法落到地面上,急求。(重力已经加了)
你应该加碰撞了吧,不知道你用的什么collider,我猜测估计是胶囊状或者球状,你的碰撞体内调节的过大导容致无法落到地面。卡丁车之所以不能穿墙或者穿透地面都是因为有这个碰撞体,看看你卡丁车上的碰撞体,调节一下大小,到合适,应该就可以了
Ⅵ unity为什么汽车被箱子撞飞了
撞击后 物体重心发生偏离
撞击力没有达到于物体质量的一定比值的情况下
撞击后没有持续且大到一定的冲力
物体是堆装本身就有减小冲力的能力
所以没有被撞飞
Ⅶ 我是个unity3d的新手,不想走弯路,请问unity3d能实现虚拟虚拟装配练习和培训的功...
U3D做虚拟现实快两年了。我只能说你这个功能,U3D要想实现,实在是弱爆了。版
你应该是做工艺权流程仿真,主要是演示?还是培训新手拆装教程?
如果是演示,确实简单,你用3DMAX把动画K好,导出时.FBX格式,把动画勾上,导入u3d就可以播放。如果你U3D一窍不通,去网络搜索一下U3D动画使用教程,其实就是了解几个参数使用即可。
如果要加入互动,还需要你去简单学习一下U3D内置的编程接口。假如点击一个按钮,机械做一个动作,你只需要学习GUI接口和animation接口,就能实现你的功能
Ⅷ 请教unity中如何实现汽车在公路上行驶
自己建个地形,然后网上下载easyroad插件(好像叫这个),就是直接铺设公专路的,然后去store下载个车的模属型(有单独的mesh的,即模型不是一个整体,轮子和车身是分开的。)
最后交互,就是加车轮转的动画,让车播放运行,可以添加控制播放快慢的脚本,改变车速,
可以前行,后退,左右移动等等。
Ⅸ unity 新手,请问大神告诉我如何制作一个汽车模型.
制作模型通常是使用建模工具完成的 例如3DMAX等的 这些是美术的事情。也可以网上搜索一些已经建好的模型直接免费下载使用。
Ⅹ unity制作赛车游戏,车子加了刚体和碰撞体为什么车子死活不动
其实也许你们是动画学院的一些学生,然后你设计的这个东西可能违反了物理规则,所以才会不能动。