///////////////////////////////////////// ///////////////////////////////////////// void EquipWeapon(CarWeapon _weapon) { currentWeapon = _weapon; //////////////////////////////gun init///////////////////////////////////////// GameObject _weaponIns = (GameObject)Instantiate(_weapon.gungraphics, weaponHolder.position, weaponHolder.rotation); _weaponIns.transform.SetParent(weaponHolder); //////////////////////////////////////////////////////////////////////////////// currentGraphics = _weaponIns.GetComponent <CarWeaponGraphics>(); if (currentGraphics == null) { Debug.LogError("No Weapon Graphics Component on weapon_object:" + _weaponIns.name); } if (isLocalPlayer) { //_weaponIns.layer = LayerMask.NameToLayer(weaponLayerName); CarUtil.SetLayerRecursively(_weaponIns, LayerMask.NameToLayer(weaponLayerName)); } ////////////////////////// turret init ////////////////////////////////////// GameObject _turretIns = (GameObject)Instantiate(_weapon.turretgraphics, turretHolder.position, turretHolder.rotation); _turretIns.transform.SetParent(turretHolder); turretGraphics = _turretIns.GetComponentInChildren <Animator>(); ///////////////////////////////////////////////////////////////////////////// }
private void Test() { car = CarUtil.CreateCar(CarType.Benz); if (car != null) { car.PrintName(); } car = CarUtil.CreateCar(CarType.Bmw); if (car != null) { car.PrintName(); } car = CarUtil.CreateCar(CarType.Honda); if (car != null) { car.PrintName(); } }
public void OnPostPhysicsStep(float dt) { if (!this.IsValid()) { return; } if (!spawned) { return; } if (!IsServer) { return; } var body = PhysicsBody; body.LinearDrag = 0.0f; body.AngularDrag = 0.0f; body.LinearDamping = 0; body.AngularDamping = 0; body.GravityScale = (_driveWheelsOnGround || _turnWheelsOnGround) ? 0 : 1; var rotation = body.Rot; _accelerateDirection = currentInput.throttle.Clamp(-1, 1); _turnDirection = _turnDirection.LerpTo(currentInput.turning.Clamp(-1, 1), 1.0f - MathF.Pow(0.0075f, Time.Delta)); float targetTilt = 0; float targetLean = 0; var speed = rotation.Inverse * body.Velocity; if (_driveWheelsOnGround || _turnWheelsOnGround) { var forwardSpeed = MathF.Abs(speed.x); var speedFraction = MathF.Min(forwardSpeed / 500.0f, 1); targetTilt = (_accelerateDirection).Clamp(-1.0f, 1.0f); targetLean = speedFraction * _turnDirection; } _accelerationTilt = _accelerationTilt.LerpTo(targetTilt, 1.0f - MathF.Pow(0.01f, dt)); _turnLean = _turnLean.LerpTo(targetLean, 1.0f - MathF.Pow(0.01f, dt)); if (_driveWheelsOnGround) { var forwardSpeed = MathF.Abs(speed.x); var speedMultiplier = 1.0f - (forwardSpeed / 5000.0f).Clamp(0.0f, 1.0f); var acceleration = speedMultiplier * (_accelerateDirection < 0.0f ? 200.0f : 500.0f) * body.Mass * (_driveWheelsOnGround ? _accelerateDirection : 1.0f) * dt; var impulseLocation = body.Pos + rotation * new Vector3(MathF.Sign(acceleration) * 100.0f, 0, 0); var impulse = rotation * new Vector3(acceleration, 0, 0); body.ApplyImpulseAt(impulseLocation + rotation.Up * 25, impulse); } speed = rotation.Inverse * body.Velocity; MovementSpeed = speed.x; RaycastWheels(rotation, true, out var frontWheels, out var backWheels, dt); var onGround = frontWheels || backWheels; _turnWheelsOnGround = frontWheels; _driveWheelsOnGround = backWheels; if (onGround) { _wheelSpeed = speed.x; var grip = 1.0f - CarUtil.Curve(1.0f - Vector3.Dot(rotation.Up, Vector3.Up), 1000.0f); body.Velocity += (Vector3.Down * 900.0f) * dt; { var dampening = new Vector3(0.2f, grip, 0.0f); var dampened = (rotation.Inverse * body.Velocity) * CarUtil.Pow(1.0f - dampening, dt); body.Velocity = (rotation * dampened); } { // angular dampen var unrotatedAngular = rotation.Inverse * body.AngularVelocity; var angularDampening = new Vector3(0, 0, 0.999f); var dampenedAngular = unrotatedAngular * CarUtil.Pow(1.0f - angularDampening, dt); body.AngularVelocity = rotation * dampenedAngular; } var localVelocity = rotation.Inverse * body.Velocity; var turnAmount = _turnWheelsOnGround ? (MathF.Sign(localVelocity.x) * 100.0f * CalculateTurnFactor(MathF.Abs(localVelocity.x)) * dt) : 0.0f; // turning if (MathF.Abs(turnAmount) > 0.0f) { body.AngularVelocity += rotation * new Vector3(0, 0, turnAmount); } { var dampening = new Vector3(0.2f, grip, 0.0f); var dampened = (rotation.Inverse * body.Velocity) * CarUtil.Pow(1.0f - dampening, dt); body.Velocity = (rotation * dampened); } { // angular dampen var unrotatedAngular = rotation.Inverse * body.AngularVelocity; var angularDampening = new Vector3(0, 0, 0.999f); var dampenedAngular = unrotatedAngular * CarUtil.Pow(1.0f - angularDampening, dt); body.AngularVelocity = rotation * dampenedAngular; } } }