RigidBodies и Velocities / Physics
Единственный раз, когда я лично использовал систему hardbodys, был при реализации моих собственных boids (поведение флокирования), как вам нужно вычислить несколько отдельных векторов и применить их все к единице.
Rigidbody.MovePosition(m_Rigidbody.position + movement);
Это вычисляет вектор движения к цели, используя физическую систему, поэтому скорость и движение объекта все еще могут зависеть от сопротивления, углового сопротивления и так далее.
Эта конкретная функция является оберткой вокруг Rigidbody.AddForce
Я считаю.
Плюсы:
Минусы:
Немного неудобно использовать, если все, что вы пытаетесь достичь, это перемещение объекта из точки А в точку Б.
Примечания: Твердые тела при столкновении с другим твердым телом будут отскакивать друг от друга в зависимости от настроек физики.
Они также подвержены влиянию гравитации. По сути, они пытаются имитировать объекты реальной жизни, но иногда бывает трудно приручить объекты и заставить их делать именно то, что вы хотите.
И Rigidbody.AddForce
в основном то же, что и выше, за исключением того, что вы сами вычисляете вектор.
Так, например, чтобы получить вектор к цели, вы бы сделали
Vector3 target = target.position - myPosition;
Rigidbody.AddForce(target * 15 * Time.deltaTime, 0, 0, ForceMode.VelocityChange);
Если вы не планируете использовать какую-либо основную физическую механику в своей игре, я бы предложил двигаться, интерполируя положение объектов. . [+1122]
Поскольку гораздо проще заставить вещи вести себя так, как вы хотите, если, конечно, вы не стремитесь к физическому реализму!
Интерполяция позиции юнитов
Плюсы :
Минусы:
Вы будете использовать эту технику, скажем, в игре Pokemon, вы не останавливаетесь в Pokemon и не ждете, пока пепел прекратит скользить или ударит стену и неудержимо подпрыгнет назад.
Эта конкретная функция устанавливает положение объектов, например, телепортацию, но вы также можете использовать это для плавного перемещения персонажа в позицию. Я предлагаю поискать «подростки» для плавной интерполяции между переменными.
//change the characters x by + 1 every tick,
Transform.transform.position.x += 1f;
Вы не можете. Вместо этого используйте Активатор. CreateInstance как показано в примере ниже (отмечают, что Клиентское пространство имен находится в одном DLL и Хосте в другом. Оба, как должны находить, в том же каталоге для кода работают.)
Однако, если Вы хотите создать действительно сменный интерфейс, я предлагаю, чтобы Вы использовали Инициализировать метод, которые берут данные параметры в Вашем интерфейсе, вместо того, чтобы полагаться на конструкторов. Тем путем можно просто потребовать, чтобы сменный класс реализовал интерфейс, вместо того, чтобы "надеяться", что он принимает принятые параметры в конструкторе.
using System;
using Host;
namespace Client
{
public class MyClass : IMyInterface
{
public int _id;
public string _name;
public MyClass(int id,
string name)
{
_id = id;
_name = name;
}
public string GetOutput()
{
return String.Format("{0} - {1}", _id, _name);
}
}
}
namespace Host
{
public interface IMyInterface
{
string GetOutput();
}
}
using System;
using System.Reflection;
namespace Host
{
internal class Program
{
private static void Main()
{
//These two would be read in some configuration
const string dllName = "Client.dll";
const string className = "Client.MyClass";
try
{
Assembly pluginAssembly = Assembly.LoadFrom(dllName);
Type classType = pluginAssembly.GetType(className);
var plugin = (IMyInterface) Activator.CreateInstance(classType,
42, "Adams");
if (plugin == null)
throw new ApplicationException("Plugin not correctly configured");
Console.WriteLine(plugin.GetOutput());
}
catch (Exception e)
{
Console.Error.WriteLine(e.ToString());
}
}
}
}
звонить
public object CreateInstance(string typeName, bool ignoreCase, BindingFlags bindingAttr, Binder binder, object[] args, CultureInfo culture, object[] activationAttributes)
вместо этого. Документы MSDN
Править: Если Вы собираетесь провалить это, дайте понимание, почему этот подход является неправильным/или не лучший способ.
Активатор. CreateInstance берет Тип и независимо от того, что Вы хотите передать конструктору Типов.
http://msdn.microsoft.com/en-us/library/system.activator.createinstance.aspx
Вы также не можете использовать Activator.CreateInstance, который мог бы работать лучше. См. Ниже вопрос о StackOverflow.
Как передать аргументы ctor в Activator.CreateInstance или использовать IL?