- Home /
How do I make my imported 3d model face the player?
I made a little 3d character in blender and imported him into unity, I added a AI script, but the character supposed to "face" the player, but instead the top of his head faces the player. No matter how many different ways I rotate the character both in blender and unity, I stil get the same result. pic and code included if need be.
var Distance;
var Target : Transform;
var lookAtDistance = 25.0;
var chaseRange = 15.0;
var attackRange = 1.5;
var moveSpeed = 5.0;
var Damping = 6.0;
var attackRepeatTime = 1;
private var attackTime : float;
var controller : CharacterController;
var gravity : float = 20.0;
private var MoveDirection : Vector3 = Vector3.zero;
function Start()
{
attackTime = Time.time;
}
function Update()
{
Distance = Vector3.Distance(Target.position, transform.position);
if(Distance < lookAtDistance)
{
lookAt();
}
if(Distance > lookAtDistance)
{
//renderer.material.color = Color.green;
}
if(Distance < attackRange)
{
attack();
}
else if(Distance < chaseRange)
{
chase();
}
}
function lookAt()
{
//renderer.material.color = Color.yellow;
var rotation = Quaternion.LookRotation(Target.position - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * Damping);
}
function chase()
{
//renderer.material.color = Color.red;
moveDirection = transform.forward;
moveDirection *= moveSpeed;
moveDirection.y -= gravity * Time.deltaTime;
controller.Move(moveDirection * Time.deltaTime);
}
function attack()
{
if(Time.time > attackTime)
{
Debug.Log("Inset Attack and health loss here");
var GUIManager : GUIManager = GameObject.Find("First Person Controller").GetComponent("GUIManager");
GUIManager.AdjustCurrentHealth(-10);
attackTime = Time.time + attackRepeatTime;
}
}
//agressive enemy
function ApplyDamage()
{
chaseRange += 30;
moveSpeed += 2;
lookAtDistance += 40;
}
Answer by jmgek · Dec 23, 2014 at 09:39 PM
(-z) is forward in unity. I would change it in maya because you don't want to rely on code to change the transforms of objects, you can really mess others up and yourself in the future. A little advice for you, try passing out arguments so you can start making more robust code.
function lookAt(Transform anyPositionToLookAt)
{
//renderer.material.color = Color.yellow;
var rotation = Quaternion.LookRotation(anyPositionToLookAt.position - transform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, rotation, Time.deltaTime * Damping);
}
It's facing the right way, but it is always looking slightly off center, my player is a capsule and it seems to be facing the bottom left of the capsule in the scene view...
Z is forward in Unity and to actually apply it in Blender (even if you have it as export setting) you have to use "Apply transform" from Blender. Anyway, you have that figured out I can see.
So I would check next thing - transform and your camera. Even tho your transform of player is a capsule, camera may be off for some reason and char is actually looking at it properly but you don't see that (because char doesn't care about camera but rather transform) Try to use transform of hands maybe?.
Try with other object as well, to make sure that problem is not with model itself.