sorry for how long this is, i don’t really know where I would alter this for the desired effect. the code was provided by some programming students in a concurrent program with mine. we are getting minimal code support for it
private var yourCharacterController : CharacterController;
private var dir : Vector3;
private var hit : RaycastHit ;
private var rot = 0;
private var k : Vector3;
var gravity = 1.0;
static var grounded : boolean = false;
//Public Variables: Adjust in front end
var RunSpeed = 10; //Character’s running speed
var WalkSpeed = 5; //Character’s walking speed
var jumpSpeed = 2; //speed of jump
var characterDefense: float = 0; //character’s defense stat
var marker : GameObject; //what is used to show walk destination
var targetDist: int = 1; //how close to target character needs to be to stop walking
//For multiple Idle States
public var bonusIdles : int = 0; //the number of additional idle animations / sounds set in front end.
static var idleArray = new Array(); //will hold additional idle animations
static var idleSounds = new Array(); //will hold additional idle sounds
private var idlePlay:String = “idle”;
private var idleTime : int = 0; //amount of time we have been stopped
//
//Private Variables
private var going : boolean = false; //whether the player is moving or not
private var running: boolean = false; //if running is false, they player will be walking
private var speed: int; //actual speed player will move
private var moveAni : String = “walk”; //the move animation to be used (walk or run)
private var xDist: float; //distance from target destination
private var zDist: float; //distance from target destination
static var goTo : Vector3; //current target destination
//Static Variables
static var interacting: boolean = false; //if character is interacting with object/enemy or free to move
static var mouseOverGUI: boolean = false; //if mouse is over a GUI button
static var clickTimer: int = 0;
static var spaceTimer : int = 0;
static var jumping : boolean = false;
static var defense: float;
function Awake () {//Don’t destroy the player between scenes
DontDestroyOnLoad (transform.gameObject);
}
function Start() {
yourCharacterController = GetComponent(CharacterController);
yourCharacterController.isTrigger = true;
speed = WalkSpeed; //start out with walk speed
defense = characterDefense; //start out with normal defense
animation.wrapMode = WrapMode.Loop;
//for our default setting, we’ll set all our animations to loop
animation["run"].layer= -1;
animation["walk"].layer= -1;
animation["idle"].layer= -1;
/*-----UNCOMMENT IF ADDED --*/
//animation["idle1"].layer= -1;
//animation["idle2"].layer= -1;
//animation["idle3"].layer= -1;
//animation["idle4"].layer= -1;
//animation["idle5"].layer= -1;
animation.SyncLayer(-1);
//puts these animations all on the same layer
animation["jump"].layer= 10;
animation["jump"].wrapMode = WrapMode.Once;
//makes it so our jump animation doesn't loop while we're in the air
animation["dead"].layer= 10;
animation["dead"].wrapMode = WrapMode.Once;
/* -----UNCOMMENT THESE ONCE ANIMATIONS ARE ADDED
//Name of your melee attack animation in quotes
animation["melee"].layer= 10;
animation["melee"].wrapMode = WrapMode.Once;
//Name of your ranged attack animation here
animation["ranged"].layer= 10;
animation["ranged"].wrapMode = WrapMode.Once;
//Name of your defensive animation here
animation["defend"].layer= 10;
animation["defend"].wrapMode = WrapMode.Once;
//Name of your interaction animation here
animation["interact"].layer= 10;
animation["interact"].wrapMode = WrapMode.Once;
----------------------------------------------- */
animation.SyncLayer(10);
animation.Stop();
animation.Play("idle"); //starts off playing our idle animation by default
//Generate arrays for additional idle animations and sounds
for(i=0;i100){ //if we've been idle for a while
idleAnim(); //play new idle animation
}
}
//IS CHARACTER RUNNING OR WALKING?
if (running){
speed = RunSpeed;
moveAni = "run";
}else{
speed = WalkSpeed;
moveAni = "walk";
}
//IF SHIFT KEY IS PRESSED
if(Input.GetKeyDown(KeyCode.LeftShift) || Input.GetKeyDown(KeyCode.RightShift)){//when shift button is pressed
if(running){ //if already running, change to walking
running = false;
}else{ //if already walking, change to running
running = true;
}
}
//IF CTRL KEY IS PRESSED
if(Input.GetKeyDown(KeyCode.LeftControl) || Input.GetKeyDown(KeyCode.RightControl)){//when control button is pressed
defend();
}
//find x and z distances between player and target
xDist = Mathf.Abs(transform.position.x-goTo.x);
zDist = Mathf.Abs(transform.position.z-goTo.z);
if(xDist <= targetDist && zDist <= targetDist){ //how close the character needs to be to the target destination to stop moving
going = false;
delete = GameObject.Find("MARKER(Clone)");
Destroy(delete); //delete the destination marker now that we're there
}
}
function Update(){
if(!grounded){
yourCharacterController.Move (Vector3(0, -gravity, 0));
}
//JUMPING
if(Input.GetButton("Jump")){ //if we press the jump button (spacebar)
if(jumping == false){
spaceTimer++;
if(spaceTimer <15){
jump();
}
}
/*spaceTimer++;
if(spaceTimer <20){
animation.CrossFade("jump"); //blends from the current animation to the jump animation
yourCharacterController.Move (Vector3(0, 2, 0)); //move character up
JumpButton.jumping = false;
}
*/
}else{
spaceTimer = 0;
}
}
function jump(){
if(Pause.paused == false){
animation.CrossFade(“jump”); //blends from the current animation to the jump animation
yourCharacterController.Move (Vector3(0, jumpSpeed, 0)); //move character up
//var thisChar : GameObject = GameObject.Find(“Player”);
//thisChar.AddForce (0, 10, 0);
}
}
function defend(){
animation.CrossFade(“defend”);
defense = (characterDefense + WeaponUI.weaponDefense);//raise defense by weapon stat
//defense += WeaponUI.weaponDefense;
print("defending, defense= " + defense);
yield WaitForSeconds(5); //wait 5 seconds
defense = characterDefense;
print("not defending, defense= " +defense);
}
function interact(){
animation.CrossFade(“interact”);
}
function idleAnim(){
// animation.CrossFade(“jump”);
idleTime = 0;
if(bonusIdles > 0){
var rand = Random.Range(0,bonusIdles); //pick random number
if (rand == 0){
doIdle("1");
}else if (rand == 1){
doIdle("2");
}else if (rand == 2){
doIdle("3");
}else if (rand == 3){
doIdle("4");
}else if (rand <3){
doIdle("5");
}
}
}
function doIdle(num: String){
//SFX = AudioMngr.GetComponent(AudioScript);
//if(GeneralManager.sounds){SFX.Idle1();}
//if(GeneralManager.animations){
animation.CrossFade(“idle”+num);
print(“idle”+num);
//}
yield WaitForSeconds (2);
//if(GeneralManager.animations){
animation.CrossFade(“idle”);//}//blend to the idle animation
}
function OnTriggerEnter(other : Collider){
grounded = true;
//print(“collision detected”);
}
function OnTriggerStay(other : Collider){
grounded = true;
//print(“collision detected”);
}
function OnTriggerExit(other : Collider){
grounded = false;
// print(“no collision atm”);
}
@script RequireComponent(CharacterController) //include the character controller when this script is applied
You are likely to get more suggestions if you post the code for your custom character controller. My best guess is that your character controller could raycast using the mouse position. If the object the raycast hits has a tag or a script that indicates it is draggable, the controller would suspends moving until it gets the next mouse click.
– robertbu