- Home /
Working with 3D Models
Hello everyone !
Today when I tried to work with my 3D character model, I can't get her to do any actions (walk, run etc). My model is a .3ds file and I downloaded it from the internet. I'm sorry that I'm this stupid, but what should I do in Unity3D to animate my character model ?
you have to first rig your character in a 3d modeling software like 3ds max, maya or blender. After rigging, you need to animate your character for activities you want your character to perform. then only you can bring into unity to script for it.
Answer by Jessy · Apr 19, 2011 at 03:14 PM
.3ds does not support animation. You will need a different format.
Answer by bubblegumsoldier · Apr 19, 2011 at 05:40 PM
well I know what you mean that's not the point.
You don't have to change this... just add a Character controller to this and drag the main camera as a child object to the character and position it where you want. And don't forget to add a lookround script on the camera:
using UnityEngine; using System.Collections;
/// MouseLook rotates the transform based on the mouse delta. /// Minimum and Maximum values can be used to constrain the possible rotation
/// To make an FPS style character: /// - Create a capsule. /// - Add a rigid body to the capsule /// - Add the MouseLook script to the capsule. /// -> Set the mouse look to use LookX. (You want to only turn character but not tilt it) /// - Add FPSWalker script to the capsule
/// - Create a camera. Make the camera a child of the capsule. Reset it's transform. /// - Add a MouseLook script to the camera. /// -> Set the mouse look to use LookY. (You want the camera to tilt up and down like a head. The character already turns.) [AddComponentMenu("Camera-Control/Mouse Look")] public class MouseLook : MonoBehaviour {
public enum RotationAxes { MouseXAndY = 0, MouseX = 1, MouseY = 2 } public RotationAxes axes = RotationAxes.MouseXAndY; public float sensitivityX = 15F; public float sensitivityY = 15F;
public float minimumX = -360F; public float maximumX = 360F;
public float minimumY = -60F; public float maximumY = 60F;
float rotationX = 0F; float rotationY = 0F;
Quaternion originalRotation;
void Update () { if(Input.mousePosition.x < 0 || Input.mousePosition.y < 0 || Input.mousePosition.x > Screen.width || Input.mousePosition.y > Screen.height) { return; }
if (axes == RotationAxes.MouseXAndY)
{
// Read the mouse input axis
rotationX += Input.GetAxis("Mouse X") * sensitivityX;
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
rotationX = ClampAngle (rotationX, minimumX, maximumX);
rotationY = ClampAngle (rotationY, minimumY, maximumY);
Quaternion xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);
Quaternion yQuaternion = Quaternion.AngleAxis (rotationY, -Vector3.right);
transform.localRotation = originalRotation * xQuaternion * yQuaternion;
}
else if (axes == RotationAxes.MouseX)
{
rotationX += Input.GetAxis("Mouse X") * sensitivityX;
rotationX = ClampAngle (rotationX, minimumX, maximumX);
Quaternion xQuaternion = Quaternion.AngleAxis (rotationX, Vector3.up);
transform.localRotation = originalRotation * xQuaternion;
}
else
{
rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
rotationY = ClampAngle (rotationY, minimumY, maximumY);
Quaternion yQuaternion = Quaternion.AngleAxis (-rotationY, Vector3.right);
transform.localRotation = originalRotation * yQuaternion;
}
}
void Start () { // Make the rigid body not change rotation if (rigidbody) rigidbody.freezeRotation = true; originalRotation = transform.localRotation; }
public static float ClampAngle (float angle, float min, float max) { if (angle < -360F) angle += 360F; if (angle > 360F) angle -= 360F; return Mathf.Clamp (angle, min, max); }
}
then just do on you character the following script:
var speed = 6.0; var jumpSpeed = 8.0; var gravity = 20.0;
private var moveDirection = Vector3.zero; private var grounded : boolean = false;
function FixedUpdate() { if (grounded) { // We are grounded, so recalculate movedirection directly from axes moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); if (moveDirection==Vector3.zero) { SendMessage("PlayAnimation", "idle"); } else { SendMessage("PlayAnimation", "walk"); }
moveDirection = transform.TransformDirection(moveDirection); moveDirection *= speed;
if (Input.GetButton ("Jump")) {
SendMessage("PlayAnimation", "jump");
moveDirection.y = jumpSpeed;
}
}
// Apply gravity moveDirection.y -= gravity * Time.deltaTime;
// Move the controller var controller : CharacterController = GetComponent(CharacterController); var flags = controller.Move(moveDirection * Time.deltaTime); grounded = (flags & CollisionFlags.CollidedBelow) != 0;
} function Update(){ if(Input.GetButtonDown("run")) { speed = 12;
} if(Input.GetButtonUp("run")) { speed = 6;
}
} @script RequireComponent(CharacterController)
Then start the game...
Well you will see that u can walk but there's no animation but this doesn't matter.
You can add it later...
BYE
Henry
Your answer
Follow this Question
Related Questions
MMD How to export model and animations to Unity as 3rd person controller? 2 Answers
How do I fix my character facing the wrong direction without messing up moving it? 1 Answer
animating problems 0 Answers
How do I allow character model body parts to be controlled? 0 Answers
Animation can't find my animations 1 Answer