ФИО: Медведский Андрей Викторович
Год рождения: 1992
Образование: Высшее
Место проживания: Украина, г.Луганск
e-mail: A.V.Medvedskiy@hotmail.com
Технологии
Программирование: С#, PHP, Delphi, JS, C/С++
СУБД: MySQL, MSSQL
Верстка: HTML,CSS, XML
3D пакеты: 3ds Max, Mudbox
Ищу удаленную работу в качестве C# разработчика. С Unity знаком более года, в качестве хобби и простого интереса
Опыт работы минимальный.
Несколько небольших наработок:
Скрытый текст:
Простой боулинг:
http://avmedv.besaba.com/Bowling.html
Космический сеттинг, с пулом объектов
http://avmedv.besaba.com/Space.html
http://avmedv.besaba.com/Bowling.html
Космический сеттинг, с пулом объектов
http://avmedv.besaba.com/Space.html
Примеры кода:
Скрытый текст:
Класс шара, для боулинга
Синтаксис:
Синтаксис: [ Показать ]
Используется csharp
using UnityEngine;
using System.Collections;
public class Ball : MonoBehaviour {
public int key = 0;
public bool canControl = true;
public GameObject posPointer;
public GameObject rotPointer;
//раздел private переменных
private Vector3 _startPosition;
private Quaternion _startRotation;
private Transform _transform;
private Rigidbody _rigidbody;
private int _side = 0;
private float _size = 0.50f;
private Vector3 _position = Vector3.zero;
private Vector3 _rotation = Vector3.zero;
private bool _anchor = false;
private bool _anchorForce = false;
private float _force = 50;
// Use this for initialization
void Start () {
//кешируем transform and rigidbody
_transform = transform;
_rigidbody = rigidbody;
_rigidbody.isKinematic = true;
_position = _transform.position;
_rotation = _transform.eulerAngles;
//запоминаем начальные положения
_startPosition = _transform.position;
_startRotation = _transform.rotation;
Active(posPointer,true);
Active(rotPointer,false);
//rigidbody.AddForce(Vector3.back * 50,ForceMode.Impulse);
}
//возвращение шара в начальную позицию
public void StartPosition()
{
_rigidbody.velocity = Vector3.zero;
_transform.position = _startPosition;
_transform.rotation = _startRotation;
canControl = true;
_rigidbody.isKinematic = true;
}
void AddForce(float force)
{
_rigidbody.isKinematic = false;
_rigidbody.AddRelativeForce(Vector3.forward * force*10,ForceMode.Acceleration);
}
void Check()
{
if ( _position.x > _size)
_position.x = -_size+1;
if ( _position.x < -_size)
_position.x = _size-1;
}
//максимально возможные углы и сила
private const int MAX_ANGLE = 220;
private const int MIN_ANGLE = 140;
private const int MAX_FORCE = 60;
private const int MIN_FORCE = 20;
private const float MAX_OFFSET = 0.8f;
void Control()
{
switch (key)
{
case 0:
Active(posPointer,true);
//выбор направления передвижения шара
if (Input.GetAxis("Mouse X") > 0.1f || Input.GetAxis("Horizontal") > 0.1f)
_side = -1;
else
if (Input.GetAxis("Mouse X") < -0.1f || Input.GetAxis("Horizontal") < -0.1f)
_side = 1;
else
_side = 0;
//на дорожке ли мы, если да то передвигаемся
if ( _position.x <= _size && _position.x >= -_size )
_position.x +=_side * 0.005f;
Check(); // колибровка шара на выход за границы
//присваиваем новою позицию шару
_transform.position = _position;
Transform tr = Camera.mainCamera.transform;
tr.position = new Vector3(_position.x,tr.position.y,tr.position.z);
break;
case 1:
Active(posPointer,false);
Active(rotPointer,true);
// увеличение/уменьшение поворота броска
if (_anchor)
//_rotation.y = Mathf.LerpAngle(_rotation.y,MAX_ANGLE,Time.deltaTime);
_rotation.y += MAX_OFFSET;
else
//_rotation.y = Mathf.LerpAngle(_rotation.y,MIN_ANGLE,Time.deltaTime);
_rotation.y -= MAX_OFFSET;
if (_rotation.y > MAX_ANGLE - 10 || _rotation.y < MIN_ANGLE + 10)
_anchor = !_anchor;
//присваиваем новый поворот
_transform.eulerAngles = _rotation;
break;
case 2:
Active(rotPointer,false);
// увеличение/уменьшение силы броска
if (_anchorForce)
{
//_force = Mathf.LerpAngle(_force,MAX_FORCE,Time.deltaTime/2.0f);
_force += MAX_OFFSET;
}
else
{
//_force = Mathf.LerpAngle(_force,MIN_FORCE,Time.deltaTime/2.0f);
_force -= MAX_OFFSET;
}
if (_force > MAX_FORCE || _force < MIN_FORCE )
_anchorForce = !_anchorForce;
break;
default:
key = 0;
//кидаем шар
AddForce(_force);
//запрещаем управление
canControl = false;
break;
}
}
void Active(GameObject gObject,bool status)
{
if (gObject.active != status)
{
gObject.active = status;
//включаем выключаем стрелки
foreach ( Transform child in gObject.transform)
{
child.gameObject.active = status;
}
}
}
void Update () {
if (canControl)
{
Control();
//изменяем состояние управления
if (Input.GetKeyDown(KeyCode.Space))
{
key++;
}
}
}
void OnGUI()
{
//выводим на экран ползунок силы
if (key == 2)
GUI.Box(new Rect(Screen.width/2 + 140,Screen.height - 20,20,-2*_force),"Force");
}
}
using System.Collections;
public class Ball : MonoBehaviour {
public int key = 0;
public bool canControl = true;
public GameObject posPointer;
public GameObject rotPointer;
//раздел private переменных
private Vector3 _startPosition;
private Quaternion _startRotation;
private Transform _transform;
private Rigidbody _rigidbody;
private int _side = 0;
private float _size = 0.50f;
private Vector3 _position = Vector3.zero;
private Vector3 _rotation = Vector3.zero;
private bool _anchor = false;
private bool _anchorForce = false;
private float _force = 50;
// Use this for initialization
void Start () {
//кешируем transform and rigidbody
_transform = transform;
_rigidbody = rigidbody;
_rigidbody.isKinematic = true;
_position = _transform.position;
_rotation = _transform.eulerAngles;
//запоминаем начальные положения
_startPosition = _transform.position;
_startRotation = _transform.rotation;
Active(posPointer,true);
Active(rotPointer,false);
//rigidbody.AddForce(Vector3.back * 50,ForceMode.Impulse);
}
//возвращение шара в начальную позицию
public void StartPosition()
{
_rigidbody.velocity = Vector3.zero;
_transform.position = _startPosition;
_transform.rotation = _startRotation;
canControl = true;
_rigidbody.isKinematic = true;
}
void AddForce(float force)
{
_rigidbody.isKinematic = false;
_rigidbody.AddRelativeForce(Vector3.forward * force*10,ForceMode.Acceleration);
}
void Check()
{
if ( _position.x > _size)
_position.x = -_size+1;
if ( _position.x < -_size)
_position.x = _size-1;
}
//максимально возможные углы и сила
private const int MAX_ANGLE = 220;
private const int MIN_ANGLE = 140;
private const int MAX_FORCE = 60;
private const int MIN_FORCE = 20;
private const float MAX_OFFSET = 0.8f;
void Control()
{
switch (key)
{
case 0:
Active(posPointer,true);
//выбор направления передвижения шара
if (Input.GetAxis("Mouse X") > 0.1f || Input.GetAxis("Horizontal") > 0.1f)
_side = -1;
else
if (Input.GetAxis("Mouse X") < -0.1f || Input.GetAxis("Horizontal") < -0.1f)
_side = 1;
else
_side = 0;
//на дорожке ли мы, если да то передвигаемся
if ( _position.x <= _size && _position.x >= -_size )
_position.x +=_side * 0.005f;
Check(); // колибровка шара на выход за границы
//присваиваем новою позицию шару
_transform.position = _position;
Transform tr = Camera.mainCamera.transform;
tr.position = new Vector3(_position.x,tr.position.y,tr.position.z);
break;
case 1:
Active(posPointer,false);
Active(rotPointer,true);
// увеличение/уменьшение поворота броска
if (_anchor)
//_rotation.y = Mathf.LerpAngle(_rotation.y,MAX_ANGLE,Time.deltaTime);
_rotation.y += MAX_OFFSET;
else
//_rotation.y = Mathf.LerpAngle(_rotation.y,MIN_ANGLE,Time.deltaTime);
_rotation.y -= MAX_OFFSET;
if (_rotation.y > MAX_ANGLE - 10 || _rotation.y < MIN_ANGLE + 10)
_anchor = !_anchor;
//присваиваем новый поворот
_transform.eulerAngles = _rotation;
break;
case 2:
Active(rotPointer,false);
// увеличение/уменьшение силы броска
if (_anchorForce)
{
//_force = Mathf.LerpAngle(_force,MAX_FORCE,Time.deltaTime/2.0f);
_force += MAX_OFFSET;
}
else
{
//_force = Mathf.LerpAngle(_force,MIN_FORCE,Time.deltaTime/2.0f);
_force -= MAX_OFFSET;
}
if (_force > MAX_FORCE || _force < MIN_FORCE )
_anchorForce = !_anchorForce;
break;
default:
key = 0;
//кидаем шар
AddForce(_force);
//запрещаем управление
canControl = false;
break;
}
}
void Active(GameObject gObject,bool status)
{
if (gObject.active != status)
{
gObject.active = status;
//включаем выключаем стрелки
foreach ( Transform child in gObject.transform)
{
child.gameObject.active = status;
}
}
}
void Update () {
if (canControl)
{
Control();
//изменяем состояние управления
if (Input.GetKeyDown(KeyCode.Space))
{
key++;
}
}
}
void OnGUI()
{
//выводим на экран ползунок силы
if (key == 2)
GUI.Box(new Rect(Screen.width/2 + 140,Screen.height - 20,20,-2*_force),"Force");
}
}
Скрытый текст:
Базовый класс пули
Синтаксис:
Синтаксис: [ Показать ]
Используется csharp
using UnityEngine;
using System.Collections;
public abstract class BaseBullet : MonoBehaviour {
/* Private переменные */
private Transform _transform;
private Renderer _renderer;
private Vector3 _offset = Vector3.zero;
private int _layer = 0;
private BaseDamage _damage;
/*Вспомогательные переменные*/
private RaycastHit _hit;
private int _layerMask;
/* Публичные переменные */
public float speed = 100.0f;
//public GameObject explosion;
public GunType type = GunType.Base;
public BaseBullet()
{
_layerMask = ~(1<<_layer);
}
public void Start()
{
_transform = GetComponent<Transform>();
_renderer = GetComponentInChildren<Renderer>();
}
public BaseDamage Damage
{
set{_damage = value;}
}
public Transform Transfom
{
get{return _transform;}
}
public void Translate()
{
_offset.z = speed*Time.deltaTime;
Transfom.Translate(_offset,Space.Self);
}
public void Move()
{
Translate();
if (!_renderer.isVisible)
{
Destroy();
}
if (Physics.Raycast(Transfom.position, Transfom.TransformDirection(Vector3.forward),out _hit,1.0f,_layerMask))
{
RaycastObject(_hit);
}
}
public virtual void RaycastObject(RaycastHit hit)
{
if (hit.transform.parent != null)
{
//Destroy( hit.transform.parent.gameObject);
//hit.transform.parent.gameObject.GetComponentInChildren<BaseUnit>().Dead();
}
else
{
CollisionWithObject(hit);
}
}
public virtual void CollisionWithObject(RaycastHit hit)
{
hit.transform.gameObject.GetComponentInChildren<BaseUnit>().DoDamage(_damage);
Destroy();
}
public virtual void Destroy()
{
BulletPools.Add(gameObject,type);
gameObject.SetActive(false);
}
}
using System.Collections;
public abstract class BaseBullet : MonoBehaviour {
/* Private переменные */
private Transform _transform;
private Renderer _renderer;
private Vector3 _offset = Vector3.zero;
private int _layer = 0;
private BaseDamage _damage;
/*Вспомогательные переменные*/
private RaycastHit _hit;
private int _layerMask;
/* Публичные переменные */
public float speed = 100.0f;
//public GameObject explosion;
public GunType type = GunType.Base;
public BaseBullet()
{
_layerMask = ~(1<<_layer);
}
public void Start()
{
_transform = GetComponent<Transform>();
_renderer = GetComponentInChildren<Renderer>();
}
public BaseDamage Damage
{
set{_damage = value;}
}
public Transform Transfom
{
get{return _transform;}
}
public void Translate()
{
_offset.z = speed*Time.deltaTime;
Transfom.Translate(_offset,Space.Self);
}
public void Move()
{
Translate();
if (!_renderer.isVisible)
{
Destroy();
}
if (Physics.Raycast(Transfom.position, Transfom.TransformDirection(Vector3.forward),out _hit,1.0f,_layerMask))
{
RaycastObject(_hit);
}
}
public virtual void RaycastObject(RaycastHit hit)
{
if (hit.transform.parent != null)
{
//Destroy( hit.transform.parent.gameObject);
//hit.transform.parent.gameObject.GetComponentInChildren<BaseUnit>().Dead();
}
else
{
CollisionWithObject(hit);
}
}
public virtual void CollisionWithObject(RaycastHit hit)
{
hit.transform.gameObject.GetComponentInChildren<BaseUnit>().DoDamage(_damage);
Destroy();
}
public virtual void Destroy()
{
BulletPools.Add(gameObject,type);
gameObject.SetActive(false);
}
}
По всем вопросам можно обращаться на почту или в ЛС.