c# - Moving the character controller to vector 3 position -


i'm making boss ai perform jump attack against player, ai use both navmesh , character controller movment (navmash pathfinding), i'm having hard time trying move ai designated position. here code:

charactercontroller chara;  [serializefield] transform playertran;  [serializefield] float gravity = 3.8f;  [serializefield] float jumpforce = 50f;  vector3 movevector = vector3.zero;  [serializefield] transform jumpcheck; [serializefield] transform jumppos;    // use initialization void start () {     chara = getcomponent<charactercontroller>();     playertran = gameobject.findgameobjectwithtag("player").getcomponent<transform>();  }  // update called once per frame void update () {     chara.move(movevector);     if (chara.isgrounded)     {         transform.lookat(playertran);     }      movevector -= vector3.up * gravity  * time.deltatime;       if (input.getkeyup(keycode.j))      {         jumpcheck.position = new vector3(playertran.position.x, 0, playertran.position.z);         float angle = findangle( playertran.position.x - transform.position.x , playertran.position.z - transform.position.z);         vector3 _tojumppos = makejumpcricle(playertran.position , jumpcheck.localscale.x/2, angle);          jumppos.position = new vector3(_tojumppos.x, 0, _tojumppos.z);          movevector = vector3.up * jumpforce * time.deltatime;     }     }  float findangle(float x, float y) {     float value;     value = (float)((mathf.atan2(x, y) / mathf.pi) * 180);     if (value < 0)     {         value += 360;     }     debug.log(value);     return value; }  vector3 makejumpcricle( vector3 center, float radius, float angle) {     vector3 pos = vector3.zero;     pos.x = center.x - radius * mathf.sin(angle * mathf.deg2rad);     pos.y = 0;     pos.z = center.z - radius * mathf.cos(angle * mathf.deg2rad);     return pos; } 

i want move ai jumppos both forward , vectors i'm not sure this.

visualization of code

code visualization found solution, used bezier curves generate path

posting here other might find helpful.

refrence link http://www.theappguruz.com/blog/bezier-curve-in-games

public linerenderer jumpline;   private int numberofpoint = 50; [serializefield] list<vector3> pointpositions = new list<vector3>();  charactercontroller chara;  [serializefield] transform playertran;  [serializefield] float gravity = 3.8f;  [serializefield] float jumpforce = 50f;  vector3 movevector = vector3.zero;  [serializefield] transform jumpcheck; [serializefield] transform jumppos;  [serializefield] transform jumphightone;  bool movejump;  vector3 pzero; vector3 pone; float time;   // use initialization void start () {     chara = getcomponent<charactercontroller>();     playertran = gameobject.findgameobjectwithtag("player").getcomponent<transform>();      jumpline.positioncount = numberofpoint;     jumpline.gameobject.setactive(false);    }  // update called once per frame void update () {     chara.move(movevector);     if (chara.isgrounded)     {         transform.lookat(playertran);     }      movevector -= vector3.up * gravity  * time.deltatime;       if (input.getkeyup(keycode.j))      {         jumpcheck.position = new vector3(playertran.position.x, 0, playertran.position.z);          float angle = findangle( playertran.position.x - transform.position.x , playertran.position.z - transform.position.z);         vector3 _tojumppos = makejumpcricle(playertran.position , jumpcheck.localscale.x/2, angle);          vector3 middlepoint = getthemiddlepoints(transform.position, playertran.position, 0.5f);          jumphightone.position = new vector3(middlepoint.x, jumphightone.position.y, middlepoint.z);          jumppos.position = new vector3(_tojumppos.x, 0, _tojumppos.z);         //movevector = vector3.up * jumpforce * time.deltatime;         //movejump = true;          drawlinerbeziercurves();     }      if (movejump)     {         //movetowardstarget(jumppos.position);     }  }  vector3 getthemiddlepoints(vector3 origin, vector3 destination, float middlepointfactor) {     return (destination - origin) * middlepointfactor + origin;         // (destination - origin) * 0.5f;  }   float findangle(float x, float y) {     float value;     value = (float)((mathf.atan2(x, y) / mathf.pi) * 180);     if (value < 0)     {         value += 360;     }     //debug.log(value);     return value; }  vector3 makejumpcricle( vector3 center, float radius, float angle) {     vector3 pos = vector3.zero;     pos.x = center.x - radius * mathf.sin(angle * mathf.deg2rad);     pos.y = 0;     pos.z = center.z - radius * mathf.cos(angle * mathf.deg2rad);     return pos; }   void movetowardstarget(vector3 targetpostios) {     var offset = targetpostios - transform.position;      if (offset.magnitude > .1f)     {         offset = offset.normalized * 15;         chara.move(offset * time.deltatime);     }     else     {         movejump = false;     }  }   // line bezier curves vector3 calculatebeziercurvespoints(float t , vector3 p0, vector3 p1 ) {     return p0 + t * (p1 - p0);         // p = p0 + t(p1 – p0)  ,  0 < t < 1 }  // line bezier curves vector3 calculatebeziercurvespoints(float t, vector3 p0, vector3 p1, vector3 p2) {      float u = 1 - t;     float uu = u * u;     float tt = t * t;      vector3 p = uu * p0;     p = p + 2 * u * t * p1;     p = p + tt * p2;     return p;      //p = (1-t)^2 p0 + 2 (1-t) t p1 + t^2 p2 , 0 < t < 1     //     uu              u          tt     //     uu   * p0  + 2 * u  * t * p1  + tt * p2   }  void drawlinerbeziercurves() {     if (pointpositions.count > 0)     {         pointpositions.clear();         jumpline.positioncount = 0;         jumpline.positioncount = numberofpoint;      }      (int = 1; < numberofpoint + 1; i++)     {         float t = / (float) numberofpoint;          if (!jumpline.gameobject.activeinhierarchy)         {             jumpline.gameobject.setactive(true);         }          pointpositions.add(calculatebeziercurvespoints(t, transform.position,jumphightone.position, jumppos.position));         jumpline.setposition(i - 1, pointpositions[i - 1]);     }  } 

Comments

Popular posts from this blog

PHP and MySQL WP -

android - InAppBilling registering BroadcastReceiver in AndroidManifest -

go - golang pprof for c library code -